Python数字猜谜游戏读取txt高分对比玩家得分更新实现问题
实现思路
- 猜数字游戏的成绩判断规则为「猜测次数越少成绩越好」,因此历史最佳成绩为过往所有记录的最小数值
- 使用
try...except捕获文件不存在、文件内容损坏等异常,兼容首次运行、文件误删的场景 - 读取文件时过滤空行和非法内容,只保留有效整数成绩,避免运行报错
- 对比本次成绩与历史最佳成绩后,输出对应提示,再将本次成绩存入文件
完整可运行代码
from random import randint # 如果需要重置所有分数可执行此函数 def overwritefile(): with open("Numbergame.txt", "w") as f: pass # overwritefile() # 取消注释即可清空所有历史分数 # 游戏初始化 n = randint(1,10) guesses = 0 game_running = True # 游戏主循环 while game_running: # 可选优化:捕获非数字输入异常,避免程序崩溃 try: guess = int(input("你猜的数字是多少?\n请输入一个数字:")) except ValueError: print("请输入有效的整数哦") continue guesses += 1 if guess > n: print("猜的数字太大啦!再试一次~") elif guess < n: print("猜的数字太小啦!再试一次~") else: game_running = False print(f"恭喜你猜对了!\n正确数字是{n}\n你一共猜了{guesses}次") # 读取历史分数判断是否为新高分 try: with open("Numbergame.txt", "r") as f: # 过滤空行和非数字内容,转换为整数列表 history_scores = [int(line.strip()) for line in f if line.strip().isdigit()] except FileNotFoundError: # 文件不存在说明是首次运行,无历史记录 history_scores = [] if not history_scores: print("首次游玩,本次成绩自动成为历史新高!") else: best_history = min(history_scores) if guesses < best_history: print(f"🎉 恭喜创造新纪录!历史最佳成绩为{best_history}次,本次仅用了{guesses}次") elif guesses == best_history: print(f"👏 本次成绩平了历史最佳记录{best_history}次!") else: print(f"本次成绩为{guesses}次,历史最佳记录为{best_history}次,继续加油~") # 将本次成绩写入文件 with open("Numbergame.txt", "a") as f: f.write(f"{guesses}\n")
核心改动说明
- 移除了原代码中未使用的
pygame导入,后续如果要开发图形化版本可以再加回来 - 替换了直接
open()的写法为with open()语法,自动管理文件句柄,无需手动调用close(),避免文件资源泄漏 - 增加了非数字输入的异常捕获,避免用户输入非整数时程序直接崩溃,不需要可自行删除
- 按你提到的思路使用
try处理文件不存在的异常,兼容首次运行场景 - 读取历史记录时增加了内容校验,过滤空行、非法字符,避免文件内容异常时程序报错
内容的提问来源于stack exchange,提问作者KGGaming Fluff
相关产品推荐
相关产品推荐

