2017-02-07 5 views
1

(BEARBEITET) Ich versuche, ein Sparschwein zu machen, indem ich die vorherigen Geldbeträge in eine Datei speichere, damit Sie auf Ihr bisheriges Geld zugreifen können. Aber es gibt mir einen Fehler (siehe Titel). Bitte markieren Sie dies nicht als Duplikat, da ich die anderen bereits überprüft habe und sie meinen Problemen nicht gerecht werden. Hier ist mein Code:Nicht unterstützter Fehler Typ

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) 

Grundsätzlich ich sage, dass der neue Betrag ist 0. Dann öffne ich meine Datei im Lese- und Schreibmodus und fragen, wie viel der Benutzer hinzufügen möchte. Dann füge ich es zu einer neuen Zeile in meiner Datei hinzu und addiere alles in der Datei. Zuletzt drucke ich die Summe. Dies funktioniert jedoch nicht, weil ich den Fehler immer wieder bekomme. Bitte Hilfe!

(Ich bin irgendwie ein noob in Python und Stack-Überlauf, weil ich bin 13 und das Lernen begonnen.)

Hier ist mein neuer Code:

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() 

Wenn Sie an meinem ursprünglichen Code aussehen , Habe ich dem Geld eine neue Zeile hinzugefügt und das habe ich auch hier gemacht. Es fügt jedoch die Geldstrings hinzu, als ob sie Strings wären, so dass es "5,005,00" ergibt, wenn Sie 5,00 zweimal eingeben. Kann jemand eine neue Zeile hinzufügen, wenn Sie Zahlen und nicht Zeichenfolgen drucken möchten?

+0

Gibt der Fehler an, wo der Fehler auftritt? (Zeilennummer). – synchronizer

Antwort

2

Es ist, weil Ihre Zeile Zeichenfolge ist und neue Zahl ist Nummer. Deshalb erhalten Sie den Fehler. Sie müssen die Zeichenfolge zuerst in die Zahl konvertieren, bevor Sie mit der mathematischen Berechnung fortfahren.

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

Das hat nicht funktioniert, aber ich änderte die 0 in eine Zeichenfolge und es funktionierte, weil Zeile ist eine Zeichenfolge scheinbar. Aber jetzt gibt es einen neuen Fehler, wo es nicht die aktuelle, sondern die vorherige hinzufügt. Wenn ich also 3,50 eintrage, wird es 0 ergeben. Wenn ich dann 7,14 eintrage, ergibt das 3,50. Schließlich, wenn ich 5.10 gebe, wird es 10.64 und so weiter geben. – PokeBros

+0

@PokeBros Es ist definitiv am besten, Newmount eine Fließkommazahl zu behalten, da Sie arithmetisch arbeiten, was mit einer Zeichenkette nicht möglich ist. Haben Sie bestätigt, dass der Inhalt der Datei von Anfang an korrekt ist? Die Newline könnte Probleme verursachen, weshalb, falls ich 'strip()' hinzugefügt habe. Ich schlage auch vor, nicht in die Datei zu schreiben, bis Sie die Summe berechnet haben. – synchronizer

+0

Ein weiterer Hinweis ist nach dem Schreiben des Dateicursors am Ende der Datei. Daher sollten Sie file.seek (0) ausführen, damit die for-Schleife vom Anfang der Datei ausgeführt wird. Ich habe die Antwort für dich bearbeitet. Hoffe, dass hilft – 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) 

Abschließend die Operanden nicht übereinstimmen. Zunächst müssen Sie den String in eine Gleitkommazahl konvertieren etwa so:

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

Auf einer anderen Anmerkung, warum addedmoney in die Datei schreiben, wenn Sie nur die Gesamt speichern müssen? Sie können zuerst versuchen, den neuen Betrag zu berechnen und dann das Ergebnis schreiben.

Verwandte Themen