2017-02-07 117 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,然后继续编写该结果。

相关问题