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
相关产品推荐
相关产品推荐

