gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:22:17 24 4
gpt4 key购买 nike

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 的数字之和。如果该值超过一位数,则继续以这种方式减少,直到产生一位数。这仅适用于自然数。

我的代码:

这段代码高效吗?我收到以下错误:

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

关于python - 给定 n,对 n 的数字求和。如果该值超过一位数,则继续减少产生一位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60472873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com