我无法理解我在Python 2.7中遇到的乘法问题。我确定答案很简单!从你的代码的简单性可以看出我是初学者(见下文)。
from __future__ import division
goAgain = 'yes'
while goAgain == 'yes':
meal = raw_input('How much did your meal cost? ')
tip = raw_input('Do you want to tip a set PRICE or a PERCENTAGE of your total bill? ').upper()
print
if tip == 'PRICE':
tip = raw_input('How much do you want to tip? ')
bill = int(meal) + int(tip)
print 'As your meal cost ' + str(meal) + ' and your tip is ' + str(tip) + ', your total bill is ' + str(bill) + '.'
elif tip == 'PERCENTAGE':
tip = raw_input('What percentage would you like to tip? ')
tip = int(tip) / 100
print 'Your tip is ' + str(tip)
bill = (int(meal) * int(tip)) + int(meal) # This is where my problem is
print 'The bill is ' + str(bill)
print 'As your meal cost ' + str(meal) + ' and you tipped ' + str(tip) + ' percent, your total bill is ' + str(bill) + '.'
else:
tip = raw_input("Sorry, I didn't catch that! Do you want to tip a set PRICE or a PERCENTAGE of your total bill? ").upper()
我遇到的问题是该程序总是告诉我,我的总账单与膳食变量的价格相同,尽管(我可以看到)我正在将膳食和小费值加在一起。 / p>
答案 0 :(得分:1)
你将tip
除以100,得到一个小于1的数字(这是非常合理的)。然后,当你将它相乘时,将它转换为整数。 (int(meal) * int(tip)) + int(meal)
如果您将0到1之间的数字转换为int
,则会得到零。
相反,如果要将结果转换为整数,则可以执行以下操作:
bill = int(int(meal)*tip) + int(meal)
或者您可能希望尝试转换为float
而不是int
。它可能会给出更合适的结果。
答案 1 :(得分:0)
问题(正如@khelwood已经指出的那样)是在Python 2中用/
分割两个整数总是给出一个整数,所以你的有效提示率为零。
问题的根源在于您使用的是Python 2. Python 2中的分区是不直观的,但由于向后兼容性的原因,它继续以这种方式工作。您可以通过切换到Python 3,或者在脚本顶部添加以下内容来一劳永逸地解决它:
from __future__ import division
当您使用/
分割两个数字时,您将始终获得一个浮点数。 (还有//
,它也会给你一个整数结果。)
答案 2 :(得分:-1)
由于您使用过:
tip = int(tip) / 100
tip
现在是一个浮动:
>>> tip = int(tip) / 100
>>> type(tip)
<type 'float'>
所以当你这样做时:
(int(meal) * int(tip)) + int(meal)
将你的float(即&lt; 1)转换为int,因此它将变为0:
>>> int(0.7)
0
所以(int(meal) * int(tip)) + int(meal)
是(int(meal) * 0) + int(meal) = int(meal)
为了达到你想要的效果,你不必投射技巧:
bill = (int(meal) * tip) + int(meal)
但是,如果您愿意,可以投射结果:
bill = int((int(meal) * tip) + int(meal))