我是一名初学者,从艰难的方式学习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。
我错过了什么吗?
答案 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.