【问题标题】:Learning Python The Hard Way艰难地学习 Python
【发布时间】:2012-09-20 11:46:57
【问题描述】:

我是这里的python新手。 我一直在用“Learning Python the hard way”来学习,但我遇到了一个问题 exercise 4, extra credit, question 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."

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

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

【问题讨论】:

  • 也许你应该告诉我们你的问题是什么。
  • 请发布问题的文本,并向我们展示您到目前为止所做的尝试。
  • 我不认为对新用户的第一个问题投反对票是好的,试着多理解一点。有人建议如何改进这个问题,所以请给它一些时间。
  • 您应该始终发布问题,因为您链接到的页面可能在以后变得不可用。以后发现这个问题的人不会理解它的重点。如果这还不够糟糕,那么首先寻求帮助,然后让帮助者查看另一个页面以了解您的问题,这不是一个好习惯。
  • 好的,抱歉我的帖子。我会努力改正自己的。

标签: python


【解决方案1】:

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

编辑:

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

【讨论】:

  • 抱歉,问的问题不正确。我已经编辑过了。
  • 在 python 中,类型是float,而不是双精度。我认为这个练习正在了解浮点数和整数除法之间的差异,如果你不知道它可能会导致计算失败。
【解决方案2】:

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

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

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

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

作为说明 - 如果您仔细阅读 pgae 的底部,作者会将其作为常见问题解答。

您为什么使用 4.0 来获取空间?

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

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 2013-04-06
    • 2011-12-04
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多