找到了解决方案,但仍然得到了一个索引

2024-09-30 14:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经写了这个python代码。当我运行它时,我在最后得到一个索引错误; 我不知道为什么。我想知道是否有人能帮我。你知道吗

问题是找到一个最小的正数,它可以被所有的整数整除 数字从1到20。我的分析是正确的,但仅仅是最后的代码给我带来了困难。你知道吗

def leastCommonDenominator(num1, num2):
    '''
        Returns the least common denominator of two numbers
    '''
    num2List = range(1,num2+1)
    if num1 < num2:
        for i in num2List:
            if (num1*num2List[i]) % num2 == 0:
                return num1*num2List[i]
    num1List = range(1, num1+1)
    if num2 < num1:
        for i in num1List:
            if (num2*num1List[i]) % num1 == 0:
                return num2*num1List[i]
    else:
        return num1

def leastNum():
    '''
        Prints the least number divisible
    '''
    myList = range(1,4)
    print myList
    num = 1
    for i in myList:
        num = leastCommonDenominator(num, myList[i])
        print num    

def main():
    leastNum()

Tags: the代码inforreturnifdefrange
2条回答

定义myList时,其值为(如您所知):

myList = [1, 2, 3]

当您迭代时,您正在循环遍历每个元素(1、2、3),但是当您调用leastCommonDenominator时,您使用的是列表的索引,而不是元素本身(即,在第一次遍历中,您没有调用myList的第一个元素,而是调用myList[1],这是第二个元素。这导致在最后一个过程中出现IndexError,因为myList[3]引用的是列表中的第四个元素,我们可以看到它不存在(因为range的值中不包含上界)。为了修复,您应该能够执行以下操作:

num = leastCommonDenominator(num, i)

当您像现在这样使用for循环时,您可以简单地使用值本身。如果您想引用元素的位置,可以使用enumerate,它返回一个值的索引/位置和值本身(这是供参考的-这里不需要它,我不相信:))。例如:

for index, i in enumerate(myList):
    num = leastCommonDenominator(num, myList[index])

你也会得到同样的结果。你知道吗

使用

for i in myList:
    num = leastCommonDenominator(num,i)
    print num

而不是

for i in myList:
    num = leastCommonDenominator(num,myList[i])
    print num

这里我是列表。它不超过元素。所以呢你不能用myList[i],另一方面你可以写

for i in range(0,len(myList)):
    num=leastCommonDenominator(num,myList[i])

相关问题 更多 >

    热门问题