Eli R Eli R - 2 months ago 5
Python Question

Python Code not Working in Certain IDLE

So for my school, I have to make this script that calculates the tip and tax of a meal. I'm ahead of everyone in my class, so no others have had this issue.

The code works fine in the Python3 IDLE on my PC, it also works fine at repl.it. Oddly enough, at my school's IDLE, which is private, and this IDLE, which is pretty much the same the tip and the tax do not properly calculate.

Also, there are some other bugs, such as displaying extra digits or not enough digits. I tried my hardest to fix this with string slicing but it didn't work. The only other way I know how to do it is with if statements which aren't allowed.

Any help would be appreciated, thanks in advance.

Code:

#Name
#9/20/16
#This program calculates the total cost of a meal.

def main():
#INPUT
meal = float(30.96)
am = int(input("How many meals would you like? "))
tx = int(input("What is the tax %? "))
tp = int(input("How much % do you want to tip?" ))
#CALCULATIONS
subT = am*meal
tax1 = tx/100
tax = tax1*subT
subTotalWithTax = subT + tax
tip1 = tp/100
tip = tip1*subTotalWithTax
total = subTotalWithTax + tip
clTip = str(tip)[0: 4]
clTax = str(tax)[0: 4]
clTotal = str(total)[0: 6]
clSubT = str(subT)[0: 6]
#OUTPUT
print("-----------------------------------------------")
print("Items: ")
print(str(am) + " Overloaded Potato Skins ------------- $7.99")
print(str(am) + " Grilled Top Sirloin 12oz ------------ $16.49")
print(str(am) + " Sweet Tea --------------------------- $1.99")
print(str(am) + " Southern Pecan Pie ------------------ $3.99")
print("------------------------------------------------")
print("Totals: ")
print("Subtotal: ----------------------------- $" + str(clSubT))
print("Tax: ---------------------------------- $" + str(clTax))
print("Tip: ---------------------------------- $" + str(clTip))
print("Total --------------------------------- $" + str(clTotal))
print("------------------------------------------------")
main()

Answer

The fact that you get $0 as answer may show that python (2, likely) still represents numbers as integers. Try explicitly casting to floats. Such as:

tip1 = tp/100.0  # instead of 100

or

tx = float(input("What is the tax %? "))

Also the clipping for displaying is a bit messy, try

print("Total --------------------------------- ${}".format(total))

The .format() is the trick you're looking for. There are ways to show only two decimals, check around SO or https://pyformat.info/ --but do try "{:.2f}".format(total) :-)


Edit Alternatively, without format: print("%.2f" % total)

And now, for a completely convoluted way to print the price (that is, if formatting is not allowed but string manipulation is):

totalDollar, totalCent = str(total).split('.')
totalCent += "00"
print("Total --------------------------------- $" + totalDollar + "." + totalCent[:2])