2016-10-21 8 views
-1

©異なる数字が必要です。範囲(10)の小さな数字を書いていますが問題はありませんが、大きな数字を書くとうまくいきません。単純なLOTTERYアルゴリズムon PYTHON

import random 
arr=[] 

for i in range(25): 
    a=random.randint(1,30) 
    if a in arr: 
     b=random.randint(1,30) 
     arr.append(b) 
    if a not in arr: 
     arr.append(a) 
arr.sort() 
print(arr[0:]) 
+0

あなたはそれが永遠に取る意味ですか?予期せぬことを繰り返すことはありません。どのような大きな価値を試しましたか? –

+0

あなたは乱数を生成し、その中に入っているかどうかを確認し、次に新しい乱数を生成しようとします。これはランダムな時間曲線を持つことを意味します。 ** MAYBE **あなたがロトを勝ち取った場合、あなたは配列にまだない乱数を生成しますが、あなたが配列をいっぱいにすると、その確率は下がります。なぜあなたは '1 - > n '個の数字で配列を塗りつぶし、それをシャッフルしてから、必要な数だけ多くの数値を浮かせますか? –

答えて

1

まあ、宝くじのサンプルのためにすでにrandom.shuffle機能で実装されているFisher-Yates shuffleを、使用する必要があります。使用しているO(n )アルゴリズムの代わりにO(n)です。

0

あなたのメソッドの問題は、aがarrにある場合に、別の乱数bをaと同じにすることができるということです。

私は次のメソッドを使用します:あなたが本当にループをしたい場合は

random.sample(xrange(1,30), 25) 

を、それは次のようにする必要があります:

arr=[] 
for i in range(25): 
    a=random.randint(1,30) 
    while a in arr: 
     a=random.randint(1,30) 
    arr.append(a) 
arr.sort() 
print(arr[0:]) 
関連する問題