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

Python猜单词游戏开发遇问题:已填字母重置及AttributeError报错

Python猜单词(Hangman)游戏问题修复

问题1:已填入字母被移除

每次调用guessWord()时,都会执行blanks = []重新初始化空白列表,导致之前猜对的字母全部丢失,流程直接重置。

问题2:AttributeError: 'NoneType' object has no attribute 'insert'

list.insert()是原地修改列表的方法,它的返回值是None。你把blanks.insert(...)的结果赋值给blanks,会让blanks变成None,后续再调用insert自然触发报错。


修复后的完整代码

import random

# 单词列表
word_list = ["ardvak", "donkey", "baboon", "elephant", "tiger"]

# 随机选择目标单词并统一转为小写
chosen_word = random.choice(word_list).lower()
word_length = len(chosen_word)
print(f"随机单词: {chosen_word}")

# 初始化空白进度列表,游戏全程复用
blanks = ['_'] * word_length

# 获取用户输入的猜测字母
def get_user_guess():
    return input("猜一个字母: ").lower()

# 根据用户猜测更新进度列表
def update_guess_progress(guess):
    # 遍历目标单词的每个字符,匹配则更新对应位置
    for index, char in enumerate(chosen_word):
        if char == guess:
            blanks[index] = guess
    # 格式化打印当前进度
    print(' '.join(blanks))

# 初始显示空白进度
print(' '.join(blanks))

# 游戏主循环:直到所有空白被填满
while '_' in blanks:
    user_guess = get_user_guess()
    update_guess_progress(user_guess)

关键修改说明

  • 将blanks的初始化移到全局,仅在游戏启动时创建一次,避免每次猜测重置进度
  • 移除冗余的循环和函数(比如randomWord()里的无效for循环、len_chosen_word1()函数),简化逻辑
  • 放弃insert方法,直接通过索引更新blanks列表,更符合需求且避免返回值问题
  • 使用enumerate()遍历单词,同时获取索引和字符,方便精准更新进度
  • 统一单词和输入字母为小写,避免大小写不匹配的问题

内容的提问来源于stack exchange,提问作者Abdulhameed Yunusa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:30:44