如何修改猜单词游戏代码,使错误猜测仅扣除1条生命而非多条
如何修改猜单词游戏代码,使错误猜测仅扣除1条生命而非多条
嗨,很高兴看到你在100天编程课上的进展!咱们来快速解决这个错误扣多条命的问题~
问题根源
你代码里最后那段else块的循环是核心问题:
else: for i in range(len(chosen_word)): if guess not in chosen_word[i]: lives -= 1
这段代码会遍历目标单词的每一个字母,只要猜测的字母和当前字母不匹配,就扣1条命。比如目标单词是"camel"(5个字母),你猜错一个字母,就会直接扣5条命,这完全不符合游戏逻辑。
我们需要实现的是:只要猜测的字母完全不在目标单词里,就只扣1条命,不管单词有多长。
修复方案
1. 核心修改(解决多扣命问题)
把上述的循环代码替换成一个简单的条件判断,直接检查猜测的字母是否在目标单词中:
else: # 仅当猜测的字母不在目标单词里时,扣除1条生命 if guess not in chosen_word: lives -= 1 print(f"Oops! That letter isn't in the word. Lives left: {lives}")
2. 优化体验(避免重复扣命)
额外建议添加一个wrong_letters列表,用来记录已经猜错的字母,防止用户重复猜同一个错误字母时被重复扣命。以下是修改后的完整可运行代码:
import random word_list = ["aardvark", "baboon", "camel"] chosen_word = random.choice(word_list) # print(chosen_word) # 正式游戏时可以注释掉,隐藏答案 placeholder = "" word_length = len(chosen_word) for position in range(word_length): placeholder += "_" print(placeholder) game_over = False correct_letters = [] wrong_letters = [] # 新增:记录已猜错的字母 lives = 6 while not game_over: guess = input("Guess a letter: ").lower() # 处理重复猜测的情况(优化体验) if guess in correct_letters or guess in wrong_letters: print(f"You already guessed '{guess}'! Try another one.") continue display = "" for letter in chosen_word: if letter == guess: display += letter correct_letters.append(guess) elif letter in correct_letters: display += letter else: display += "_" print(display) # 检查胜负状态 if "_" not in display: game_over = True print("You win.") elif lives == 0: game_over = True print("You lose.") print(f"The word was: {chosen_word}") else: # 核心逻辑:错误猜测仅扣1条命 if guess not in chosen_word: wrong_letters.append(guess) lives -= 1 print(f"Wrong guess! Lives left: {lives}") print(f"Lives remaining: {lives}")
修复逻辑说明
- 移除冗余循环:不再逐个字母判断匹配,而是直接检查整个单词是否包含猜测字母,确保错误猜测只会触发一次扣命。
- 新增错误字母记录:通过
wrong_letters列表避免重复扣命,同时也可以后续扩展显示已猜错的字母,让游戏更直观。 - 重复猜测提示:当用户重复输入已猜过的字母时,直接给出提示并跳过后续逻辑,提升游戏的友好度。
这样修改后,游戏就会按照预期,每次错误猜测仅扣除1条生命啦~继续加油,100天编程课坚持下去会收获很多的!
备注:内容来源于stack exchange,提问作者Logan Smith
相关产品推荐
相关产品推荐

