簡體   English   中英

為什么我收到 Python 的類型錯誤?

[英]Why am I receiving a type error for Python?

“編寫一個總找零金額為 integer 輸入的程序,使用最少的硬幣輸出找零,每行一種硬幣類型。硬幣類型是美元、四分之一、一角硬幣、鎳和便士。適當使用單數和復數硬幣名稱,例如 1 便士與 2 便士。您的程序必須定義並調用以下 function。function exact_change() 應返回 num_dollars、num_quarters、num_dimes、num_nickels 和 num_pennies。

“num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)” 這行給我帶來了麻煩,但它是作業中的必填行。

錯誤顯示:文件“main.py”,第 36 行,單位為 num_dollars、num_quarters、num_dimes、num_nickels、num_pennies = exact_change(input_val) TypeError: 'NoneType' object is not iterable

if __name__ == '__main__': 
    input_val = int(input())

num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)

    num_dollars = input_val // 100
    input_val %= 100
    num_quarters = input_val // 25
    input_val %= 25
    num_dimes = input_val // 10 
    input_val %= 10
    num_nickels = input_val // 5
    input_val %= 5
    num_pennies = input_val

    if num_dollars >1:
        print('%d dollars' % num_dollars)
    elif num_dollars ==1:
        print('%d dollar' % num_dollars)
    if num_quarters > 1:
        print('%d quarters' % num_quarters)
    elif num_quarters ==1:
        print('%d quarter' % num_quarters)
    if num_dimes >1:
        print('%d dimes' % num_dimes)
    elif num_dimes ==1:
        print('%d dime' % num_dimes)
    if num_nickels >1:
        print('%d nickels' % num_nickels)
    elif num_nickels ==1:
        print('%d nickel' % num_nickels)
    if num_pennies >1:
        print('%d pennies' % num_pennies)
    elif num_pennies ==1:
        print('%d penny' % num_pennies)
if input_val <= 0:
    print('no change')

錯誤說:

文件“main.py”,第 36 行,單位為 num_dollars、num_quarters、num_dimes、num_nickels、num_pennies = exact_change(input_val) TypeError: 'NoneType' object is not iterable

我目前也在為 Python 編碼做 Zybooks。 為了通過所有程序的測試,這就是代碼的外觀。

#define exact change function
def exact_change(user_total):
    num_dollars = user_total // 100 #convert to dollars
    user_total %= 100 #get remainder after conversion
    num_quarters = user_total // 25 #convert to quarters
    user_total %= 25 #get remainder after conversion
    num_dimes = user_total // 10 #convert to dimes
    user_total %= 10 #get remainder after conversion
    num_nickels = user_total // 5 #convert to nickels
    user_total %= 5 #get remainder after conversion
    num_pennies = user_total
    return(num_dollars, num_quarters, num_dimes, num_nickels, num_pennies)
if __name__ == '__main__':
    input_val = int(input()) #prompt user to input an integer
    num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val) #recall exact_change function
    
    #define output statements to output number of exact_change variables: 
    #num_dollars, num_quarters, num_dimes, num_nickels, num_pennies  
    if input_val <=0: #if amount is zero
        print('no change') #print output
        
    else:
        if num_dollars > 1: #if number of dollars is greater than one
            print('%d dollars' % num_dollars) #print number of dollars
        elif num_dollars == 1: # if number of dollars equal 1
            print('%d dollar' % num_dollars) #print dollar in singular
        
        if num_quarters > 1: #if number of quarters is greater than one
            print('%d quarters' % num_quarters) #print number of quarters
        elif num_quarters ==1: # if number of quarters equal 1
            print('%d quarter' % num_quarters) #print quarter in singular
        
        if num_dimes > 1: #if number of dimes is greater than one
            print('%d dimes' % num_dimes) #print number of dimes
        elif num_dimes == 1: # if number of dimes equal 1
            print('%d dime' % num_dimes) #print dime in singular
            
        if num_nickels > 1: #if number of nickels is greater than one
            print('%d nickels' % num_nickels) #print number of nickels
        elif num_nickels == 1: # if number of nickels equal 1
            print('%d nickel' % num_nickels) #print nickel in singular
        
        if num_pennies >1: #if number pennies is greater than one
            print('%d pennies' % num_pennies) #print number of pennies
        elif num_pennies ==1: # if number of pennies equal 1
            print('%d penny' % num_pennies) #print penny in singular

它應該看起來像這樣

