Home > Software design >  Python asking for input twice when I need it one time
Python asking for input twice when I need it one time

Time:10-08

Write a program that will ask the user for the cost of a meal, compute the tip for the meal (18%), compute the tax on the meal (8.25%), and then displays the cost of the meal, the tip amount for the meal, the tax on the meal, and the total of the meal which is a sum of the cost, tip, and tax amount

Here is my code:

def get_cost():
    meal = float(input('Enter cost of meal: '))
    while meal < 0:
        print('Not possible.')
        meal = float(input('Enter cost of meal: '))
    return meal

def compute_tip():
    tip = get_cost()*.18 
    return tip

def compute_tax():
    tax = get_cost()*.0825 
    return tax

def compute_grand_total():
    total = get_cost()   compute_tip()   compute_tax()
    return total

def display_total_cost():
    meal1 = print('Cost:', format(get_cost(), '.2f'))
    tip3 = print('Tip:', format(compute_tip(), '.2f'))
    tax3 = print('Tax:', format(compute_tax(), '.2f'))
    total2 = print('Total:', format(compute_grand_total(), '.2f'))
    return meal1, tip3, tax3, total2
    

def main():
    m, t, ta, to = display_total_cost()
    print('Cost:' , format(m, '.2f'))
    print('Tip:', format(t, '.2f'))
    print('Tax:', format(ta, '.2f'))
    print('Total:', format(to, '.2f'))

main()

Output on Python Shell:

Enter cost of meal: 19.95
Cost: 19.95
Enter cost of meal: 19.95
Tip: 3.59
Enter cost of meal: 19.95
Tax: 1.65
Enter cost of meal: 19.95

This may be a very simple fix but how can I fix this where it doesn't ask for meal again? I'm still starting out.

CodePudding user response:

Call get_cost() once and assign it to a variable; then pass that as a parameter to the other functions.

def compute_tip(meal):
    return meal * .18 

def compute_tax(meal):
    return meal * .0825 

def display_total_cost():
    meal = get_cost()
    return meal, compute_tip(meal), compute_tax(meal), compute_grand_total(meal)

CodePudding user response:

You are calling get_cost() over and over again internally and that's why you are unable to find where the problem is. See you call it only once in the display_total_cost function but you are calling some other functions like compute_tip,compute_tax and compute_grand_total where all of them are internally calling the get_cost() function and that's why the programme asks you for multiple inputs. Now, as suggested by everyone else you can store the return value in a variable and then pass it to all the other functions as an argument.

  • You also have a trivial main function in your programme which does the same thing as the display_total_cost function.
  • meal1 = print('Cost:', format(get_cost(), '.2f')) this is not the correct syntax.You can not use print statement after the assignment operator i.e. = Even though it won't raise any errors but why would you write extra things when you could just do a print statement cause using a print statement with assignment operator won't assign the variable with a value.
  • You also have another trivial function compute_grand_total you need not call functions again and again just to calculate previously calculated values unless and until you have a memory bound and you can not store values.

Fix it the following way:

def get_cost():
    meal = float(input('Enter cost of meal: '))
    while meal < 0:
        print('Not possible.')
        meal = float(input('Enter cost of meal: '))
    return meal

def compute_tip(meal):
    tip = meal*.18 
    return tip

def compute_tax(meal):
    tax = meal*.0825 
    return tax

def display_total_cost():
    meal = get_cost()
    print('Cost:', format(get_cost(), '.2f'))
    tip = compute_tip(meal)
    print('Tip:', format(tip, '.2f'))
    tax = compute_tax(meal)
    print('Tax:', format(tax, '.2f'))
    print('Total:', format(meal   tip   tax, '.2f')) 

display_total_cost()
  • Related