Eli R Eli R - 11 months ago 39
Python Question

Python Code not Working in Certain Versions

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 Python Fiddle, 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.


#This program calculates the total cost of a meal.

def main():
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?" ))
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]
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("Totals: ")
print("Subtotal: ----------------------------- $" + str(clSubT))
print("Tax: ---------------------------------- $" + str(clTax))
print("Tip: ---------------------------------- $" + str(clTip))
print("Total --------------------------------- $" + str(clTotal))

Answer Source

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


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])