为什么他在这个例子中使用浮点?

时间:2011-06-15 15:28:44

标签: python floating-point

我是一名初学者,从艰难的方式学习Python。这是我学习的第一门编程语言,我被困在练习中。

练习: “解释为什么使用4.0而不仅仅是4。”

cars = 100
space_in_a_car = 4.0 #Why does he uses 4.0 instead of 4 here?
drivers = 30
passengers = 90
cars_not_driven = cars - drivers
cars_driven = drivers
carpool_capacity = cars_driven * space_in_a_car
average_passengers_per_car = passengers / cars_driven


print "There are", cars, "cars available."
print "There are only", drivers, "drivers available."
print "There will be", cars_not_driven, "empty cars today."
print "We can transport", carpool_capacity, "people today."
print "We have", passengers, "to carpool today."
print "We need to put about", average_passengers_per_car, "in each car."

老实说,我找不到任何理由为什么他会在第2行使用浮点除了作为一个例子,如果我有一个浮点数它会影响表达式评估的其余部分(cars_driven * space_in_a_car)结果是120.0。

我错过了什么吗?

5 个答案:

答案 0 :(得分:6)

这是一个简单的问题,有一个简单的答案,由于某种原因我过度复杂。

(假设您知道为什么3/4会返回0以及为什么3/4.0会返回0.75)

我看了一下这本书,代码那一点,它似乎没有任何更多的东西,它确实会问:

  

解释为什么使用4.0代替   只是4。

事实证明这是一个奇怪的问题,因为实际上没有理由。 David Heffernan was right all along.

所以,当你添加.0时,它没有任何影响,因为你只需要在浮动中转动拼车容量:

carpool_capacity = cars_driven * space_in_a_car

我无法理解作者的目标是什么,唯一值得注意的区别是,一个打印120.0而另一个120

正如我之前所说:

average_passengers_per_car = passengers / float(cars_driven)  #added float

会更有意义,因为,例如,如果原始代码中的passengers = 93平均值为3而不是3.1,那么我认为平均。

很抱歉这个混乱,我希望我现在得到它:)并且它有所帮助!

<强> OLD:

<击> 原因可能是:

3/4 # returns 0

那是因为int/int == int,所以,4“在3中适合”0次,没有小数点,因为它是一个int。

你应该这样做:

3/4. # returns 0.75

3/float(4)

这适用于python 2.x而不适用于python 3

<强> BUT

这根本没有意义,除非我遗漏了一些东西,否则我认为这是“错误的”!

这会更有意义:

cars = 100
space_in_a_car = 4 #not float
drivers = 30
passengers = 90
cars_not_driven = cars - drivers
cars_driven = drivers
carpool_capacity = cars_driven * space_in_a_car
average_passengers_per_car = passengers / float(cars_driven)  #added float

由于汽车的空间数量不能是4个半座位,平均值可能是2个半人,因为它是一个数字而不是实际的人。

答案 1 :(得分:3)

在您的问题中给出的代码中,没有充分的理由使用浮点值。

答案 2 :(得分:2)

通常,整数div与浮点div

不同

整数div:

myInt = 4 / 5
myInt == 0

浮动div:

myFloat = 4.0 / 5.0
myFloat = 0.8

通过使space_in_car成为一个浮点数,然后操作的结果被计算为浮点数(没有舍入)

但是在这个示例中,space_in_car仅用于乘法。对于乘法,相同,但值不会改变(120与120.0相同)。我的猜测是它的目的是用于显示上述属性的分区,但有一个lapsus calami。

答案 3 :(得分:1)

我认为措辞中存在错误:因为 space_in_a_car 仅出现在乘法中,所以在更改其值时不可能发现问题。

如果驱动程序的值不是乘客的值的除数,则可能会出现问题

查看更改驱动程序的值时会发生什么:

form = ('space_in_a_car   : %s\n'
        'drivers          : %s\n'
        'passengers       : %s\n'
        'cars_driven      : %s\n'
        'average_passengers_per_car : %s\n\n')


for nbdrivers in (30, 30.0, 47, 47.0):

    cars = 100
    space_in_a_car = 4

    drivers, passengers = nbdrivers, 90

    cars_driven = drivers
    carpool_capacity = cars_driven * space_in_a_car
    average_passengers_per_car = passengers / cars_driven

    print form % (space_in_a_car,
                  drivers,
                  passengers,
                  cars_driven,
                  average_passengers_per_car)

结果

space_in_a_car   : 4
drivers          : 30
passengers       : 90
cars_driven      : 30
average_passengers_per_car : 3


space_in_a_car   : 4
drivers          : 30.0
passengers       : 90
cars_driven      : 30.0
average_passengers_per_car : 3.0


space_in_a_car   : 4
drivers          : 47
passengers       : 90
cars_driven      : 47
average_passengers_per_car : 1


space_in_a_car   : 4
drivers          : 47.0
passengers       : 90
cars_driven      : 47.0
average_passengers_per_car : 1.91489361702

然后,驱动程序必须是浮点数,而不是 space_in_a_car

答案 4 :(得分:0)

cars =  100
space_in_a_car = 4.0
drivers = 30
passengers = 90

# 90 % 4 = 2(man), 90 / 4.0 = 22.5(car)
print "Need %d cars." % int(round(90 / 4.0))

# He wants you to think more about it.