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

Python编写Hangman游戏时if等值判断失效问题咨询

Python实现Hangman游戏时字符串相等判断始终不成立的修复方案

故障原因

readlines()读取文本文件返回的每一行内容,末尾会携带该行的换行符\n,因此变量answer的实际值为「正确单词+换行符」的形式,例如目标单词是cat时,answer实际是"cat\n"。
而input()获取的用户输入会自动丢弃输入末尾的回车,不会携带换行符,因此哪怕用户输入的单词拼写完全正确,两个字符串长度、内容都不一致,相等判断永远返回False。
代码里下划线打印用len(answer)-1刚好抵消了换行符占的长度,所以下划线显示长度看起来和单词长度匹配,进一步掩盖了换行符的问题。

除此之外原有代码还有几个隐患:

  • 随机选词的索引范围写死为0-212,一旦词库文件行数变动,要么触发索引越界报错,要么无法抽到词库末尾的单词
  • 直接调用open()打开文件后没有执行关闭操作,会造成文件资源泄漏
  • 没有对用户输入做容错处理,如果用户输入时不小心带了前后空格,也会触发判断失败

修复后可直接运行的代码

import random

# 上下文管理器自动处理文件关闭,读取时清理所有空行、每行首尾的换行/空白字符
with open("hangmanwords.txt", "r", encoding="utf-8") as f:
    word_pool = [line.strip() for line in f.readlines() if line.strip()]

answer = random.choice(word_pool)
print("_ " * len(answer) + "\n")

for counter in range(6):
    guess = input("Enter your guess:\n").strip()
    if guess == answer:
        break
    print("Unlucky, try again")

if counter == 5:
    print(f"Unlucky, you did not guess it correctly. The correct word was {answer}")
else:
    print("Well done, you got it!")

核心修改说明

  • 读取词库时对每一行调用.strip(),彻底移除换行符、首尾多余空格,拿到干净的目标单词
  • 改用random.choice()从单词列表直接随机取值,不需要手动维护索引范围,适配任意长度的词库文件
  • 对用户输入也调用.strip()做容错,避免误输入的前后空格导致判断失败
  • 修正下划线长度计算逻辑,直接匹配真实单词长度
  • 用with上下文管理器打开文件,自动完成资源释放,不需要手动调用close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:24:23