2017-02-12 6 views
-1

このコードは最大ペアワイズ製品用ですが、テストしていますが、いくつかの問題が出てきました。私のランダムリストの値は常に同じですか?

import sys 
import random 
while True: 
    a=int(random.randrange(1,1000000,101)) 
    keys =[]  # keys is empety list 
    i=0 

    while i < a : 
     keys.append(int(random.randrange(1,10000,8))) 
     i=i+1 

    keys.sort() 
    print(keys[-1], keys[-2]) 
    x=keys[-1]*keys[-2] 
    print("the max is ",x) 

しかし、何らかの理由により、コードの出力は常に同じです。

9993 9993 
the max is 99860049 
9993 9993 
the max is 99860049 
9993 9993 
the max is 99860049 
9993 9993 
the max is 99860049 

なぜこのようなことが起こっているのか分かりませんが、説明は分かります。

+0

EUH 'keys'は同じです同様のサンプルを使用することを検討するためにPigeonhole principle


として知られています... –

答えて

0

リストがソートされているため、最大の数字が最後に表示されるため、これが起こっています。リスト・キーには数十万の数字が含まれていますが、可能なキーは1249個しかありません。(9993 - 1)/8 = 1249は、可能な限り最大数9993の2つのインスタンスを取得する可能性が非常に高いです。しかし、あなたのコード私は別の結果を得た1時間を走った:

9993 9993 
the max is 99860049 
9993 9993 
the max is 99860049 
9977 9969 #<-- Not 9993 
the max is 99460713 
9993 9993 
the max is 99860049 

これは、それは偶然に純粋にダウンしている方法を示しています、私はこれが助けを願って!

+0

今、エラーが消えるようにコードを少し変更しました'random.radint()'と 'random.randint()'と –

+0

あなたの助けを借りて –

0

問題は、あなたのaである100を言うためにあなたのハードコードならば、あなたはあなたの鍵が選択されている間、あなたは

>>> random.randrange(1,1000000,101) 
18181 
>>> random.randrange(1,1000000,101) 
835069 
>>> random.randrange(1,1000000,101) 
729524 
>>> 

としてあなたaを選択欲求行動

9945 9857 
the max is 98027865 
9905 9881 
the max is 97871305 
9969 9881 
the max is 98503689 
9977 9849 
the max is 98263473 
9977 9945 
the max is 99221265 
9713 9617 
the max is 93409921 
9993 9977 
the max is 99700161 
9929 9841 
the max is 97711289 
9881 9761 
the max is 96448441 
9953 9841 

を得る大きすぎます唯一のプールから

>>> len(range(1, 10000, 8)) 
1250 
>>> 

(多かれ少なかれ1つの)

あなたがその範囲(数回)内のすべての可能性のある数字を得るより頻繁にそれを(18181のような)より多くを取るときから選択する1250の異なる要素だけで、したがってあなたは常に同じ多くの試行で、その範囲(9993)で最大数を何度も取得することがほぼ保証されています。そのリストを並べ替えることで、結果が何度も結果として得られます。

これは、あなたが何をすべきか、代わりに

for _ in range(5): 
    a,b = random.sample(range(1,10000,8),2) 
    print(a,b) 
    print("the max is ",a*b) 

出力

2881 689 
the max is 1985009 
2329 6473 
the max is 15075617 
5953 7769 
the max is 46248857 
9905 3201 
the max is 31705905 
6897 4713 
the max is 32505561 
関連する問題