1

これが私の最初の投稿です。私はPythonとプログラミング全般に慣れていないので、どこが間違っていたのかわかりません。これは私がプロジェクトオイラーの問題#52で思いついた解決策です(おそらくそれが最善の方法でもないことを私は知っています)。このコードに関する私の問題は、正しい答えに到達したときにwhileステートメントが壊れないことです。numを正しい答えで始めた場合にのみ、それをキャッチして答えを返します:142857ですが、他のもので初期化すると、142857を過ぎてもカウントされ続けます。奇妙なことに、同じ方法を使用して別の答えに答えました。オイラー問題とそれはうまく機能します。なぜこれがここで起こっているのか誰か教えてもらえますか?ありがとう!

def digits(number):
    return [int(x) for x in str(number)]

def same_digits():
    num = 1
    x2 = sorted(digits(num*2))
    x3 = sorted(digits(num*3))
    x4 = sorted(digits(num*4))
    x5 = sorted(digits(num*5))
    x6 = sorted(digits(num*6))

    while x2 != x3 != x4 != x5 != x6:
        num += 1
    print num
4

3 に答える 3

4

変数x2などはループ内で変更されないため、常に初期値を保持します。変更時に値を再計算する場合numは、そのコードをループに移動する必要があります。

さらに、ここでは比較演算子チェーンを使用しています。表現

x2 != x3 != x4 != x5 != x6

と同等です

x2 != x3 and x3 != x4 and x4 != x5 and x5 != x6

これはおそらくあなたが望むものではありません。

于 2012-04-11T15:59:20.127 に答える
2

はすべて同じ値であるため、whileループが中断することはありません。ループ内でx2,x3,x4,x5,x6のみ変更されます。num

さらに、x2 != x3 != x4 != x5 != x6魚のように見えます。すべての番号が異なるかどうかを確認するには、次のことを試してください。

len(set([x2,x3,x4,x5,x6])) != 5

setは一意の値のみを取り、このlen「セット」のサイズをカウントします。それらをリストに入れると、次のRようになります。

len(set(R)) != 5

5リストに要素以上のものがある場合に非常に便利です!

于 2012-04-11T15:59:06.713 に答える
1

xiwhileループの引数は変更していないため、比較は変更されません。

于 2012-04-11T15:59:14.363 に答える