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
这意味着“6” - “4”是行不通的因为它们都是字符串。首先,您需要将字符串值转换为数字:
changePennies = int(round((float(amountReceived) - float(amountDue)) * 100, 0))
其实你需要使用'int(round(...))'。浮点小数不会完全保存为int,如果在转换为int之前未进行舍入处理,则会出现浮点错误,例如,在32位机器上,如果键入'print int( float('1.13')* 100)',我得到了'112'的输出。如果我输入'print int(round(float('1.13')* 100))',我会得到'113'。 – smead
正是因为amountReceived
和amountDue
数据类型为字符串。在执行操作-
之前,您必须将其转换为float
。
代替int((amountReceived - amountDue) * 100)
,使用:
changePennies = int(float(amountReceived) - float(amountDue)) * 100
这不起作用。如果用户输入一个十进制值,int(...)将会出错。 – smead
您尚未提供样本输入。我在代码中使用了'int'。我无法预测你传递了什么样的价值,以及你需要什么类型的输出:) –
相应地更新了答案。希望能工作。 –
[类型错误:不支持的操作数类型(个),/: 'STR' 和 'STR']的可能的复制(http://*.com/questions/ 15235703/typeerror-unsupported-operand-types-for-str-and-str) – Knells