为什么使用整数值作为'而'循环条件在Python中工作?

时间:2016-07-02 15:46:20

标签: python while-loop integer conditional-statements

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

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

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

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

我关注的部分是"而t:"部分。这是如何以及为什么有效?

2 个答案:

答案 0 :(得分:4)

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

  

可以测试任何对象的真值,以便在ifwhile中使用   条件或下面的布尔运算的操作数。 以下   值被视为错误:

     
      
  • None

  •   
  • False

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

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

  •   
  • 任何空映射,例如{}

  •   
  • 用户定义类的实例,如果类定义了   {1}}或__nonzero__()方法,当该方法返回整数零或bool值__len__()时。

  •   
     

所有其他值都被认为是真的 - 所以很多类型的对象都是   永远都是。

大胆强调我的。

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

答案 1 :(得分:0)

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

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

'而t'相当于'而t!= 0'表示当t等于0时循环结束。

在你的for循环中,' t // = 10'相当于&#t; t = t // 10' (' //'是一个分区运算符并返回一个整数)。因此,每次执行循环时t的值变小,直到最终达到0的值。此时,t'而t' condition为False,循环结束。