Python 使用查找除数的函数,查找任意两个给定正整数的最大公约数

Python 使用查找除数的函数,查找任意两个给定正整数的最大公约数,python,python-3.x,Python,Python 3.x,这就是我到目前为止所拥有的 def div(x): A=[] for i in range(1,x): if x%i==0: A.append(i) print(A) div(45) div(50) n=0 for i in range(1, min(45, 50)+1): if 45%i==50%i==0: n+=1 print(max(n)) 我尝试了多种逻辑,但最终都出现了一些错误。这是最合适的。

这就是我到目前为止所拥有的

def div(x):
    A=[]
    for i in range(1,x):
        if x%i==0:
            A.append(i)
    print(A)
div(45)
div(50)
n=0
for i in range(1, min(45, 50)+1): 
    if 45%i==50%i==0: 
        n+=1
print(max(n))
我尝试了多种逻辑,但最终都出现了一些错误。这是最合适的。我还是一个新手,所以一个简单的程序仍然在给我制造问题。这个问题只是为了测试我们的逻辑构建。

您的行n=0将名称n定义为整数。然后稍后尝试执行printmaxn

换句话说,您尝试计算单个整数的最大值。这就是引发错误消息的原因。给出max的两种有效用法:单个iterable(如列表)或多个值(如整数)。不允许使用单个整数

我不确定你的意图是什么,所以我不能建议对你的计划做一点小的改变。我建议你改变你的方法。相反,您可以这样做:

对两个整数中的每一个调用div,生成两个除数列表。 将每个列表转换为一个。 计算这两个集合的交集请参见上一个链接以了解执行此操作的操作。现在有了一组公约数。 在该交点集中找到最大值。由于集合是一个iterable,max将处理该集合。得到的最大值就是最大公约数。 代码应该很容易编写。如果你有困难,展示你的尝试并寻求更多的帮助


顺便说一下,您的div函数不正确。范围的上限应为x+1,以将数字x作为除数包含在任何整数本身的除数中。div应该将列表返回给调用例程,而不是打印列表。

您得到了什么错误?'int'对象在第13行中不可编辑请思考当n是一个数字时maxn会做什么。你的目的是什么?max5会返回什么?
TypeError                                 Traceback (most recent call last)
<ipython-input-8-80ad9173d3fa> in <module>
     11     if 45%i==50%i==0:
     12         n+=1
---> 13 print(max(n))

TypeError: 'int' object is not iterable