2012-11-01 34 views
1

我已經寫了這個Python代碼。當我運行它時,我最後得到一個索引錯誤; 我不知道爲什麼。我想知道是否有人可以幫助我。得到了一個解決方案,但仍然得到一個indexError

問題是要找到能被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() 

回答

2

當定義myList,其值是(如你知道):

myList = [1, 2, 3] 

當迭代,則通過每個元件(1,2,3),但是當循環你叫leastCommonDenominator,您使用的是列表的指數,而不是元素本身(即在第一次通過,你是不是調用的myList的第一個元素,你在呼喚myList[1],這是元素這導致了012因爲myList[3]指的是列表中的第四個元素,我們可以看到它不存在(因爲range不包含其值的上限),所以最終傳遞。爲了修復,你應該能夠做到這一點:

num = leastCommonDenominator(num, i) 

當您使用for圈像你這樣,你可以簡單地使用值本身。如果你想引用元素的位置,你可以使用enumerate,它返回一個值的索引/位置和值本身(這是更多的FYI - 你不需要它,我不相信: ))。例如:

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

而且你會得到相同的結果。

2

使用

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

,而不是

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

在這裏,我是Iterator在list.It的元素還沒有結束,你不能使用myList中elements.So指數[I] 。另一方面你可以寫

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