在这个函数中,我想在执行if
语句时返回一个值。
由于Python总是返回一些东西,它返回None
。
def Persistence(number, counter):
numArr = [int(i) for i in str(number)]
result = 1
data = None
for j in numArr:
result *= j
if len(str(number)) == 1:
data = str(f'Done. {counter} steps taken')
print(data)
# return data
else:
counter = counter + 1
Persistence(result, counter)
# return data
print(Persistence(333,0))
也许我把return
关键字放在错误的地方(我把它放在两个不同的地方检查,标记为评论)或其他东西,但我无法弄明白。
请帮帮我。另外,如果除了我的技术之外还有另一种计算递归步骤的方法,请告诉我。
也许试试这个:
def Persistence(number, counter):
numArr = [int(i) for i in str(number)]
result = 1
for j in numArr:
result *= j
if len(str(number)) == 1:
return str(f'Done. {counter} steps taken')
counter = counter + 1
return Persistence(result, counter)
print(Persistence(333,0))
希望能帮助到你
问题是你没有将else
调用的值设置为persistence
。以下代码为我返回数据值:
def Persistence(number, counter):
numArr = [int(i) for i in str(number)]
result = 1
data = None
for j in numArr:
result *= j
if len(str(number)) == 1:
data = str(f'Done. {counter} steps taken')
print(data)
return data
else:
counter = counter + 1
data = Persistence(result, counter)
return data
x = Persistence(333, 0)
那么如果我们打印x:
print(x)
# Done. 3 steps taken
计算递归步骤的逻辑基本上是正确的,您只需要为以下两者放置return
语句:1)基本情况2)递归调用本身
对您的代码进行以下修改可以解决您所要求的问题:
def Persistence(number, counter):
numArr = [int(i) for i in str(number)]
result = 1
data = None
for j in numArr:
result *= j
if len(str(number)) == 1:
data = str(counter)
return data
else:
counter = counter + 1
return Persistence(result, counter)
print(Persistence(333,0))
上面的代码将返回以下输出:
3
请注意,您在原始代码中输出“无”的原因是因为您没有在实际的递归调用本身返回:**return** Persistence(result, counter)
因此,当你运行print(Persistence(333,0))
时它没有返回任何导致None
。
这个问题比你想象的更好地了解递归。但是我们不会通过将递归(功能风格)与陈述和副作用(命令式风格)混合来混淆水域。
看起来你正在尝试计算乘法根和持久性。不是将计算的所有问题都放在一个单一的功能中,而是将其分解为合理的部分 -
def digits (n = 0):
if n < 10:
return [ n ]
else:
return digits (n // 10) + [ n % 10 ]
def product (n = 0, *more):
if not more:
return n
else:
return n * product (*more)
def mult_root (n = 0):
if n < 10:
return [ n ]
else:
return [ n ] + mult_root (product (*digits (n)))
def mult_persistence (n = 0):
return len (mult_root (n)) - 1
print (mult_persistence (333))
# 3
print (mult_root (333))
# [ 333, 27, 14, 4 ]