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

问题描述 投票:0回答:4

在这个函数中,我想在执行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关键字放在错误的地方(我把它放在两个不同的地方检查,标记为评论)或其他东西,但我无法弄明白。

请帮帮我。另外,如果除了我的技术之外还有另一种计算递归步骤的方法,请告诉我。

python recursion return
4个回答
3
投票

也许试试这个:

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))

希望能帮助到你


1
投票

问题是你没有将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

1
投票

计算递归步骤的逻辑基本上是正确的,您只需要为以下两者放置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


1
投票

这个问题比你想象的更好地了解递归。但是我们不会通过将递归(功能风格)与陈述和副作用(命令式风格)混合来混淆水域。

看起来你正在尝试计算乘法根和持久性。不是将计算的所有问题都放在一个单一的功能中,而是将其分解为合理的部分 -

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 ]
© www.soinside.com 2019 - 2024. All rights reserved.