在Python中,当执行'if'语句时,如何从函数返回值?

在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

在这个函数中,我想在执行if语句时返回一个值

因为Python总是返回一些东西,所以它不返回任何东西

也许我把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调用的持久性值设置为任何值。以下代码为我返回数据值:

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 ]