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

6 投票
5 回答
921 浏览
提问于 2025-04-16 19:37

我正在学习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 个回答

2

一般来说,整数除法和浮点数除法是不一样的。

整数除法:

myInt = 4 / 5
myInt == 0

浮点数除法:

myFloat = 4.0 / 5.0
myFloat = 0.8

通过把 space_in_car 设置为浮点数,运算的结果就会以浮点数的形式计算(没有四舍五入)。

不过在这个例子中,space_in_car 只是用来做乘法。对于乘法来说,情况也是一样的,但数值不会改变(120 和 120.0 是一样的)。我猜原本是想在除法中使用它,以展示上面提到的特性,但可能写错了。

4

在你问题中的代码里,没有什么特别的理由需要使用浮点数值。

7

这个问题看起来简单,答案也很简单,但我却把它搞复杂了,不知道为什么。

(假设你知道为什么 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

因为车里的座位不可能是四个半座位,而平均数可以是两个人半,因为这是个数字,而不是真正的人数。

撰写回答