def digital_root(n):
x = str(n)
while len(x)!=0 and len(x)!=1:
r = 0
for i in range(len(x)):
r= r + int(x[i])
x = str(r)
return r
数字根是数字中所有数字的递归和。给定 n,求 n 的数字之和。如果该值超过一位数,则继续以这种方式减少,直到产生一位数。这只适用于自然数。
My code:
这段代码高效吗?我收到以下错误:
Traceback (most recent call last):
File "main.py", line 8, in <module>
test.assert_equals( digital_root(0), 0 )
File "/home/codewarrior/solution.py", line 8, in digital_root
return r
UnboundLocalError: local variable 'r' referenced before assignment
当您到达 return 语句时,看起来 r 超出了范围。它仅在 while 语句内局部应用,该语句在 return 语句之前结束。
最好只有一个 return 语句,并且它位于函数的最广泛范围内,并且位于最后。因此,尝试在 while 循环之外将 r 声明为 n,与 return 语句的作用域相同。该范围还包括 while 循环内的所有内容。
def digital_root(n):
x = str(n)
r = n
while len(x) > 1:
r = 0
for i in range(len(x)):
r = r + int(x[i])
x = str(r)
return r
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)