1

私は Project Euler で python (私は初心者です) を改善するための課題を行っており、問題 9を実行しようとしています。

vara = lista[-1]
varb = listb[-1]
varc = listc[-1]

while not(vara < varb < varc):
listb.pop(-1)
lista.pop(-1)
lista.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
    print vara, varb, varc
else:
listc.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
    print vara, varb, varc
else:
    listb.pop(-1)
    if ((vara * vara) + (varb * varb) == varc * varc):
        print vara, varb, varc
    else:
        lista.pop(-1)

lista/listb/listc に 1 ~ 1000 の値を持たせるために多くの方法を試しましたが、どれも実際には機能していないようです

lista = range(1, 1000)
lista = range[1, 1000]

4

3 に答える 3

5

1 から 1000 までの値を生成するには、終了値を 1000 + 1、つまり 1001として指定する必要があります。

Python 2.x

# python 2.x
liasta = range(1, 1001)

Python 3.x

# python 3.x
liasta = list(range(1, 1001))

1 から 1000 までの値のリストが表示されます。

range()は、半閉間隔を使用します。つまり、生成する値のリストに最初の値を含めますが最後の値は除外します。開始値を指定しない場合、range()デフォルトで になることに注意してください01増分値を指定することもできます。特に指定しない限り、デフォルトは です。

ドキュメントページからの 3 つの例:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
于 2012-07-23T20:58:37.293 に答える
1

あなたのコードにこれを使用してください:

lista = range(1, 1001)
listb = list(lista)
listc = list(lista)

こんなことしないで:

lista = listb = listc = range(1, 1001)

あなたpopのすべてが同じリストで機能するからです。

于 2012-07-23T21:04:18.000 に答える
0

あなたの質問は、範囲内の数値のリストを作成する方法を尋ねていますが、私はあなたに質問したいと思います:

実際に 3 つの数字のリストが必要ですか、それとも解を得るために考えられる値を調べるだけですか?

あなたが求めている答えにたどり着くことができても、それはあなたが向かっている方法で表現するのが最善ではないからです。例えば:

for c in range(1, 1001):
    for b in range(1, c):
        for a in range(1, b):
             if is_pythagorean_triple(a, b, c):
                 ...

def is__pythagorean_triple(a, b, c):
    ...

リストを作成しません (少なくとも、考えなければならないことはありません)。別の質問は、なぜa範囲が までしかないのbですか?

于 2012-07-23T21:20:11.887 に答える