2016-12-28 3 views
-1

Я просто не могу понять проблему. Так что я делаю игру, и я использую деньги, чтобы покупать вещи в игре, и это, похоже, не работает. Я пытаюсь написать новые потраченные деньги в TXT-файле, и я просто получаю сообщение об ошибке.Открытие файлов в pygame error

with open("money.txt", "r") as rm: 
game_money = rm.read() 
with open("money.txt", "w") as fm: 
fm.write(str(game_money)) 

def Function(): 
      ............ 
      slowdown_price = 20 
      elif action == "buy_slowdown": 
      if game_money >= 20: 
       time.sleep(0.5) 
       game_money -= slowdown_price 
       slowdown_powerup += 1 
       with open("money.txt", "w") as wm: 
        wm.write(str(game_money)) 

Я получаю следующее сообщение об ошибке:

TypeError: unsupported operand type(s) for -=: 'str' and 'int' 
+0

какая ошибка вы получаете? Можете ли вы исправить ошибки с отступом? – depperm

+0

Я пробовал все преобразования целых чисел в строки .. просто не работает. – StrozeR

+0

всегда добавьте в вопрос ** FULL ** сообщение об ошибке - есть и другая полезная информация - т.е. какая строка создает проблему и т. д. – furas

ответ

0

Чтение из файла результатов в виде строки. Это означает, что game_money представляет собой строку, содержащую символы числа, например "30". Вы должны бросить строку в целое число:

game_money = int(rm.read()) 

ли принять к сведению, что это может не сработать, если файл не содержит только номер, но и другие, не являющиеся цифрами.

+0

Это прекрасно работает! – StrozeR

0

Это швы, которые вы пытаетесь вычитать с номером slowdown_price из текста game_money. Вам нужно будет преобразовать game_money в число первых. то есть.

game_money = int(game_money) 
1

Вы используете Python 2, который будет счастливо сравнивать целые числа со строками, так if game_money >= 20: работает отлично. Однако вы не можете вычесть целое число из строки, поэтому game_money -= slowdown_price не удается. Преобразовать это значение в целое число (или поплавок) после того, как вы читаете это в: чисел Если вы используете с плавающей точкой

game_money = int(rm.read()) 

или

game_money = float(rm.read()) 

, имейте в виду, что они не являются точными, так точные сравнения с == и != надежны.

+0

Я не использую python 2 im, используя python 3.4, но это, похоже, отлично работает. – StrozeR

+0

@StrozeR - Нет, нет. Если вы использовали Python 3, возникла бы ошибка, когда вы попытались бы увидеть, была ли строка более целой. – TigerhawkT3

+0

Im positive, что я использую компилятор Python 3.4 – StrozeR

Смежные вопросы