Python函数为错误计算提供了最高公因数

Python函数为错误计算提供了最高公因数,python,function,Python,Function,我创建了一个函数来计算2个数字的HCF。当我使用参数24和36时,我得到了正确的答案,但当我使用不同的数字时,我得到了一个错误: ValueError:max()arg是一个空序列 代码如下: def computeHCF(num1,num2): lst1 = [] lst2 = [] for i in range(2,num1+1): if i > 1: if num1 % i == 0: lst1.append(i) for i in r

我创建了一个函数来计算2个数字的HCF。当我使用参数24和36时,我得到了正确的答案,但当我使用不同的数字时,我得到了一个错误: ValueError:max()arg是一个空序列 代码如下:

def computeHCF(num1,num2):
lst1 = []
lst2 = []
for i in range(2,num1+1):
    if i > 1:
        if num1 % i == 0:
            lst1.append(i)
for i in range(2,num2+1):
    if i > 1:
        if num2 % i == 0:
            lst2.append(i)

HCF = []
for e1,e2 in zip(lst1,lst2):
    if e1 == e2:
         HCF.append(e1)
HCF = max(HCF)
print('The HCF is :',HCF)
我知道还有其他解决方案,但我尝试了实现这种方法。
编辑:忽略此处的缩进。我知道哪里的逻辑不正确。

Zip会同时在两个列表上迭代,因此只有当因子在
lst1
lst2
中处于同一位置时,才会找到HCF。相反,您只想在这两个列表中找到公共元素。请尝试以下操作:

HCF=[]
对于lst1中的e1:
如果lst2中有e1:
附加(e1)
或者,从:

HCF=list(集合(lst1).交叉口(lst2))
这适用于24和36,因为它们的因子是一致的。我猜你得到的答案是4

24: 2, 3, 4, 6, 8, 12
36: 2, 3, 4, 9, 12, 18

你到底为什么要以这种方式实现这一点?这可能是我见过的性能最低的HCF(也称为GCD)算法。。。只是好奇为什么你会选择这种方法?请分享整个错误消息,以及一个。你从那个错误中理解了什么?我想知道的是与@JoranBeasley相同的事情,但有一个关键的区别:为什么会有这样一个看似不直观且复杂的解决方案?当我想到GCD时,我想到的第一个最简单的方法是构建两个集合,每个集合包含一个数字的除数,然后返回两个集合交集的最大值。这是3行代码。