以下代码将输出" test"的无限行。
foo = 5
while foo:
print("bar")
前几天我在这里找到了一个关于数字总和的答案。这是答案中显示的代码:
def digit_sum(t):
s = 0
while t:
s += t % 10
t //= 10
return s
我关注的部分是"而t:"部分。这是如何以及为什么有效?
答案 0 :(得分:4)
while
条件测试真实。任何非零数值都被视为true。请参阅Python文档中的Truth Value Testing section:
可以测试任何对象的真值,以便在
if
或while
中使用 条件或下面的布尔运算的操作数。 以下 值被视为错误:
None
False
任何数字类型的零,例如
0
,0L
,0.0
,0j
。任何空序列,例如
''
,()
,[]
。任何空映射,例如
{}
。用户定义类的实例,如果类定义了 {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,循环结束。