-3

我是这里的python新手。我一直在用“Learning Python the hard way”学习,但我在 练习 4、额外学分、问题 1 中遇到了问题。

cars = 100
space_in_a_car = 4.0
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."

我用 4.0 for space_in_a_car,但有必要吗?为什么在这种情况下使用 4.0 而不是 4?

希望大家帮我解释一下原因。

4

2 回答 2

2

我认为问题要求您发现的摘要

在 Python 2.x 中,/运算符用于除法。然而,当给定两个整数(如 5 和 2)时,它的行为有点令人惊讶,正如大多数人所期望2.5的那样 - 结果是2. 通过使用5.0 / 2or 5 / 2.0(或什float(5) / 2至),解释器将返回预期的答案2.5。所以简单地说 -如果操作纯粹是整数,那么结果将是一个整数,可能会损失精度

这在 Python 3.x 中发生了变化,默认行为是丢失精度。例如,5 / 2确实会给您...并且您必须通过使用仅整数除法2.5的运算符明确声明您不介意精度损失(例如,Python 2.x 中的行为) - 例如,在 Python 3 中//.x,与Python 2.x5 // 2中的相同。5 / 2//运算符也在 Python 2.x 中。如果你想明确一点。

为了真正让它像泥巴一样清晰,您可以from __future__ import division在 Python 2.6 中的模块顶部使用(可能是 2.5 - 不记得了)使/操作符的行为符合 Python 3.x。

作为注释 - 如果您阅读到 pgae 的底部,作者将其作为常见问题解答。

为什么你用 4.0 做空间?

主要是这样您就可以找出浮点数是什么并提出这个问题。查看额外的学分

于 2012-09-20T12:35:50.977 回答
2

4.0 所做的是将变量键入浮点数而不是整数。这样做的结果是在输出carpool_capacity中也输入了 float 并且读取 120.0 而不是 120。

编辑:

在您的示例中,没有理由使用 float 精度而不是 int 精度space_in_car。唯一可以使用填充的地方是计算average_passengers_per_car = passengers / cars_driven。因为在除法之后你会丢失逗号后面的所有内容,因为它会立即转换为 int。

于 2012-09-20T12:01:44.777 回答