def main(): 
  input_val = int(input('Enter change: '))
  if input_val <= 0:
    print('Some error message')
  else:
    #the rest of the code you provided 
    num_dollars = input_val // 100
    input_val %= 100
    num_quarters = input_val // 25
    input_val %= 25
    num_dimes = input_val // 10 
    input_val %= 10
    num_nickels = input_val // 5
    input_val %= 5
    num_pennies = input_val

    if num_dollars >1:
        print('%d dollars' % num_dollars)
    elif num_dollars ==1:
        print('%d dollar' % num_dollars)
    if num_quarters > 1:
        print('%d quarters' % num_quarters)
    elif num_quarters ==1:
        print('%d quarter' % num_quarters)
    if num_dimes >1:
        print('%d dimes' % num_dimes)
    elif num_dimes ==1:
        print('%d dime' % num_dimes)
    if num_nickels >1:
        print('%d nickels' % num_nickels)
    elif num_nickels ==1:
        print('%d nickel' % num_nickels)
    if num_pennies >1:
        print('%d pennies' % num_pennies)
    elif num_pennies ==1:
        print('%d penny' % num_pennies)
main()
user_input = int(input())
if user_input > 0:    
    dollar = user_input // 100
    user_input %= 100
    quarter = user_input // 25
    user_input %=25
    dime = user_input //10
    user_input %= 10
    nickel = user_input // 5
    user_input %= 5
    penny = user_input
    
    if dollar == 1:
        print(dollar, "Dollar")
    elif dollar > 1: 
        print(dollar, "Dollars")
    if quarter == 1:
        print(quarter, "Quarter")
    elif quarter > 1: 
        print(quarter, "Quarters")
    if dime == 1:
        print(dime, "Dime")
    elif dime > 1: 
        print(dime, "Dimes")    
    if nickel == 1:
        print(nickel, "Nickel")
    elif nickel > 1: 
        print(nickel, "Nickels")    
    if penny == 1:
        print(penny, "Penny")
    elif penny > 1: 
        print(penny, "Pennies")
else:
    print("No change")

#我用這個把頭發拉了一段時間。 上面的評論是正確的,但下面的評論更好一些,因為如果輸入負數,它會停止腳本。

import sys

amount_input = int(input())

dollars = amount_input // 100
quarters = amount_input % 100 // 25
dimes = amount_input % 100 % 25 // 10
nickels = amount_input % 100 % 25 % 10 // 5
pennies = amount_input % 100 % 25 % 10 % 5 // 1

if amount_input <= 0:
    print("No change")
    sys.exit()

if dollars > 1:
    print(str(dollars) + " Dollars")
elif dollars == 1:
    print(str(dollars) + " Dollar")
else:
    pass
if quarters > 1:
    print(str(quarters) + " Quarters")
elif quarters == 1:
    print(str(quarters) + " Quarter")
else:
    pass
if dimes > 1:
    print(str(dimes) + " Dimes")
elif dimes == 1:
    print(str(dimes) + " Dime")
else:
    pass
if nickels > 1:
    print(str(nickels) + " Nickels")
elif nickels == 1:
    print(str(nickels) + " Nickel")
else:
    pass
if pennies > 1:
    print(str(pennies) + " Pennies")
elif pennies == 1:
    print(str(pennies) + " Penny")

作為一個初級程序員,就我的 class 已經進入 zybooks 而言,我認為這是它通過測試的最佳途徑

total_change=int(input())

num_dollars=total_change//100
num_quarters=(total_change-num_dollars*100)//25
num_dimes=(total_change-num_dollars*100-num_quarters*25)//10
num_nickels=(total_change-num_dollars*100-num_quarters*25-num_dimes*10)//5
num_pennys=(total_change-num_dollars*100-num_quarters*25-num_dimes*10-num_nickels*5)//1

#no change 
if total_change<=0:
   print('No change')
#dollars
if 0<num_dollars<=1:
   print(num_dollars,'Dollar')
if num_dollars>1:
   print(num_dollars,'Dollars')
#quarters  
if 0<num_quarters<=1:
   print(num_quarters,'Quarter')
if num_quarters>1:
   print(num_quarters,'Quarters')
#dimes   
if 0<num_dimes<=1:
   print(num_dimes,'Dime')
if num_dimes>1:
   print(num_dimes,'Dimes')
#nickels   
if 0<num_nickels<=1:
   print(num_nickels,'Nickel')
