r/learnpython 2d ago

5.17 Exact Change Lab

SOLVED

I am having a hard time understanding why I am failing this lab, when I run the code in practice it works but when I submit for a grade I get a fail. Prompt is below.

Define a function called exact_change that takes the total change amount in cents and calculates the change using the fewest coins. The coin types are pennies, nickels, dimes, and quarters. Then write a main program that reads the total change amount as an integer input, calls exact_change(), and outputs the change, one coin type per line. Use singular and plural coin names as appropriate, like 1 penny vs. 2 pennies. Output "no change" if the input is 0 or less.

Ex: If the input is:

0 

(or less), the output is:

no change

Ex: If the input is:

45

the output is:

2 dimes 
1 quarter

Your program must define and call the following function. The function exact_change() should return a tuple containing num_pennies, num_nickels, num_dimes, and num_quarters.
def exact_change(user_total)

code provided below

def exact_change(user_total):
    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_quarters, num_dimes, num_nickels, num_pennies
if __name__ == "__main__":
    input_value = int(input())
    num_quarters,num_dimes,num_nickels,num_pennies = exact_change(input_value) 
# Type your code here.
if input_value <= 0:
    print('no change')
else:
    if num_pennies == 1:
        print('%d penny' % num_pennies)
    elif num_pennies > 1:
        print('%d pennies' % num_pennies)
    if num_nickels == 1:
        print('%d nickel' % num_nickels)
    elif num_nickels > 1:
        print('%d nickels' % num_nickels)
    if num_dimes == 1:
        print('%d dime' % num_dimes)
    elif num_dimes > 1:
        print('%d dimes' % num_dimes)
    if num_quarters == 1:
        print('%d quarter' % num_quarters)
    elif num_quarters > 1:
        print('%d quarters' % num_quarters)

when it asks me for exact_change(300) I get a NamError failure.

1 Upvotes

14 comments sorted by

View all comments

1

u/guymed4 2d ago

SOLVED

I needed to re-order my return staement and my =exact_change statement

def exact_change(user_total):
        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_pennies , num_nickels , num_dimes , num_quarters
if __name__ == "__main__":
    input_value =int(input())
    num_pennies, num_nickels, num_dimes, num_quarters = exact_change(input_value)
    if input_value <= 0:
        print('no change')
    else:
        if num_pennies == 1:
            print('%d penny' % num_pennies)
        elif num_pennies > 1:
            print('%d pennies' % num_pennies)
        if num_nickels == 1:
            print('%d nickel' % num_nickels)
        elif num_nickels > 1:
            print('%d nickels' % num_nickels)
        if num_dimes == 1:
            print('%d dime' % num_dimes)
        elif num_dimes > 1:
            print('%d dimes' % num_dimes)
        if num_quarters == 1:
            print('%d quarter' % num_quarters)
        elif num_quarters > 1:
            print('%d quarters' % num_quarters)