【问题标题】:Python, have a condition in a for loopPython,在for循环中有一个条件
【发布时间】:2015-03-09 01:28:55
【问题描述】:

有人把这个例子带给我(python2):

num = int(input("num")) 
den = int(input("den"))

quot = 0
rest = den
i = num

for i in range(i,i>den, -den):
  quot = quot + 1
  rest = i - den

print quot
print rest     

代码运行良好,做它需要做的事情,并且不会产生错误。

我不明白为什么。对我来说,range() 需要一个下限和一个上限,而对我来说,i 是下限,而i>den 应该计算为布尔值?

上下文是一个使用for循环实现除法的教程函数。

【问题讨论】:

  • 你能多加一点周围的代码吗?正如所写,我们不知道所有的先决条件(如inum 的初始值)。
  • 你可以在 for 循环中使用条件,但不能在范围函数中使用。
  • @MalikBrahimi 不,你可以,因为True 的计算结果为1False 的计算结果为0。但它肯定不会像 C 语言的 for 语句那样表现。它只是将迭代的停止点设置为01
  • 是的,我的意思是达到预期目的。
  • 在我看来,编写此代码的人将 Python for-loop 语法与 C、Java、JS 等中的 for-loop 语法混合在一起。即使它在技术上是正确的,也绝对不是蟒蛇。

标签: python for-loop range


【解决方案1】:

这是“duck typing”的应用程序。在这种情况下,i>num 的计算结果为布尔值 TrueFalse,但在 range 函数的上下文中,True 等价于整数 1,而False 等价于为整数0

因此,例如,如果i>numFalse,那么该代码等价于

for i in range(i, 0, -num):
  #do stuff

【讨论】:

  • 话虽如此,几乎可以肯定有一种比使用像这样的聪明技巧更清晰的方法来写出迭代的条件,在 Python 2.X 中,它在技术上依赖于实现细节。
  • 当然 - 这是一段奇怪的代码,我不想调试或维护。
  • 呸,看到 OP 的更新就更疯狂了,因为 i = num 进入了循环,所以它总是False。什么鬼?
  • 更新让我大开眼界:当 i 初始化为 num 时,条件 i > num 的计算结果为 True。 range(i, True) 的计算结果为例如 (16, 1),它是一个空范围 []。但是,由于我们有步骤更改 -dev,例如,如果 dev 为 2,则范围会导致 [16, 14, 12, 10, 8, 6, 4, 2],这就是代码执行所需操作的原因!
  • @aruisdante 什么实现细节?
【解决方案2】:

这是因为 Python 考虑了 True == 1False == 0

更多信息请看这里:Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 2022-01-01
    • 2013-03-09
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多