在Python中,当执行'if'语句时,如何从函数返回值?
在这个函数中,我想在执行if语句时返回一个值 因为Python总是返回一些东西,所以它不返回任何东西 也许我把return关键字放错了地方,我把它放在了两个不同的地方,标记为注释或其他东西,但我没办法弄清楚 请帮帮我。此外,如果除了我的技术之外还有其他方法来计算递归步骤,请告诉我。也许可以尝试以下方法:在Python中,当执行'if'语句时,如何从函数返回值?,python,recursion,return,Python,Recursion,Return,在这个函数中,我想在执行if语句时返回一个值 因为Python总是返回一些东西,所以它不返回任何东西 也许我把return关键字放错了地方,我把它放在了两个不同的地方,标记为注释或其他东西,但我没办法弄清楚 请帮帮我。此外,如果除了我的技术之外还有其他方法来计算递归步骤,请告诉我。也许可以尝试以下方法: def Persistence(number, counter): numArr = [int(i) for i in str(number)] result = 1
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调用的持久性值设置为任何值。以下代码为我返回数据值:
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
请注意,在原始代码中,输出结果为None的原因是,在实际递归调用本身时没有返回:*return**Persistenceresult,counter
因此,当您运行printPersistence333,0时,它没有返回任何内容,从而导致“无”。这个问题比您想象的更好地了解递归。但我们不会将递归函数式风格与语句和副作用命令式风格混为一谈 看起来您正在尝试计算乘法根和持久性。不要把所有的计算问题都放在一个函数中,而是把它分解成合理的部分-
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 ]
你可以在定义的函数中的if和/或else块中返回一些东西。我试过了,它不返回任何东西。谢谢,它成功了。但问题是,你和@Flo都给出了正确的答案。我不知道应该接受哪些答案P@MahmudulHasan哈哈,我不在乎,我觉得弗洛的回答有点干净,我只是想说明为什么它不会返回你想要的。谢谢,它成功了。但问题是,你和@Mason Caiby都给出了正确的答案。我不知道应该接受哪些答案帕哈,我不介意,只要它解决了你的问题:p
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 ]