1

私はこの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()
4

2 に答える 2

2

使用する

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

それ以外の

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

ここで、i はリストの要素に対する反復子です。要素のインデックスに対するものではありません。したがって、myList[i] は使用できません。一方、次のように書くこともできます。

for i in range(0,len(myList)):
    num=leastCommonDenominator(num,myList[i])
于 2012-11-01T06:20:03.727 に答える
2

を定義するmyListと、その値は(ご存知のように)次のようになります。

myList = [1, 2, 3]

反復するときは、各要素 (1、2、3) を循環しますが、 を呼び出すときは、要素自体ではなく、リストのインデックスleastCommonDenominatorを使用します (つまり、最初のパススルーでは、の最初の要素を呼び出すと、2 番目の要素であるが呼び出されます。これにより、がリストの 4 番目の要素を参照しているため、最後のパスで が発生します。値の上限)修正するには、次のようにする必要があります。myListmyList[1]IndexErrormyList[3]range

num = leastCommonDenominator(num, i)

ループをそのまま使用forする場合は、単純に値自体を使用できます。要素の位置を参照したい場合はenumerate、値のインデックス/位置と値自体の両方を返す を使用できます(これは参考までに-ここでは必要ありません:) )。例えば:

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

そして、同じ結果が得られます。

于 2012-11-01T05:37:26.747 に答える