Can someone please help fix this program? I'm pretty new in Python. Every time I run this program it says :

Traceback (most recent call last):
File "E:/Python/delin.py", line 38, in <module>
discounted_total = regular_total - full_discount
TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'

def find_discount(total):
if total <120:
discount = 0
else:
if total <300:
discount = 0.03*total
else:
if total <500:
discount = 0.05*total
else:
discount = 0.07*total
return discount


#---------------------------------------------------------------------------

#main program

beef = 8.49
pork = 6.12
chicken = 5.21

quantity_beef= input("How many pounds of beef were bought?")

quantity_pork = input("How many pounds of pork were bought")

quantity_chicken = input("How many pounds of chicken were bought?")

total_beef = beef * quantity_beef
total_pork = pork * quantity_pork
total_chicken = chicken * quantity_chicken

regular_total = total_beef + total_pork + total_chicken

full_discount = find_discount(regular_total)

discounted_total = regular_total - full_discount

print "The total is " + discounted_total

This is Python 2.7 btw.

Edit: also, the function on the top [find_discount(total)] has the normal indentations needed. But when posting this, the lines didn't indent

Recommended Answers

All 4 Replies

def find_discount(total):
    if total <120:
        discount = 0
    else:
        if total <300:
            discount = 0.03*total
        else:
            if total <500:
                discount = 0.05*total
            else:
                discount = 0.07*total
                return discount

            
#---------------------------------------------------------------------------

#main program

beef = 8.49
pork = 6.12
chicken = 5.21

quantity_beef= input("How many pounds of beef were bought?")

quantity_pork = input("How many pounds of pork were bought")

quantity_chicken = input("How many pounds of chicken were bought?")

total_beef = beef * quantity_beef
total_pork = pork * quantity_pork
total_chicken = chicken * quantity_chicken

regular_total = total_beef + total_pork + total_chicken

full_discount = find_discount(regular_total)

discounted_total = regular_total - full_discount

print "The total is " + discounted_total

That means no value was returned. Look at your find_discount() function. You've set what discount should be on all occasions, but you only return on one occasion! You need to move it back so it returns after all the if and else statements.

Here's how it should be.

def find_discount(total):
    if total <120:     #Check for this
        discount = 0   #It's True! Skip the else: statement.

    else:              #Above is not true, execute this block of code
        if total <300: #You get the picture..
            discount = 0.03*total
        else:
            if total <500:
                discount = 0.05*total
            else:
                discount = 0.07*total

    #All checks are done, so return
    return discount

Also, line 39 needs to be: print "The total is " + str(discounted_total) This makes it a string. You must do this because your discounted total is a float, and you can't add letters and numbers.

or you can do this

print ("The total is %f"%( discounted_total))

I prefer this ....

That means no value was returned. Look at your find_discount() function. You've set what discount should be on all occasions, but you only return on one occasion! You need to move it back so it returns after all the if and else statements.

Here's how it should be.

def find_discount(total):
    if total <120:     #Check for this
        discount = 0   #It's True! Skip the else: statement.

    else:              #Above is not true, execute this block of code
        if total <300: #You get the picture..
            discount = 0.03*total
        else:
            if total <500:
                discount = 0.05*total
            else:
                discount = 0.07*total

    #All checks are done, so return
    return discount

Also, line 39 needs to be: print "The total is " + str(discounted_total) This makes it a string. You must do this because your discounted total is a float, and you can't add letters and numbers.

ohh yay, i get it now. thanks :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.