【问题标题】:Why does using an integer value as a 'while' loop condition work in Python?为什么在 Python 中使用整数值作为“while”循环条件?
【发布时间】:2016-11-04 20:03:02
【问题描述】:

以下代码将输出无限行的“test”。

foo = 5
while foo:
    print("bar")

前几天我在这里遇到了一个关于数字和的答案。这是答案中显示的代码:

def digit_sum(t):
    s = 0
    while t:
        s += t % 10
        t //= 10
    return s

我关注的部分是“while t:”部分。这如何以及为什么起作用?

【问题讨论】:

  • 0 为假,非零为真。
  • 您能否更详细地解释您的问题?因为,截至目前,我的回答是:“就是这样”。
  • 您可以通过阅读文档找到答案:docs.python.org/3/library/stdtypes.html#truth
  • 部分历史来自 C(可能更早?)零被认为是 False。 bool 类是int 的子类,因此它们密切相关。请注意,字符 "0"(零)在 Python 中为 True,但在 Perl 中为 False。
  • @cdarke 在 python 中肯定 0 也是假的,而 1 是真的?

标签: python while-loop integer conditional-statements


【解决方案1】:

while 条件测试真相。任何非零数值都被认为是真的。请参阅 Python 文档中的 Truth Value Testing section

可以测试任何对象的真值,用于ifwhile 条件或作为以下布尔运算的操作数。 以下 值被认为是错误的:

  • None

  • False

  • 任何数字类型的零,例如,00L0.00j

  • 任何空序列,例如,''()[]

  • 任何空映射,例如{}

  • 用户定义类的实例,如果该类定义了一个 __nonzero__()__len__() 方法,当该方法返回整数零或布尔值 False

所有其他值都被认为是真的——所以许多类型的对象都是 总是正确的。

我的大胆强调。

在您的示例 while 循环中,t 趋向于 0(整数除以 10),因此最终 while t: 结束,因为 t 被认为是错误的。

【讨论】:

  • 请注意,__nonzero__ 是 Python 2,在 Python 3 中重命名为 __bool__
  • 我想我的问题没有被很好地接受,但非常感谢您的回答。
【解决方案2】:

您已经得到了有用的答案,但我只是想以一种 Python 初学者容易理解的方式回答您的问题。 您可以将代码重写为:

def digit_sum(t):
    s = 0
    while t!=0:
        s += t % 10
        t = t//10
    return s

'while t' 等价于'while t!=0',表示当 t 等于 0 时循环结束。

在你的 for 循环中,'t //= 10' 等价于 't = t // 10'('//' 是一个除法运算符并返回一个整数)。所以每次循环执行时t的值都会变小,直到最终达到0的值。此时'while t'条件为False,循环结束。

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多