如何在我的代码中解决此错误:ValueError:“ l”不在列表中,错误

时间:2019-11-23 20:09:51

标签: python list syntax

CASE

我正在尝试修复我的子手代码,以便如果我的答案是“你好”,而我猜到了“ l”,那么在打印output_answer时,两个字母都应该出现。但是我在第29行遇到了一个错误,它说position = answer.index(guess)

这会引发错误ValueError:'l'不在列表中
我知道它在我的列表中,因为我在开始时就打印了列表,而我在其中。无论如何,我都无法告诉自己我是不是很傻,还是我只是想丢东西,如果能发现错误,将不胜感激。谢谢!

1 个答案:

答案 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