尽管满足了条件,循环仍将永远继续



My while循环应该在显示的每个字母不是下划线时结束。

然而,尽管显示更新以删除所有下划线。循环不断,我不明白为什么。

import random
word_list = ["aardvark", "baboon", "camel"]
chosen_word = random.choice(word_list)
word_length = len(chosen_word)

print(f'Pssst, the solution is {chosen_word}.')
display = []
for _ in range(word_length):
display += "_"

guess = input("Guess a letter: ").lower()
def check_letter():
for position in range(word_length):
letter = chosen_word[position]
if letter == guess:
display[position] = letter
print(display)
check_letter()
for item in display:
while item == "_":
guess = input("Guess a letter: ").lower()
check_letter()
print("You've Won")

我使用您的代码的时间比我想象的要长得多。这个问题很微妙。

代码的问题是item永远不会更改它的值(尽管有for循环(。这就是为什么这个问题很微妙——for循环(for item in display:(只迭代一次,因为它包含的while循环是无限的。while循环是无止境的,因为while循环中的任何内容都不会改变item的值。

话虽如此,我明白你为什么在SO问这个问题了。这里有一段代码,在一段时间内消除了for循环。我已经消除了item变量——它无论如何都不会改变。相反,使我们处于循环中的条件是display变量中仍有下划线。

import random
word_list = ["aardvark", "baboon", "camel"]
chosen_word = random.choice(word_list)
word_length = len(chosen_word)

print(f'Pssst, the solution is {chosen_word}.')
display = []
for _ in range(word_length):
display += "_"

guess = input("Guess a letter: ").lower()
def check_letter():
for position in range(word_length):
letter = chosen_word[position]
if letter == guess:
display[position] = letter
print(display)
check_letter()
while '_' in display:
guess = input("Guess a letter: ").lower()
check_letter()
print("You've Won")

项是显示元素的副本。这可能是你想要的

for i in range(word_length):
while display[i] == "_":
guess = input("Guess a letter: ").lower()
check_letter()
import random
word_list = ["aardvark", "baboon", "camel"]
chosen_word = random.choice(word_list)
word_length = len(chosen_word)
display = []
print(f'Pssst, the solution is {chosen_word}.')
display = []
for _ in range(word_length):
display += "_"

guess = input("Guess a letter: ").lower()
def check_letter(display):
for position in range(word_length):
letter = chosen_word[position]
if letter == guess:
display[position] = letter
print(display)
check_letter(display)
for item in display:
while item == "_":
guess = input("Guess a letter: ").lower()
check_letter(display)
if (''.join([str(elem) for elem in display]) == chosen_word) :
break

print("You've Won")

最新更新