Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why do I keep coming up with an error at the end of my code?

So when inputting my third elif variable in my main function, my other functions don’t work. My question, is what’s stopping it. Lines 123, 124, 125, keep receiving the "UnboundLocalError: totalcost referenced before assignement"

`

def welcome():
    print("Hello and Welcome Super Maids")


def LC (a , b): 
    totalcost = 150 + a + (b * 10)
    print("The total of your service is:\n$",totalcost)
    return totalcost


def DC (a, b):
    totalcost = 300 + a + (b * 10)
    print("The total of your service is:\n$",totalcost)
    return totalcost


def SeniorDiscount(totalcost):
    ans = str(input("Are you by a chance a serior citizen? [y/n]"))
    if ans == 'y':
        age = eval(input("What year were you born? [XXXX]"))
        if age >= 1960:
            print("Perfect! Thank you, sir/ma'am!")
            discount = totalcost * .15
            print("Your discount is:\n$", discount)
            totalcost = totalcost - discount
            print("Great! The total cost of your serivce is:$",totalcost)
            return totalcost
    elif ans == 'n':
       print("Thank you for being honest!")
       print("Great! The total cost of your serivce is:$",totalcost)
       return totalcost
    else:
        print("We'll need an actual answer from you in order to continue")
        SeniorDiscount(totalcost)
        return totalcost

    
def YardService():
    shrubCost = 10
    edgingCost = 20
    sqftCost = 20
    sqrft = eval(input("What is the square footage of your yard?\n"))
    linsqft = eval(input("What is the linear square footage of your yard?\n"))
    shrubs = eval(input("How many shrubs do you have?\n"))
    totalcost = (shrubCost * shrubs)+(edgingCost + linsqft)+(sqftCost * sqrft)
    return totalcost


def YardService1():
    shrubCost = 10
    edgingCost = 20
    sqftCost = 20
    sqrft = eval(input("What is the square footage of your yard?\n"))
    linsqft = eval(input("What is the linear square footage of your yard?\n"))
    shrubs = eval(input("How many shrubs do you have?\n"))
    totalcost = (shrubCost * shrubs)+(edgingCost + linsqft)+(sqftCost * sqrft)
    return totalcost

        
def homeservice():
    welcome()
    NumberOfRooms = eval(input("How many rooms are in need of cleaning?\n"))
    if NumberOfRooms < 3:
        print("Your starting total is: $", 120)
        CostOfRooms = 120
        windows = eval(input("How many windows do you have in need of cleaning?\n"))
        CostOfWindows = 10
        TypeClean = eval(input("What kind of cleaning service are you in search of?\n1-Light Cleaning\n2-Deep Cleaning\n"))
        if TypeClean == 1:
            totalcost = LC(CostOfRooms,windows)
            return totalcost
        elif TypeClean == 2:
            totalcost = DC(CostOfRooms,windows)
            return totalcost
        else:
            print("You must select a service in order to continue")
    elif 2 < NumberOfRooms < 4:
        print("Your starting total is: $", 150)
        CostOfRooms = 150
        windows = eval(input("How many windows do you have in need of cleaning?\n"))
        CostOfWindows = 10
        TypeClean = eval(input("What kind of cleaning service are you in search of?\n1-Light Cleaning\n2-Deep Cleaning\n"))
        if TypeClean == 1:
            totalcost = LC(CostOfRooms,windows)
            return totalcost
        elif TypeClean == 2:
            totalcost = DC(CostOfRooms,windows)
            return totalcost
        else:
            print("You must select a service in order to continue")
    elif 3 < NumberOfRooms < 6:
        print("Your starting total is: $", 175)
        CostOfRooms = 175
        windows = eval(input("How many windows do you have in need of cleaning?\n"))
        CostOfWindows = 10
        TypeClean = eval(input("What kind of cleaning service are you in search of?\n1-Light Cleaning\n2-Deep Cleaning\n"))
        if TypeClean == 1:
            LC(CostOfRooms,windows)
            return totalcost
        elif TypeClean == 2:
            DC(CostOfRooms,windows)
            return totalcost
        else:
            print("You must select a service in order to continue")
    elif NumberOfRooms >= 6:
        print("We do not offer a service of this size")


def main():
    print("We'll start by asking you a set of questions")
    YHB = eval(input("What kind of cleaning service are you in search of?\n1-Home Serivce\n2-Yard Service\n3-Both\n"))
    if YHB == 1:
        totalcost = homeservice()
        SeniorDiscount(totalcost)
    elif YHB == 2:
        totalcost = YardService()
        SeniorDiscount(totalcost)
    elif YHB == 3:
        toatlcost = homeservice() + YardService()
        #print(totalcost)
        #YardService1(totalcost)
        SeniorDiscount(totalcost)
    else:
        print("You must have selected nothing, we'll try again.")
        main()


#--- Execute --------------------------------------------------------
main()

`

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

The process works when trying to do elif on 1 and 2, however it completely shuts down when attempting to work within the last version process.

>Solution :

You have a typo in main():

elif YHB == 3:
        toatlcost = homeservice() + YardService()

You’ve misspelled "totalcost".

That’s A bug at any rate. You also have some other issues that’ll crop up under different cases – it’s possible to call a number of your functions and return None for totalcost – which will trip you up when you later try to add that return to something. I suggest you ensure a return of something numeric – zero for want of anything better.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading