当前位置: 首页 > 知识库问答 >
问题:

给定n,取n的位数之和。如果该值超过一位,则继续减少一位数

江曦
2023-03-14
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

共有3个答案

慕金林
2023-03-14

如果字符串x的长度为1(您也可以询问while循环的长度是否大于1),代码将直接跳转到返回r。但是,它可能不知道r指的是什么,因为它只在while循环中分配。

伯庆
2023-03-14

我会用递归来处理这个问题

def root_sum(n):
    x = sum(int(i) for i in str(n))
    if x > 9:
       return root_sum(x)
    return x

这是最简单的解决方案

范兴文
2023-03-14

当您到达返回语句时,r看起来超出了范围。它仅在while语句中本地应用,该语句在返回语句之前结束。

最好只有一个返回语句,并且它在函数的最广泛范围内,并且在末尾。因此,尝试在while循环之外声明r,与返回语句的范围相同。该范围也包括time循环内的所有内容。

def digital_root(n):
    x = str(n)
    r = 0
    while len(x) > 1:
        r = 0
        for i in range(len(x)):
            r = r + int(x[i])
        x = str(r)
    return r
 类似资料:
  • 嗯,我可以通过逻辑做到这一点,但我打赌有一个数学运算或表达式来做到这一点。一个存在吗?如果是,是什么? 以下是算法: 长位置=位位置/64 接下来是:当2的次方时,如何将除法转换为按位移位?

  • 本文向大家介绍JS取数字小数点后两位或n位的简单方法,包括了JS取数字小数点后两位或n位的简单方法的使用技巧和注意事项,需要的朋友参考一下 在js中有时要用到取float数字的小数点后两位的情况。 以上就是小编为大家带来的JS取数字小数点后两位或n位的简单方法全部内容了,希望大家多多支持呐喊教程~

  • 下面代码中编写的方法需要取整数以及整数中第一位和最后一位的结果和。 注意:虽然我知道正确的解决方案,但我问这个问题的原因是我需要了解为什么我的代码不起作用,因为这使我成为一名更好的程序员,请帮助。 在上面的代码中,如果我在if块之后保持number/=10,如下所示 然后我的代码给出了正确的结果。例如,如果我在方法中输入121,因为第一个数字是1,第二个数字是1,那么它将两者相加,并给出结果2。这

  • a)制定方法体系 void rightRotate (char [] arr, int n) 方法将给定的字符数组向右旋转n个位置。 例如,如果 arr = {'a', 'b', 'c', 'd', 'e' }, 和 n=2,则结果应为 arr={'d', 'e', 'a', 'b', 'c'} b)开发方法主体 void leftRotate (char [] arr, int n) 该方法将给

  • 我正在尝试生成位随机数。我可以生成一个随机数,但这里的情况是生成一个位数字。我尝试通过将随机数存储在数组中来执行此操作,但我需要它以长长格式而不是数组。

  • 本文向大家介绍Python 实现取多维数组第n维的前几位,包括了Python 实现取多维数组第n维的前几位的使用技巧和注意事项,需要的朋友参考一下 现在我们有一个shape为(7352, 9, 128, 1)的numpy数组。 想要取出第2维的前三个数据,构成新数组(7352, 3, 128, 1) 我的思想是:将第2维数据转置(transpose)到第一维,再用切片(slice)取出前三个数据,