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'不在列表中我知道它在我的列表中,因为我在开始时就打印了列表,而我在其中。无论如何,我都无法告诉自己我是不是很傻,还是我只是想丢东西,如果能发现错误,将不胜感激。谢谢!
有问题的代码:
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
为3
。 actual_number_left
永远不会在while循环中更改为其他值,因此number_left
将在每次迭代中采用2
的值。这意味着,while循环不会结束。对于循环的每次迭代,都用下划线替换下一个找到的猜中字母的实例。因为“ hello”具有两个l,所以这不会对前两个迭代造成任何问题,但是在第三次迭代中,str.index
将抛出ValueError
异常,因为没有其他l可以替换。