Проблема с вашим кодом заключается в том, что вы пытаетесь позвонить hiscore.replace
, когда hiscore
является 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
файл, что означает, что все, что вы написали, возможно, никогда не будет спасено - оно может сидеть в буфере в памяти и никогда не сбрасываться в фактический файл диска. И, вероятно, здесь проще просто открыть для чтения, затем закрыть, затем открыть для записи, а затем закрыть, так что вам не нужно беспокоиться обо всем этом, но не нужно. Самый простой способ закрыть файлы - использовать оператор 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
module Overview объясняет большую часть этого, но это не совсем новичок. Reading and Writing Files в руководстве может быть более полезным.
Что такое переменная оценка? int или string? – placeybordeaux
оценка - это int, а мой оригинальный рекордер в текстовом документе - 0 –
@kennym 'r +' предназначен для чтения и записи. – squiguy