You need to enable JavaScript to run this app. Python如何将int变量totalbal存入文本文件并修复写入内容叠加问题
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将int变量totalbal存入文本文件并修复写入内容叠加问题

问题根因

  • 用r+模式打开文件读取初始值后,文件指针会移动到文件末尾,后续每次调用write()都是在末尾追加内容,不会覆盖原有内容,所以多次点击后所有历史数值会拼接成一串存入文件。
  • 代码里的str(baltotal.write(savebal))是无效冗余代码:write()返回的是成功写入的字符数,对它做类型转换不会影响写入逻辑,你尝试的int(baltotal.write(...))也解决不了问题。

修复方案

方式1:改动最小,适配现有代码

写入前将文件指针移到文件开头,写入完成后截断文件清空旧内容残留,修改点击事件后的代码即可:

if event.type == MOUSEBUTTONDOWN:
    totalbal += cps
    savebal = str(totalbal)
    # 移动文件指针到文件开头
    baltotal.seek(0)
    baltotal.write(savebal)
    # 截断文件,删除指针后所有残留内容
    baltotal.truncate()
    print("Your current money is", savebal, end="\r")

方式2:更安全的文件操作逻辑(推荐)

不要全局持有文件句柄,每次写入时用w模式打开文件直接覆盖,自动处理文件资源释放,避免指针管理失误:

import pygame, sys, time
from pygame.locals import *

# 初始化读取数值
with open("clickpersecond.txt", "r") as f:
    cps = int(f.read())
with open("totalbal.txt", "r") as f:
    totalbal = int(f.read())

pygame.init()
clock = pygame.time.Clock()
while True: # 主游戏循环
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            totalbal += cps
            savebal = str(totalbal)
            # w模式打开会直接覆盖整个文件内容
            with open("totalbal.txt", "w") as f:
                f.write(savebal)
            print("Your current money is", savebal, end="\r")
    
    pygame.display.flip()
    clock.tick(30)

内容的提问来源于stack exchange,提问作者Zgn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 07:24:02