2017-02-07 116 views
1

(編輯) 我試圖通過將以前的金額保存到一個文件來製作一個儲蓄所以您可以訪問您以前有多少錢。但是,它給了我一個錯誤(見標題)。請不要將此標記爲重複的,因爲我已經檢查了其他人,並且他們沒有對我的問題進行處理。這裏是我的代碼:不支持的高級類型錯誤

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.00兩次,它會給出「5.005.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更改爲一個字符串,因爲line顯然是一個字符串。但是現在出現了一個新的錯誤,它沒有添加當前的錯誤,而是之前的錯誤,所以如果我輸入3.50,它會給出0.然後,如果我輸入7.14,它會給出3.50。最後,如果我給5.10,它會給10.64等等。 – PokeBros

+0

@PokeBros由於你在做算術運算,所以你不能用一個字符串來做一個浮點數。您是否確認文件的內容是正確的?換行符可能會導致問題,這就是爲什麼我加了'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,然後繼續編寫該結果。

相關問題