You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改猜单词游戏代码,使错误猜测仅扣除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}")

修复逻辑说明

  1. 移除冗余循环:不再逐个字母判断匹配,而是直接检查整个单词是否包含猜测字母,确保错误猜测只会触发一次扣命。
  2. 新增错误字母记录:通过wrong_letters列表避免重复扣命,同时也可以后续扩展显示已猜错的字母,让游戏更直观。
  3. 重复猜测提示:当用户重复输入已猜过的字母时,直接给出提示并跳过后续逻辑,提升游戏的友好度。

这样修改后,游戏就会按照预期,每次错误猜测仅扣除1条生命啦~继续加油,100天编程课坚持下去会收获很多的!

备注:内容来源于stack exchange,提问作者Logan Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 10:43:04