为何while循环在条件为false时仍运行?(刽子手游戏开发)
刽子手游戏While循环未正确终止问题修复
我学习Python已有一周,正在开发刽子手(hangman)游戏以练习编程。我设置了一个while循环,预期仅在玩家剩余生命值大于0且仍有未猜字母时运行,但测试时故意耗尽生命值后,循环仍会继续运行,并输出仅应在生命值>1时显示的语句。
问题代码
def play(): lives = 6 random_word = str(random.choice(words)) letters_in_random_word = 0 for letter in random_word: letters_in_random_word += 1 already_guessed_list = [] for letter in random_word: print("_", end='') while lives > 0 and letters_in_random_word > 0: # more letters to be guessed get_guess = input("\nGuess a letter here: ") if get_guess in already_guessed_list: print("\nYou already guessed this letter. Please guess a different letter.") else: already_guessed_list.append(get_guess) for letter in get_guess: if letter in random_word: letters_in_random_word -= 1 * random_word.count(letter) print("\nThat letter is in this word. You have", lives, "lives left.") if get_guess not in random_word: lives -=1 print("\nThat letter is not in this word. You have", lives, "lives left. Use them wisely") for letter in random_word: if letter in already_guessed_list: print(letter, end = '') else: print("_", end = '') if lives == 0: print("\nOut of lives. The word was", random_word) elif letters_in_random_word == 0: print("\nYou guessed the word correctly.") play()
更新说明
我修改了代码,现在已得到预期结果。
修复后代码
import random from words import words def play(): lives = 6 random_word = str(random.choice(words)) letters_in_random_word = 0 for letter in random_word: letters_in_random_word += 1 already_guessed_list = [] for letter in random_word: print("_", end='') while lives > 0 and letters_in_random_word > 0: print("\nYou have", lives, "lives left. Use them wisely") # more letters to be guessed get_guess = input("\nGuess a letter here: ") if get_guess in already_guessed_list: print("\nYou already guessed this letter. Please guess a different letter.") else: already_guessed_list.append(get_guess) for letter in get_guess: if letter in random_word and lives > 0: letters_in_random_word -= 1 * random_word.count(letter) print("\nThat letter is in this word.") if get_guess not in random_word and lives > 0: lives -=1 print("\nThat letter is not in this word.") for letter in random_word: if letter in already_guessed_list: print(letter, end = '') else: print("_", end = '') if lives == 0: break if letters_in_random_word == 0: print("\nYou guessed the word correctly.") print("\nOut of lives. The word was", random_word) play()
内容的提问来源于stack exchange,提问作者rooknoobski
相关产品推荐
相关产品推荐

