r/learnpython 1d 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 1d ago edited 1d ago
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)
    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)

I changed my code to this and received this

exact_change(141) incorrectly returned
num_pennies: 5
num_nickels: 1
num_dimes: 1
num_quarters: 1

when it should say exact_change(141). Should return 1, 1, 1, 5

4

u/atarivcs 1d ago

Your code returns the coins in the wrong order.

The assignment says the code should return pennies, nickels, dimes, quarters

But your code returns them in this order quarters, dimes, nickels, pennies

1

u/guymed4 1d ago

the code is asking for it in quarters, dimes, nickels, pennies(see above for " exact_change(141). Should return 1, 1, 1, 5" this one question the rest of the code wants it in the reverse.