Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
去年关闭。
我正在做a challenge on codewars,我应该用Python编写一个数字根函数。我不知道为什么它不起作用。这是我第一次尝试递归。我真的很想解决这个问题。
本节旨在将
整个部分都是不必要的。甚至没有用正确的整数填充
此循环尝试将所有数字加在一起。但是,
在循环中,使用
这在上面的循环中,但是看起来不应该是这样。它看起来像是要在
函数的正确版本可能看起来像
利用
或者,使其保持递归状态,
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
去年关闭。
我正在做a challenge on codewars,我应该用Python编写一个数字根函数。我不知道为什么它不起作用。这是我第一次尝试递归。我真的很想解决这个问题。
def digital_root(num):
#Check to see if num has more than one digit
if num > 9:
x = 0
z = 1
#Create an array of the digits in num
digits = [int(d) for d in str(num)]
#Convert string elements in digits[] to ints
for n in digits:
digits[x] = int(x)
x = x + 1
#Add each element in digits[] to digits[0]
for n in digits:
digits[0] = digits[0] + digits[z]
#If digits[0] has more than one digit, then run digital_root with digits[0] in the parameters
if digits[0] > 9:
digital_root(digits[0])
else:
return digits[0]
else:
return num
digital_root(15)
>> Program finished with exit code 0
最佳答案
您的功能有很多问题。让我们往下看。
#Convert string elements in digits[] to ints
for n in digits:
digits[x] = int(x)
x = x + 1
本节旨在将
digits
的元素转换为int,但是digits
的元素已经是int。较早的列表理解已经产生了整数:digits = [int(d) for d in str(num)]
# ^^^^^^
整个部分都是不必要的。甚至没有用正确的整数填充
digits
。而不是在int
的元素上调用digits
,而是在索引上调用int
。此外,循环不使用循环变量n
。for n in digits:
digits[0] = digits[0] + digits[z]
此循环尝试将所有数字加在一起。但是,
z
永远不会递增,因此每次都会将digits[1]
添加到digits[0]
。同样,即使将循环更改为增加z
,它也很可能走得太远,超出列表的末尾。 z
从1开始,并且循环为digits
的每个元素执行一次迭代,因此到最后一次迭代,z
将超过列表的末尾。同样,再次使用n
变量。在循环中,使用
digits[0]
作为保存总和的位置会混淆digits
数组的含义。最好使用一个单独的变量(这样做可以避免在z
处启动1),但是由于Python已经具有sum
函数,因此仅使用sum
会更简单。#If digits[0] has more than one digit, then run digital_root with digits[0] in the parameters
if digits[0] > 9:
digital_root(digits[0])
else:
return digits[0]
这在上面的循环中,但是看起来不应该是这样。它看起来像是要在
digits[0]
包含和之后运行的。如果是这样,则应使其缩窄(在每行中删除4个空格)。另外,由于递归调用上没有return
,因此将丢弃递归调用的返回值。函数的正确版本可能看起来像
def digital_root(num):
if num > 9:
digits = [int(d) for d in str(num)]
total = 0
for n in digits:
total += n
if total > 9:
return digital_root(total)
else:
return total
else:
return num
利用
sum
一个更简单的解决方案是def digital_root(num):
while num > 9:
num = sum(map(int, str(num)))
return num
或者,使其保持递归状态,
def digital_root(num):
if num < 10:
return num
return digital_root(sum(map(int, str(num))))
关于python - 为什么这个数字根函数不起作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50278875/
10-12 20:55