Python 不支持的Opperand类型错误

Python 不支持的Opperand类型错误,python,file,error-handling,Python,File,Error Handling,(编辑) 我正试图通过把以前的钱存到一个文件中来存钱,这样你就可以知道你以前有多少钱了。但是,这给了我一个错误(见标题)。请不要将此标记为重复项,因为我已经检查了其他项,它们不适用于我的问题。这是我的密码: def piggybank(): newamount = 0.0 file = open('piggybank.txt','r+') addedmoney = input('How much money are you adding?') file.

(编辑) 我正试图通过把以前的钱存到一个文件中来存钱,这样你就可以知道你以前有多少钱了。但是,这给了我一个错误(见标题)。请不要将此标记为重复项,因为我已经检查了其他项,它们不适用于我的问题。这是我的密码:

 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和Stack Overflow方面有点不修边幅,因为我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()

如果你看一下我的原始代码,我给money添加了一个换行符,我在这里也这么做了。但是,它会像添加字符串一样添加货币字符串,因此如果您输入两次5.00,则会显示“5.005.00”。如果你想打印数字而不是字符串,有人知道如何添加新行吗?

这是因为你的行是字符串,新行是数字。这就是为什么你会出错。在进行数学计算之前,必须先将字符串转换为数字

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)

这是因为您的行是string,newamount是number。这就是为什么你会出错。在进行数学计算之前,必须先将字符串转换为数字

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)
总之,操作数不匹配。首先,必须将字符串转换为浮点数,如下所示:

newamount += float(line.strip()) # strip removes trailing whitespace
另一方面,如果只需要存储总数,为什么要将
addedmoney
写入文件?您可以先尝试计算newamount,然后继续写入该结果

总之,操作数不匹配。首先,必须将字符串转换为浮点数,如下所示:

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

另一方面,如果只需要存储总数,为什么要将
addedmoney
写入文件?您可以先尝试计算newamount,然后继续写入结果。

错误是否指定了错误发生的位置?(行号)。错误是否指定了错误发生的位置?(行号)。这不起作用,但我将0改为字符串,它起作用了,因为行显然是字符串。但是现在有一个新的错误,它没有添加当前的错误,而是添加上一个错误,所以如果我输入3.50,它将给出0。那么如果我输入7.14,它将给出3.50。最后,如果我给5.10,它会给10.64,依此类推。@PokeBros绝对最好保持newamount为一个浮点数,因为你在做算术,这是用字符串做不到的。你首先确认文件的内容是正确的吗?换行可能会导致问题,这就是为什么我添加了
strip()
。此外,我建议在计算总数之前不要写入文件。另一个注意事项是,写入文件后,光标将位于文件末尾。因此,您应该运行file.seek(0),以便for循环从文件的开头开始运行。我为你编辑了答案。如果你想扩展这个文件,我建议用“a+”而不是“r+”。我刚刚更改了我的程序,它可以正常工作。但是,我不知道如何开始一个新行来写更多的数字,所以我不得不使用字符串。然后它将数字相加,就像它们是字符串一样。例如,如果您两次输入5.00,它将给出“5.005.00”。有人知道怎么开新的生产线吗?我在代码中使用的方法只有在使用字符串表示货币值时才有效。这是我的代码:这不起作用,但我将0改为字符串,它起作用了,因为行显然是字符串。但是现在有一个新的错误,它没有添加当前的错误,而是添加上一个错误,所以如果我输入3.50,它将给出0。那么如果我输入7.14,它将给出3.50。最后,如果我给5.10,它会给10.64,依此类推。@PokeBros绝对最好保持newamount为一个浮点数,因为你在做算术,这是用字符串做不到的。你首先确认文件的内容是正确的吗?换行可能会导致问题,这就是为什么我添加了
strip()
。此外,我建议在计算总数之前不要写入文件。另一个注意事项是,写入文件后,光标将位于文件末尾。因此,您应该运行file.seek(0),以便for循环从文件的开头开始运行。我为你编辑了答案。如果你想扩展这个文件,我建议用“a+”而不是“r+”。我刚刚更改了我的程序,它可以正常工作。但是,我不知道如何开始一个新行来写更多的数字,所以我不得不使用字符串。然后它将数字相加,就像它们是字符串一样。例如,如果您两次输入5.00,它将给出“5.005.00”。有人知道怎么开新的生产线吗?我在代码中使用的方法只有在使用字符串表示货币值时才有效。这是我的密码: