CASE
我正在尝试修复我的子手代码,以便如果我的答案是“你好”,而我猜到了“ l”,那么在打印output_answer时,两个字母都应该出现。但是我在第29行遇到了一个错误,它说position = answer.index(guess)
这会引发错误ValueError:'l'不在列表中
我知道它在我的列表中,因为我在开始时就打印了列表,而我在其中。无论如何,我都无法告诉自己我是不是很傻,还是我只是想丢东西,如果能发现错误,将不胜感激。谢谢!
答案 0 :(得分:0)
违规代码:
while number_left != 0:
position = answer.index(guess)
answer[position] = "_"
number_left = actual_number_left - 1
guessed[position] = guess
if number_left == 0:
output_answer = " ".join(guessed)
print(output_answer)
break
错误特别发生在此行:position = answer.index(guess)
。不过,我粘贴了整个while循环,因为整个过程可能需要进行一些重组。
主要问题是,该while循环具有过多的迭代次数。循环直到number_left == 0
才结束。最初,number_left
设置为1
,所以我们知道循环将至少运行一次,这很好。然而,while循环中number_left
发生变化的唯一位置是在此行中:
number_left = actual_number_left - 1
如果answer_input
是“ hello”(因此answer
是["h", "e", "l", "l", "o"]
),而我猜字母是“ l”,那么actual_number_left
将是{{1} }。 3
永远不会在while循环中更改为其他值,因此actual_number_left
将在每次迭代中采用number_left
的值。这意味着,while循环不会结束。对于循环的每次迭代,都用下划线替换下一个找到的猜中字母的实例。因为“ hello”有两个l,所以这不会对前两个迭代造成任何问题,但是在第三次迭代中,2
将抛出str.index
异常,因为不再需要替换l