【问题标题】:Why is my Python function returning None? [duplicate]为什么我的 Python 函数返回 None? [复制]
【发布时间】:2022-01-12 06:09:21
【问题描述】:

我是 python 新手,我尝试使用欧几里安算法创建一个 GCD 函数。但是每当我尝试打印答案时,它都不会返回。可能有人让我知道我做错了什么。

代码:

def gcd(a,b):
    if a - b != 0:
        b = b - a
        b = abs(b)
        if a > b:
            a,b = b, a
            return gcd(a,b)
            
        else:
            gcd(a,b)
    else: 
        print(a)

x = input("Give First Num... ")

y = input("Give Second Num... ")

answer = gcd(int(x), int(y))

print("GCD = {}".format(answer))

控制台:

120
GCD = None

【问题讨论】:

  • 这段代码的任何部分实际上都没有returns 是最大的公分母。
  • 函数中唯一返回的地方是第一个递归调用,所以最终它只会返回None。考虑一个简单的例子,a = b = 1。代码进入顶层else,打印a(即1),然后隐式返回None。将 print(a) 更改为 return a 以修复它。然后查看第二个递归调用gcd(a,b)。这会调用自身,丢弃结果,并再次隐式返回None。将gcd(a,b) 更改为return gcd(a,b)

标签: python algorithm math


【解决方案1】:

要返回某些内容,只需对您的代码进行细微调整:

def gcd(a,b):
    if a - b != 0:
        b = b - a
        b = abs(b)
        if a > b:
            a,b = b, a
            return gcd(a,b)
            
        else:
            return gcd(a,b)
    else: 
        return a

这样写,你的函数总是会返回分配给answer的东西。

【讨论】:

    【解决方案2】:
    def gcd(a,b):
        if a - b != 0:
            b = b - a
            b = abs(b)
    
            if a > b:
                a,b = b, a
                return gcd(a,b)
    
            else:
                return gcd(a,b)
        else:
            return a
    
    x = input("Give First Num... ")
    
    y = input("Give Second Num... ")
    
    answer = gcd(int(x), int(y))
    
    print(answer)
    print("GCD = {}".format(answer))
    

    在最后一个“else”中,将return 放在print() 之前,因为当您使用打印并且想要获取值时,它不会返回而只会打印(通过最后一个条件),您应该必须得到None 的值。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2019-03-03
      • 2021-12-23
      • 2018-11-29
      • 2017-12-10
      • 1970-01-01
      相关资源
      最近更新 更多