如何使用'while'变量':'

时间:2017-09-26 19:37:45

标签: python python-3.x

我是python的新手,并且正在寻找用户输入和整数的函数的代码,函数会添加并返回数字位数的总和。

代码看起来像这样:

def sum_digits(n):
    s = 0
    while n:
        s += n % 10
        n //= 10
    return s

所以我知道while循环是如何工作的,但我无法解决这个问题的原因(也无法在Google上找到任何东西)。我认为While循环总是有一个条件,例如'while n< 10'或排序。

'n:'到底是什么意思?这段代码是如何工作的?代码如何知道如何停止运行,以及它究竟是如何返回数字的总和(我所看到的只是返回s / n的剩余部分)。

感谢您的帮助,并对任何愚蠢的问题表示抱歉。

2 个答案:

答案 0 :(得分:0)

while n:相当于while n!=0:(在这种情况下,当您处理数字时)。由于python中的每个值都有一个布尔值,对于任何不等于零的数字bool(n) == True,如果n等于零,bool(n) == False

该功能可以写成(感谢@ Jean-FrançoisFabre建议使用divmod):

def sum_digits(n):
    s = 0
    while n != 0:
        n, t = divmod(n, 10)  # to not use division and modulo separately
        # n has the value of n//10, t has the value of n%10
        s += t
    return s

print(sum_digits(154)) # => 10
print(sum_digits(134)) # => 8
print(sum_digits(987)) # => 24

答案 1 :(得分:0)

while隐式调用bool参数。因此,只要您的示例中的bool(n)Truewhile循环就会继续。

Pythons documentation for builtin types表示除零以外的任何数字都被视为True:

  

默认情况下,除非对象在使用对象调用时定义返回__bool__()的{​​{1}}方法或返回零的False方法,否则对象将被视为true。以下是大多数被认为是错误的内置对象:

     
      
  • 常量定义为false:None和False。
  •   
  • 任何数字类型的零:0,0.0,0j,十进制(0),分数(0,1)
  •   
  • 空序列和集合:'',(),[],{},set(),range(0)
  •   

所以基本上__len__()循环会一直持续到while n变为零(或者nbreakreturn ...)