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.
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()
2 Answers 2
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])
3 Comments
I agree with edwinksl comment, check which version of python is on your schools computer. You can right click your python file and click edit with idle, the version should be in the top right coner of the page (next to the file path).
I have one other note however. Your teacher could have otherwise specified, but typically the subtotal is the total for the meal PLUS the tax. Then your tip gets calculated based on that and then added in. (unless your teacher said otherwise, follow their guidelines.)
subT = am*meal
tax1 = tx/100
tax = tax1*subT
subTotalWithTax = subT + tax
tip1 = tp/100
tip = tip1*subTotalWithTax
total = subTotalWithTax + tip
2 Comments
Explore related questions
See similar questions with these tags.
/operator behaves differently in Python 3 vs. Python 2.from __future__ import divisionat the very top of your file and see if that works, if it does then it is 100 percent a version issue. Using double slashes is definitely not going to help as that would floor in python3 and do nothing different in python2 .Python 2.6(ish) (skulpt, Tue Sep 20 2016 23:03:11 GMT+0100 (IST)). i.epython2.6(ish)so you are definitely running a python2 version, also if you happen to ever have to input some non integer input you are going to get a NameError. input is basicallyeval(raw_input())in python2.