您的代码的问题是您试图调用hiscore.replace
when hiscore
is an int
.
我不确定你为什么首先尝试使用replace
。这对于用不同的字符串替换字符串的一部分很有用。如果你想替换整个东西,只需分配一个新值:hiscore = score
.
hisc = open("Hscore.txt", "r+")
hiscore = hisc.read(3) # 3 because the max score would never reach 1000
highscore = int(hiscore)
if score > highscore:
hiscore = score
hisc.write(hiscore)
但是,您还有第二个问题:您正在将int
输出写入文件,而您想要的(我认为)是将int
其精确地表示为 3 个字符的字符串。因此,将最后一行替换为:
hisc.write('{:3}'.format(hiscore))
同时,以模式打开文件"r+"
可能不会像您认为的那样。在 Python 3 中,“r+”文件的“读指针”和“写指针”总是在同一个位置。因此,如果您读取 3 个字符,然后写入 3 个字符,则最终会覆盖字符 3-6,或在末尾添加 3 个新字符,而不是根据需要覆盖字符 0-3。您可以通过seek(0, 0)
在read
.
最后,你永远close
不会保存文件,这意味着你写的任何东西都可能永远不会被保存——它可能会留在内存中的缓冲区中,并且永远不会被刷新到实际的磁盘文件中。在这里打开读取,然后关闭,然后打开写入,然后关闭可能更简单,所以你不需要担心所有的seek
废话。关闭文件最简单的方法是使用with
语句。
所以,把它们放在一起:
with open("Hscore.txt", "r") as hisc:
hiscore = hisc.read(3) # 3 because the max score would never reach 1000
highscore = int(hiscore)
if score > highscore:
with open("Hscore.txt", "w") as hisc:
hisc.write('{:3}'.format(score))
但这依赖于这样一个事实,即保证 Hscore.txt 存在(在当前工作目录中),并且其中有一个数字。如果某些错误导致您在其中粘贴“x”,或者将文件完全清空,则每次运行时都会出现异常,并且永远无法恢复。所以,你可能想要这样的东西:
try:
with open("Hscore.txt", "r") as hisc:
hiscore = hisc.read(3) # 3 because the max score would never reach 1000
highscore = int(hiscore)
except IOError as e:
print('Warning: couldn't open "Hscore.txt": {}'.format(e))
highscore = 0
except ValueError as e:
print('Warning: couldn't convert "{}" from "Hscore.txt" to an integer: {}'.format(hiscore, e))
highscore = 0
这样,它会打印出一个警告,希望能帮助您找出问题所在,并尝试恢复(假设丢失或损坏的文件意味着高分为 0)。
open
文档和io
模块概述解释了大部分内容,但它并不完全适合初学者。教程中的读写文件可能会更有帮助。