Python 2中的乘法错误

时间:2014-12-22 08:14:36

标签: python python-2.7

我无法理解我在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>

3 个答案:

答案 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))