【问题标题】:Can someone tell me why this while loop works in python? [duplicate]有人能告诉我为什么这个while循环在python中有效吗? [复制]
【发布时间】:2017-07-31 13:33:14
【问题描述】:
sum, Nr = 0, 12
i = Nr
while i:
    sum += i
    i -= 1
print ('The sum of all natural numbers up to (and inclusive of) ' + repr(Nr) +
' is ' + repr(sum))

所以这是 python 3 中的一个非常简单的 while 循环,它按预期返回“直到(包括)12 的所有自然数之和为 78”。

我感到困惑的是,当“i”不受任何比较运算符影响时,为什么“while i:”这个条件在这里起作用。

谢谢!

【问题讨论】:

  • 请注意,负数也是真实的...所以不要将 i -= 1 更改为与 0 不完全匹配的任何内容并结束循环...例如:@ 987654324@ 永远不会结束...
  • 谢谢!我刚开始编程,truthy falsy 帮了大忙!

标签: python python-3.x while-loop


【解决方案1】:

在条件语句中,输入被隐式转换为布尔值,因此循环等效于

while bool(i):
    ...

bool(i)True,只要 i != 0False 如果 i == 0,所以循环一直持续到 i 变为零。

【讨论】:

    【解决方案2】:

    While 期望表达式,如果是 true 则运行循环。

    while_stmt ::= "while" 表达式 ":" 套件 ["else" ":" 套件]

    In [38]: bool(Nr)
    Out[38]: True
    

    【讨论】:

      【解决方案3】:

      while 循环需要TrueFalse 的任何条件。当你写while i(假设i = 5)时,它被评估为True,所以循环继续,但是当它遇到i=0时,它被评估为False并且循环中断。

      【讨论】:

        【解决方案4】:

        似乎 Python 用i not equals zero(伪代码)进行了隐式替换。见documentation

        【讨论】:

          【解决方案5】:

          Python 通过将其转换为布尔值来自动计算传递给它的变量的truthy 值。由于i 是一个非零正整数在 Python 中被认为是真的,这就是它工作的原因,直到它最终变为 0,这被认为是假的。

          >>> print(bool(3))
          True
          >>> print(bool(0))
          False
          

          【讨论】:

          • 0 绝对不被视为负数。
          • @MarkDickinson 更正了。
          【解决方案6】:

          在 python 中,值是鸭子类型的——这意味着解释器可以尝试将值适合您放置的任何上下文。除零以外的所有数字都是“真实的”,例如

          if 3:  # True
          

          而零是假的:

          if 0:  # False
          

          【讨论】:

          • 所有低于零的值也是真实的。
          • 更正了答案@Jean-FrançoisFabre :)
          猜你喜欢
          • 2022-12-04
          • 1970-01-01
          • 2016-03-03
          • 1970-01-01
          • 2021-05-02
          • 2021-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多