2017-02-07 9 views
1

(EDITED) Я пытаюсь создать копилку, сохранив предыдущие денежные суммы в файл, чтобы вы могли получить доступ к тому, сколько денег у вас было ранее. Но это дает мне ошибку (см. Название). Пожалуйста, не отмечайте это как дубликат, потому что я уже проверил других, и они не отражают мою проблему. Вот мой код:Ошибка неподдерживаемого типа Opperand

def piggybank(): 
    newamount = 0.0 
    file = open('piggybank.txt','r+') 
    addedmoney = input('How much money are you adding?') 
    file.write(addedmoney + '\n') 
    for line in file: 
     newamount += line 
    print("You now have:\n", newamount) 

В основном я говорю о том, что новая сумма равна 0. Тогда я открываю файл для чтения и режим записи и спросить, сколько пользователь хочет добавить. Затем я добавляю его в новую строку в свой файл и добавляю все в файл. Наконец, я печатаю сумму. Однако это не работает, потому что я продолжаю получать ошибку. Пожалуйста помоги!

(Я вроде нуб в переполнении Python и стека, потому что я 13 и только начал изучать.)

Вот мой новый код:

def piggybank(): 
    file = open('piggybank.txt','r+') 
    money = input('How much money are you adding?') 
    file.write(money + '\n') 
    for line in file: 
     money += line 
    print("You now have:\n", money) 
    file.close() 

Если вы посмотрите на мой исходный код , Я добавил новую линию денег, и я тоже это сделал. Тем не менее, он добавляет денежные строки, как если бы они были строками, поэтому он дает «5.005.00», если вы дважды входите в 5.00. Кто-нибудь знает, как добавить новую строку, если вы хотите печатать цифры, а не строки?

+0

Указывает ли ошибка, где возникает ошибка? (номер строки). – synchronizer

ответ

2

Это потому, что ваша строка - это строка, а newamount - номер. Вот почему вы получаете ошибку. Сначала необходимо преобразовать строку в число, прежде чем приступать к вычислению математики.

def piggybank(): 
    newamount = 0.0 
    file = open('piggybank.txt', 'r+') 
    addedmoney = input('How much money are you adding?') 
    file.write(str(addedmoney) + '\n') 
    file.seek(0) 
    for line in file: 
    newamount += float(line) 
    print("You now have:\n", newamount) 
+0

Это не сработало, но я сменил 0 на строку, и это сработало, потому что строка - это строка. Но теперь есть новая ошибка, когда она не добавляет текущий, но предыдущий, поэтому, если я вхожу в 3.50, он даст 0. Тогда, если я войду в 7.14, он даст 3.50. Наконец, если я дам 5.10, он даст 10.64 и так далее. – PokeBros

+0

@PokeBros Определенно лучше сохранить newamount число с плавающей запятой, так как вы делаете арифметику, которую вы не можете сделать со строкой. Вы подтвердили, что содержимое файла является правильным в первую очередь? Новая строка может вызвать проблемы, поэтому на всякий случай я добавил 'strip()'. Также я предлагаю не писать файл, пока вы не рассчитали общее количество. – synchronizer

+0

Еще одно замечание - после написания курсор в конце файла. Следовательно, вы должны запустить file.seek (0) для цикла for, который будет выполняться с самого начала файла. Я отредактировал ответ для вас. Надеюсь, что помогает – thangtn

0
def piggybank(): 
    newamount = 0.0 # newamount is a floating point number 
    file = open('piggybank.txt','r+') 
    addedmoney = input('How much money are you adding?') 
    file.write(addedmoney + '\n') 
    for line in file: # line is a string 
     newamount += line # you are trying to add a floating point number to a string, so the error (I assume) happens here. 
    print("You now have:\n", newamount) 

В заключение отметим, что операнды не совпадают. Сначала вы должны преобразовать строку в число с плавающей точкой, например, так:

newamount += float(line.strip()) # strip removes trailing whitespace 

На другой ноте, зачем писать addedmoney в файл, если вам нужно хранить только в общей сложности? Вы можете попробовать сначала вычислить newamount, а затем продолжить запись этого результата.