我是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的剩余部分)。
感谢您的帮助,并对任何愚蠢的问题表示抱歉。
答案 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)
为True
,while
循环就会继续。
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
变为零(或者n
或break
或return
...)