if num_nickels>1:
   print(num_nickels,'Nickels')
#pennys
if 0<num_pennys<=1:
   print(num_pennys,'Penny')
if num_pennys>1:
   print(num_pennys,'Pennys')
       
    

這是我使用 while 循環的解決方案。 . .

def exact_change(user_total):
        dollar,quarter,dime,nickel,penny = 100,25,10,5,1
        dollar_out, quarter_out, dime_out,nickel_out, penny_out = 0,0,0,0,0

while user_total > 0:
    if user_total >= dollar:
        dollar_out = dollar_out + 1
        user_total = user_total - dollar

    elif user_total >= quarter:
        quarter_out = quarter_out + 1
        user_total = user_total - quarter

    elif user_total >= dime:
        dime_out = dime_out + 1
        user_total = user_total - dime

    elif user_total >= nickel:
        nickel_out = nickel_out + 1
        user_total = user_total - nickel

    else:
        penny_out = user_total
        user_total = 0

return {"dollars" if (dollar_out > 1) else "dollar": dollar_out,
       "quarters" if (quarter_out > 1) else "quarter": quarter_out,
       "dimes" if (dime_out > 1) else "dime": dime_out,
       "nickels" if (nickel_out > 1) else "nickel": nickel_out,
       "pennies" if (penny_out > 1) else "penny": penny_out,}


if __name__=="__main__":
    input_val = int(input())

if input_val == 0:
    print("no change")

else:
    res = exact_change(input_val)
    for key, value in res.items():
        if value > 0:
            print(value, key)

這個問題我花了很長時間才解決。 在這里查看其他人的代碼后,我的看起來最短。 我希望我能夠幫助那里的人。

