为何while循环中使用不同if条件会导致代码输出异常?
问题原因与解决方案
情况1:使用if letter != guess时的问题
原因
letter变量来自遍历chosen_word的for循环,循环结束后letter会保留单词的最后一个字符。即使你猜中了正确字母(比如猜"c"对应单词"cat"),循环结束后letter是"t",和你的猜测"c"不相等,导致代码执行扣减生命值、显示失败ASCII图的逻辑。这会导致所有猜测(包括正确的)都扣血,还没等你猜完所有字母就可能耗尽生命值,或者在本该获胜时出现错误的失败提示。
解决方案
添加一个布尔变量跟踪本次猜测是否正确,避免使用循环遗留的letter判断:
- 在for循环前初始化
guess_correct = False - 当猜中字母时,将
guess_correct设为True - 循环结束后,判断
if not guess_correct再执行扣血逻辑
情况2:使用if letter not in chosen_word时的问题
原因
letter是从chosen_word中取出的字符,所以letter not in chosen_word这个条件永远为假。即使猜错字母,扣血逻辑也不会触发,生命值一直保持6,游戏永远不会进入"You lose"结束状态,只会无限循环要求猜字母。
解决方案
判断用户的猜测是否不在目标单词中,而非循环中的letter:将条件改为if guess not in chosen_word。同时建议添加重复猜测的处理(避免重复扣血)。
修正后的完整代码
import random stages = [''' +---+ | | O | /|\ | / \ | | ========= ''', ''' +---+ | | O | /|\ | / | | ========= ''', ''' +---+ | | O | /|\ | | | ========= ''', ''' +---+ | | O | /| | | | =========''', ''' +---+ | | O | | | | | ========= ''', ''' +---+ | | O | | | | ========= ''', ''' +---+ | | | | | | ========= '''] word_list = ["cat"] chosen_word = random.choice(word_list) # Testing code print(f'Pssst, the solution is {chosen_word}.\n') chosen_word_list = ["_"] * len(chosen_word) lives_left = 6 print(f"You have {lives_left} lives to use\n") print(f"{chosen_word_list}\n") game_end = False guessed_letters = [] # 记录已猜过的字母,避免重复处理 while not game_end: guess = input("Guess a letter: \n\n").lower() # 处理重复猜测 if guess in guessed_letters: print(f"You already guessed '{guess}', try another letter.\n") continue guessed_letters.append(guess) guess_correct = False for i in range(len(chosen_word)): letter = chosen_word[i] if letter == guess: chosen_word_list[i] = letter guess_correct = True # 打印当前状态 print(f"\n{chosen_word_list}") print(stages[lives_left]) # 显示当前剩余生命值对应的状态图 # 处理错误猜测 if not guess_correct: lives_left -= 1 print(f"You have {lives_left} lives remaining\n") print(stages[lives_left]) if lives_left == 0: game_end = True print("You lose") # 检查是否获胜 if "_" not in chosen_word_list: # 更简洁的获胜判断方式 game_end = True print("You win")
内容的提问来源于stack exchange,提问作者Handsome rob
相关产品推荐
相关产品推荐

