2012-04-11 8 views
1

これは私の最初の投稿です。私はPythonの初心者で一般的なプログラミングなので、どこが間違っているのか分かりません。これはプロジェクトオイラーの問題#52を思いついた解決策です(私はそれがおそらく最良の方法ではないことも知っています)。このコードで私の問題は、正しい答えになるとwhile文が壊れないということです。それはそれをキャッチし、私が正しい答えでnumを始めた場合にのみそれを捕まえるでしょう:142857、しかし私は何か他のものでそれを初期化するとき、それは142857を直ちに数え続けます。奇妙なことは、オイラー問題とその1つはうまく動作します。誰もがなぜこれが起こっているのか教えてもらえますか?ありがとう! x2,x3,x4,x5,x6が全て同じ値であるので、ステートメントが停止しないうちに、

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 
+1

質問を削除しないでください - 他人には便利かもしれません。また、以下のすべての回答を無効にします。 – Hooked

+0

うん、私はそれを削除しようとした後、それを実現した。それを復元してくれてありがとうSven =) 申し訳ありません私はここで新しいです。 –

答えて

4

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

また、ここでは比較演算子の連鎖を使用しています。表現

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

おそらくあなたが望むものではありません
x2 != x3 and x3 != x4 and x4 != x5 and x5 != x6 

に相当します。

+0

andsは問題ではなかったが、最初の部分は問題だった。ありがとう –

+0

@JenCamara:条件も間違っている、私を信じています。 –

+0

それはなぜ機能するのですか? –

2

whileループが壊れることはありません。ループ内ではnumだけが変更されます。

さらに、x2 != x3 != x4 != x5 != x6は怪しいようです。すべての番号が異なっているかどうかを確認するには、試してみてください。

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

setは、ユニークな値とlen数本のサイズ「設定を」取ります。さらに良いことに、リストに入れ、Rを言うと、これは次のようになります。

len(set(R)) != 5 

あなたのリストに複数5の要素を持っているときに、非常に便利!

+0

OPは実際には 'not x2 == x3 == x4 == x5 == x6'を必要とします。 –

+0

私の変数をwhileループの中に入れないのは問題でした。私が持っていた小切手は、意図どおりに動作します。あなたが記述した方法が、私が望んでいたことをするかどうかはわかりません。回答ありがとうございます。 –

1

whileループでxi引数を変更していないので、比較は決して変更されません。

関連する問題