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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:06:06