0

N ループで別のランダムな順序を生成しようとしましたが、python は同じシーケンスを生成するようです。以下のコードは、期待どおりに正しく記述されていますか?

import random
import time

def funcA():
    nodeCount = 10               
    order = range(0, nodeCount) 

    random.seed(0x87654321)         
    random.shuffle(order)    

    print("Shuffle order - ")
    print(order)


if __name__ == '__main__':

    cnt = 0
    while cnt < 3:     
#         random.seed(0x87654321) 
        funcA()
        time.sleep(5) 
        cnt += 1
4

3 に答える 3

2

ここでの問題は、次のステートメントにあります。

random.seed(0x87654321)  

これが行うことは、乱数ジェネレーターがランダム データとして使用する「シード」値を提供することです。シャッフル関数の各呼び出しの直前にシードがハードコードされるため、乱数ジェネレーターは毎回同じように動作します。

この問題を修正する (そして実行するたびに異なる結果を得る) には、このステートメントを削除するだけです。whileシードで初期化する場合は、ループの外で一度初期化します。

if __name__ == '__main__':    
    cnt = 0
    random.seed(0x87654321) 
    while cnt < 3:     
        funcA()
        time.sleep(5) 
        cnt += 1
于 2013-07-23T01:23:03.827 に答える
1

シャッフルの前に毎回ではなく、random.seed() を 1 回だけ呼び出します。

于 2013-07-23T01:25:22.200 に答える