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

如何修复Python hangman游戏TypeError: 'NoneType' has no len()报错

报错根因

你的代码触发TypeError: object of type 'NoneType' has no len()的核心原因是wordsPickedBank函数没有返回有效单词,同时还有多处语法、逻辑错误:

  • 函数内部错误调用自身递归,没有把选中的随机单词返回,导致wordPicked默认取值为None,对None调用len()方法直接报错
  • 函数定义放在while循环内部,每次循环都会重复定义函数,无意义消耗性能
  • str.split("")是非法语法,Python不支持用空字符串作为split的分隔符,后续运行到这行还会触发新报错
  • 现有死循环没有退出逻辑,游戏结束后无法正常终止
修复后完整代码
import random

# 单词抽取函数统一放在循环外定义
def pick_random_word():
    with open('words.txt', 'r', encoding='utf-8') as file:
        all_words = file.read().split()
    return random.choice(all_words)

hangmanGame = True
# 最多允许猜错6次,可自行调整
max_wrong_guesses = 6

while hangmanGame:
    # 抽取随机目标单词
    target_word = pick_random_word()
    # 生成下划线占位符列表,不会暴露原始单词
    display = ['_'] * len(target_word)
    wrong_guesses = 0
    guessed_letters = set()

    print("新一轮 Hangman 游戏开始!")
    # 单轮游戏循环
    while wrong_guesses < max_wrong_guesses and '_' in display:
        # 展示当前占位符,不会显示原始单词
        print(f"\n当前单词:{' '.join(display)}")
        print(f"剩余猜错次数:{max_wrong_guesses - wrong_guesses}")
        guess = input("请输入你猜的字母:").strip().lower()

        # 输入合法性校验
        if len(guess) != 1 or not guess.isalpha():
            print("请输入单个有效字母!")
            continue
        if guess in guessed_letters:
            print("你已经猜过这个字母了,请换一个!")
            continue
        
        guessed_letters.add(guess)

        # 判断猜词是否正确
        if guess in target_word:
            # 替换所有匹配的占位符
            for idx, letter in enumerate(target_word):
                if letter == guess:
                    display[idx] = guess
        else:
            wrong_guesses += 1
            print(f"猜错了!字母 {guess} 不在目标单词里")
    
    # 单轮游戏结束判定
    if '_' not in display:
        print(f"\n恭喜你猜对了!目标单词是:{target_word}")
    else:
        print(f"\n游戏失败!你用完了所有猜错次数,目标单词是:{target_word}")
    
    # 询问是否开启新一轮
    play_again = input("\n是否要开始新一轮游戏?输入y继续,输入n退出:").strip().lower()
    if play_again != 'y':
        hangmanGame = False
        print("游戏结束,再见!")
功能说明
  • 自动从words.txt读取所有单词随机抽取,不会提前向用户暴露目标单词
  • 游戏过程中仅展示和单词长度匹配的下划线占位符,猜对字母后才会更新对应位置的显示
  • 自带输入合法性校验、重复猜词提示,游戏结束后支持自主选择开启新一轮或退出,循环逻辑正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:06