为何Python代码执行break命令后计数器无法正常计数?
问题
我尝试编写一个持续向用户请求输入单词的程序,当用户第二次输入已录入过的重复单词时程序终止。写的代码理论上应该能实现需求,但计数器仅运行一次就停止计数,找不到问题根源。
原代码如下:
count = 0 while True: my_word = input("Word: ") if my_word == my_word in my_word: count += 1 print(f"You typed in", (count), "different words") break
错误原因
- 重复判断逻辑完全错误:
my_word == my_word in my_word是Python链式比较语法,等价于(my_word == my_word) and (my_word in my_word),只要输入非空字符串,这个判断永远为真,第一次输入就会直接触发分支,根本没有做重复校验。 - 没有存储历史输入的结构:代码里没有变量保存之前输入过的单词,根本无法判断当前输入是否重复。
- 逻辑位置错误:计数累加和终止循环
break写在同一个分支下,只要触发判断就会计数一次后直接退出,自然计数器只会运行一次。
修正后可运行代码
count = 0 seen_words = [] while True: current_word = input("Word: ") if current_word in seen_words: print(f"You typed in {count} different words") break seen_words.append(current_word) count += 1
逻辑说明
- 新增空列表
seen_words存储所有已经录入的不重复单词 - 每次获取用户输入后,先校验单词是否存在于历史记录中:如果存在,说明遇到重复输入,直接输出统计的不重复单词数量,终止程序
- 如果单词未出现过,就将其加入历史记录列表,计数器加1,进入下一轮输入请求
内容的提问来源于stack exchange,提问作者Zaeema
相关产品推荐
相关产品推荐

