Python字母版HiLo猜谜游戏循环逻辑异常求助
修复后的字母版HiLo猜谜游戏代码
问题根源分析
- 独立
if语句导致无效输入处理后仍执行高低判断:输入无效内容(如数字、多字符)时,处理完无效提示并获取新输入,但后续字母高低比较仍基于原无效输入执行,引发错误提示。 - 高低提示逻辑写反:字母顺序
A-Z对应ASCII值从小到大,原代码中高低提示的方向完全颠倒,这是“几乎都触发过高提示”的核心原因。 - 无效输入判断重复:多字符+非字母的输入会触发两次无效提示,且重复累加猜测次数。
- 类方法定义不规范:未将游戏方法声明为静态方法,
__init__引用未定义变量会报错。 - 猜对时重复记录猜测:正确猜测会被多次添加到
guesses列表。 - 文件操作未用上下文管理器:存在文件未正常关闭的风险。
修复后的代码
from datetime import datetime import random class HiLo: @staticmethod def HiLogame(): # 动态生成A-Z字母列表,替代手动输入 answer_opt = [chr(c) for c in range(ord('A'), ord('Z')+1)] answer = random.choice(answer_opt) guess_count = 0 guesses = [] while True: user_guess = input("Enter a letter (b/w A and Z): ").upper() guesses.append(user_guess) guess_count += 1 # 优先判断无效输入 if len(user_guess) != 1 or not user_guess.isalpha(): print("Invalid answer.\n") continue # 输入有效时判断结果 if user_guess == answer: print(f"\nYou guessed correctly! The answer was: {answer}") print(f"Your number of guesses: {guess_count}") break elif answer > user_guess: print("Your guess is too low.") print("Guess closer to Z.\n") else: print("Your guess is too high") print("Guess closer to A.\n") # 使用上下文管理器处理文件,自动关闭 with open("guess_count.txt", mode='a') as guess_file: guess_file.write(f"Guesses: {str(guesses)}\n") guess_file.write(f"{guess_count} guesses, ") guess_file.write(f"{datetime.now()}\n\n") # 启动游戏 HiLo.HiLogame()
关键修复点说明
- 修正提示逻辑:根据字母ASCII值顺序,调整高低提示的方向,解决了错误提示的核心问题。
- 重构判断流程:先校验输入有效性,无效则直接进入下一轮循环,避免无效输入进入高低比较逻辑。
- 简化类结构:移除无用的
__init__和__str__方法,将游戏方法声明为静态方法,合并日期写入逻辑,避免重复打开文件。 - 修复重复记录:每轮循环仅添加一次猜测记录,猜对时直接跳出循环,消除数据冗余。
- 优化文件操作:用
with语句自动管理文件资源,避免资源泄漏。 - 简化字母生成:通过
chr()和ord()动态生成字母列表,减少手动输入的冗余和错误。
内容的提问来源于stack exchange,提问作者Cloud
相关产品推荐
相关产品推荐