def exact_change(user_total):
    num_dollars = int(user_total // 100)
    num_quarters = int((user_total - (num_dollars * 100)) // 25)
    num_dimes = int(((user_total - (num_dollars * 100)) - (num_quarters * 25)) // 10) 
    num_nickels = int(((user_total - (num_dollars * 100)) - (num_quarters * 25) - (num_dimes * 10)) // 5) 
    num_pennies = int(((user_total - (num_dollars * 100)) - (num_quarters * 25) - (num_dimes * 10) -(num_nickels * 5))) 
    return num_dollars, num_quarters, num_dimes, num_nickels, num_pennies
    
if __name__ == '__main__': 
    input_val = int(input())    
    num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)
    
     # Type your code here.
    total = {'dollars':num_dollars, 'quarters': num_quarters, 'dimes': num_dimes, 'nickels': num_nickels, 'pennies': num_pennies}
    change = total
    
    if input_val == 0:
        print('no change')

    for x in change:
        if change[x] == 0:
            pass
        if change[x] == 1:
            print('{} {}'.format(change[x], x.replace('s','').replace('pennie', 'penny')))
        if change[x] > 1:
            print('{} {}'.format(change[x], x))

我所做的是:

change = int(input()) 
Dollar = [100, "dollar", "dollars"] 
Quarter = [25, "quarter", "quarters"] 
Dime = [10, "dime", "dimes"] 
Nickel = [5, "nickel", "nickels"] 
Penny = [1, "penny", "pennies"] 

if change == 0:
    print("no change")
else:
    def change_count(user_total,currency_type):
        num_num = int(user_total/currency_type[0])
        if num_num == 1:
            print(num_num, currency_type[1])
        elif num_num > 1:
            print(num_num, currency_type[2])
        global change
        change = change - (num_num * currency_type[0])
        return change
    
    
    change_count(change, Dollar)
    change_count(change, Quarter)
    change_count(change, Dime)
    change_count(change, Nickel)
    change_count(change, Penny)

您正在嘗試解壓縮 function,但 function 不存在(根據您在此處粘貼的內容)。 這是沒有功能的代碼。 如果你想用函數編寫這個實驗室,你可以通過 arguments 並在 function 中提供一個參數來完成這個

input_val = int(input())

if input_val <= 0:
    print('No change')
    
num_dollars = input_val // 100
input_val %= 100

num_quarters = input_val // 25
input_val %= 25

num_dimes = input_val // 10 
input_val %= 10

num_nickels = input_val // 5
input_val %= 5

num_pennies = input_val

if num_dollars >1:
    print('%d Dollars' % num_dollars)
elif num_dollars ==1:
    print('%d Dollar' % num_dollars)
    
if num_quarters > 1:
    print('%d Quarters' % num_quarters)
elif num_quarters ==1:
    print('%d Quarter' % num_quarters)
    
if num_dimes >1:
    print('%d Dimes' % num_dimes)
elif num_dimes ==1:
    print('%d Dime' % num_dimes)
    
if num_nickels >1:
    print('%d Nickels' % num_nickels)
elif num_nickels ==1:
    print('%d Nickel' % num_nickels)
    
if num_pennies >1:
    print('%d Pennies' % num_pennies)
elif num_pennies ==1:
    print('%d Penny' % num_pennies)

雖然代碼有點長,但我建議使用適當的空格。 它看起來更干凈,您可能會更容易發現代碼中的錯誤。 祝你好運!

這是 WITH 函數的代碼。 通常,如果可能,您希望減少 main 中的代碼量。 函數通常會導致更多的代碼行,但從長遠來看,代碼將更具適應性和可讀性:)

def exact_change(user_total):
    if user_total <= 0:  
        print('no change')
        
    num_dollars = user_total // 100 
    user_total -= (num_dollars * 100)
    if num_dollars == 1:  
        print(num_dollars , 'dollar')
    elif num_dollars > 1:
        print(num_dollars , 'dollars')
        
    num_quarters = user_total // 25
    user_total -= (num_quarters * 25) 
    if num_quarters == 1:
        print(num_quarters , 'quarter')
    elif num_quarters > 1:
        print(num_quarters , 'quarters')
        
    num_dimes = user_total // 10
    user_total = user_total - (num_dimes * 10)
    if num_dimes == 1:
        print(num_dimes , 'dime')
    elif num_dimes > 1:
        print(num_dimes , 'dimes')
        
    num_nickels = user_total // 5
    user_total = user_total - (num_nickels * 5)
    if num_nickels == 1:
        print(num_nickels , 'nickel')
    elif num_nickels > 1:
        print(num_nickels , 'nickels')
        
    num_pennies = user_total // 1
    if num_pennies == 1:
        print(num_pennies , 'penny')
    elif num_pennies > 1:
        print(num_pennies , 'pennies')
    
    return (num_dollars , num_quarters , num_dimes , num_nickels , num_pennies)
            
if __name__ == '__main__':   
    dollars, quarters, dimes, nickels, pennies = exact_change(int(input()))
input_change = int(input())

if input_change == 0:
    print('No change')

dollars = input_change // 100
input_change -= dollars * 100
if dollars: print(dollars, 'Dollars' if dollars > 1 else 'Dollar')

quarters = input_change // 25
input_change -= quarters * 25
if quarters: print(quarters, 'Quarters' if quarters > 1 else 'Quarter')

dimes = input_change // 10
input_change -= dimes * 10
if dimes: print(dimes, 'Dimes' if dimes > 1 else 'Dime')

nickels = input_change // 5
input_change -= nickels * 5
if nickels: print(nickels, 'Nickels' if nickels > 1 else 'Nickel')

pennies = input_change
if pennies: print(pennies, 'Pennies' if pennies > 1 else 'Penny')
def exact_change(user_total):
    num_dollars = user_total // 100
    user_total %= 100
    num_quarters = user_total // 25
    user_total %= 25
    num_dimes = user_total // 10
    user_total %= 10
    num_nickels = user_total // 5
    user_total %= 5
    num_pennies = user_total
    return(num_dollars, num_quarters, num_dimes, num_nickels, num_pennies)
if __name__ == '__main__':
    input_val = int(input())
    num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = 
exact_change(input_val) #recall exact_change function
 
    if input_val <=0:
        print('No change')
    
    else:
        if num_dollars > 1:
            print('%d Dollars' % num_dollars)
        elif num_dollars == 1:
            print('%d Dollar' % num_dollars)
    
        if num_quarters > 1:
            print('%d Quarters' % num_quarters)
        elif num_quarters ==1: 
            print('%d Quarter' % num_quarters)
    
        if num_dimes > 1:
            print('%d Dimes' % num_dimes)
        elif num_dimes == 1:
            print('%d Dime' % num_dimes)
        
        if num_nickels > 1:
            print('%d Nickels' % num_nickels)
        elif num_nickels == 1:
            print('%d Nickel' % num_nickels)
    
        if num_pennies >1:
            print('%d Pennies' % num_pennies)
        elif num_pennies ==1:
            print('%d Penny' % num_pennies)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM