Why am I receiving a type error for Python?
"Write a program with total change amount as an integer input that outputs the change using the fewest coins, one coin type per line. The coin types are dollars, quarters, dimes, nickels, and pennies. Use singular and plural coin names as appropriate, like 1 penny vs. 2 pennies. Your program must define and call the following function. The function exact_change() should return num_dollars, num_quarters, num_dimes, num_nickels, and num_pennies."
The line "num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)" is what's giving me trouble but its a required line in the assignment.
The error says: File "main.py", line 36, in 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')
The error says:
File "main.py", line 36, in num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val) TypeError: 'NoneType' object is not iterable
Solution 1:
I'm currently doing Zybooks for Python coding as well. This is how the code should look in order to pass all the programs' tests.
#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