给定 n,对 n 的数字求和。如果该值超过一位数,则继续减少产生一位数

2023-12-11

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(使用前将#替换为@)

给定 n,对 n 的数字求和。如果该值超过一位数,则继续减少产生一位数 的相关文章

随机推荐