我该如何解决我的代码中的错误:ValueError:'l'不在列表中,错误

问题描述 投票:0回答:1
print("welcome to hangman")
number_left = 1
answer_input = input()
answer = []

for i in range(len(answer_input)):
    answer.append(answer_input[i])
print(answer)
guessed = []
number_of_underscores = 0
length = len(answer)
for i in range(length):
    guessed.append("_")
while True:
    for i in guessed:
        if i != "_":
            number_of_underscores = number_of_underscores + 1
            if number_of_underscores == length:
                break

    guess = input("Guess your letter")
    actual_number_left = answer.count(guess) + 1
    if guess not in answer:
        print("incorrect")
        output_answer = " ".join(guessed)
        print(output_answer)
    else:
        if answer.count(guess) > 1:
            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
        else:
            for i in answer:
                if i == guess:
                    index_number = answer.index(guess)
                    guessed[index_number] = guess
                    output_answer = " ".join(guessed)
                    print(output_answer)
                    break     

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

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

python list syntax
1个回答
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_left3actual_number_left永远不会在while循环中更改为其他值,因此number_left将在每次迭代中采用2的值。这意味着,while循环不会结束。对于循环的每次迭代,都用下划线替换下一个找到的猜中字母的实例。因为“ hello”具有两个l,所以这不会对前两个迭代造成任何问题,但是在第三次迭代中,str.index将抛出ValueError异常,因为没有其他l可以替换。

© www.soinside.com 2019 - 2024. All rights reserved.