2016-08-24 119 views
0

我是新來的編程和無法弄清楚如何解決這個錯誤: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://stackoverflow.com/questions/ 15235703/typeerror-unsupported-operand-types-for-str-and-str) – Knells

回答

1

這意味着「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

0

正是因爲amountReceivedamountDue數據類型爲字符串。在執行操作-之前,您必須將其轉換爲float

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

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

這不起作用。如果用戶輸入一個十進制值,int(...)將會出錯。 – smead

+0

您尚未提供樣本輸入。我在代碼中使用了'int'。我無法預測你傳遞了什麼樣的價值,以及你需要什麼類型的輸出:) –

+0

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

相關問題