TypeError:不支持的操作数类型为 - :'str'和'str'?

问题描述:

我是新来的编程和无法弄清楚如何解决这个错误:TypeError:不支持的操作数类型为 - :'str'和'str'?

Traceback (most recent call last): 
    File "/Users/aubreyoleary/Documents/Cashier.py", line 31, in <module> 
    changePennies = int((amountReceived - amountDue) * 100) 
TypeError: unsupported operand type(s) for -: 'str' and 'str' 

我的代码:

import math 

class Cashier: 

    def getDollars(self, x): 
     return x/100 

    def getQuarters(self, x): 
     y = x % 100 
     return y/25 

    def getDimes(self, x): 
     y = x % 100 
     return y % 10 

    def getNickels(self, x): 
     y = x % 100 
     return y % 5 

    def getPennies(self, x): 
     y = x * 1 
     return y 

while True: 

    thecashier = Cashier() 

    amountDue = input("Please enter amount due: ") 
    amountReceived = input("Please enter amount received: ") 

    changePennies = int((amountReceived - amountDue) * 100) 

    print(thecashier.getPennies(changePennies)) 
    print(thecashier.getDollars(changePennies)) 
    print(thecashier.getQuarters(changePennies)) 
    print(thecashier.getDimes(changePennies)) 
    print(thecashier.getNickels(changePennies)) 

    choice = input("Do you want to continue <yes> <no>? ") 
    if (choice == "no"): 
     print("Have a nice day. ") 
     break 
+1

[类型错误:不支持的操作数类型(个),/: 'STR' 和 'STR']的可能的复制(http://*.com/questions/ 15235703/typeerror-unsupported-operand-types-for-str-and-str) – Knells

这意味着“6” - “4”是行不通的因为它们都是字符串。首先,您需要将字符串值转换为数字:

changePennies = int(round((float(amountReceived) - float(amountDue)) * 100, 0)) 
+1

其实你需要使用'int(round(...))'。浮点小数不会完全保存为int,如果在转换为int之前未进行舍入处理,则会出现浮点错误,例如,在32位机器上,如果键入'print int( float('1.13')* 100)',我得到了'112'的输出。如果我输入'print int(round(float('1.13')* 100))',我会得到'113'。 – smead

正是因为amountReceivedamountDue数据类型为字符串。在执行操作-之前,您必须将其转换为float

代替int((amountReceived - amountDue) * 100),使用:

changePennies = int(float(amountReceived) - float(amountDue)) * 100 
+0

这不起作用。如果用户输入一个十进制值,int(...)将会出错。 – smead

+0

您尚未提供样本输入。我在代码中使用了'int'。我无法预测你传递了什么样的价值,以及你需要什么类型的输出:) –

+0

相应地更新了答案。希望能工作。 –