繁体   English   中英

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

[英]In Python, how do I return a value from a function when an `if` statement is executed?

在此函数中,我想在执行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

请注意,您在原始代码中获得“ None”作为输出的原因是因为您没有在实际的递归调用本身上**return** Persistence(result, counter)**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 ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM