Python如何判断两个变量相等?猜歌游戏输入正确仍判错如何修复
Python猜歌游戏判定逻辑异常修复方案
故障根本原因
readlines()读取的每一行文本末尾会自带换行符\n,而input()获取的用户输入会自动剔除末尾换行符,二者内容实际存在差异,因此哪怕字面内容一致也会判定不相等,这是你换了==也没用的核心原因- 用
is/is not做字符串内容比较是完全错误的用法:is判断的是两个对象是否指向同一块内存地址,仅Python内部驻留的极短字符串才会返回True,正常内容比较必须使用==/!= - 额外隐藏问题:代码中用到的
random、sys模块未导入,打开的文件没有主动关闭,存在资源泄漏风险
修复后的代码示例
import random import sys def EasySongs1(easy): # 用with语句自动管理文件句柄,无需手动关闭 with open('easy.txt', 'r', encoding='utf-8') as f: lines = f.readlines() songline = random.randrange(1, 30) # 去掉答案末尾的换行符和多余空白 answereasy = lines[songline].strip() with open('easyq.txt', 'r', encoding='utf-8') as f: lines = f.readlines() questioneasy = lines[songline].strip() print(questioneasy) life1 = input("Guess the song ") if life1 == answereasy: return "good job" life2 = input("2 lives left,Guess again ") if life2 == answereasy: return "good job" life3 = input("last chance, guess again ") if life3 == answereasy: return "good job" sys.exit("you messed up")
关键修改说明
- 读取答案和问题行时调用
.strip()方法,移除首尾的换行符、空格等空白字符,如果需要保留首尾空格可替换为.rstrip('\n')仅移除末尾换行符 - 所有字符串比较逻辑统一使用
==判断内容相等 - 用
with语句读写文件,无需手动调用close()方法,避免资源泄漏 - 补充了缺失的模块导入,优化了重复判断的冗余逻辑
内容的提问来源于stack exchange,提问作者Rocketboosters
相关产品推荐
相关产品推荐

