他在这个例子中为什么使用浮点数?
我正在学习Python,书名是《Learn Python the Hard Way》。这是我学的第一门编程语言,但在一个练习上卡住了。
练习内容: “解释为什么用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 个回答
一般来说,整数除法和浮点数除法是不一样的。
整数除法:
myInt = 4 / 5
myInt == 0
浮点数除法:
myFloat = 4.0 / 5.0
myFloat = 0.8
通过把 space_in_car 设置为浮点数,运算的结果就会以浮点数的形式计算(没有四舍五入)。
不过在这个例子中,space_in_car 只是用来做乘法。对于乘法来说,情况也是一样的,但数值不会改变(120 和 120.0 是一样的)。我猜原本是想在除法中使用它,以展示上面提到的特性,但可能写错了。
在你问题中的代码里,没有什么特别的理由需要使用浮点数值。
这个问题看起来简单,答案也很简单,但我却把它搞复杂了,不知道为什么。
(假设你知道为什么 3/4
结果是 0
,而 3/4.0
结果是 0.75)
我看了书,代码就只有那一小段,似乎没有更多的内容,它确实问了:
解释一下为什么用
4.0
而不是直接用4
。
结果发现这个问题有点奇怪,因为其实没有特别的理由。David Heffernan 一直是对的。
所以,当你加上 .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
,我觉得这个平均数更合理。
抱歉让你困惑了,希望这次我说对了 :) 希望能帮到你!
旧的:
原因可能是这个:
3/4 # returns 0
这是因为 int/int == int
,所以,4 "在" 3 里 "放" 0 次,而且没有小数点,因为它是个整数。
你应该这样做:
3/4. # returns 0.75
或者
3/float(4)
这适用于 Python 2.x,而不适用于 Python 3。
但是
这完全没有意义,除非我漏掉了什么,我觉得这是“错误的”!
这样会更有道理:
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
因为车里的座位不可能是四个半座位,而平均数可以是两个人半,因为这是个数字,而不是真正的人数。