2013-07-23 3 views
0

N 루프에서 다른 임의의 순서를 생성하려고했지만 파이썬 같은 시퀀스를 생성하는 것으로 보인다. 다음과 같은 코드가 올바르게 작성 되었습니까? 여기파이썬 임의로 생성 된 주문은 동일합니다

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

많은 정보가 여기에 있습니다. 함수 나 들여 쓰기에 들여 쓰기가 없지만, 괜찮다고 가정하면 매번 시드를 재설정하므로 결과가 동일합니다. 다른 결과를 얻으려면 시드를 한 번 설정해야합니다. – Jiminion

답변

2

문제는이 성명에서입니다 : 이것은 무엇을

random.seed(0x87654321) 

는 난수 발생기와 같은 임의의 데이터를 사용하기위한 "씨"값을 제공한다. 시드가 셔플 함수을 호출하기 바로 전에 하드 코드 된 이므로 난수 생성기는 매번 동일한 방식으로 작동합니다.

문제를 해결하려면 (그리고 실행할 때마다 다른 결과가 나옴) 간단히이 문장을 제거하십시오. 당신이 씨앗을 초기화하려면 while 루프의 외부에 그 일을 한 번 초기화 :

if __name__ == '__main__':  
    cnt = 0 
    random.seed(0x87654321) 
    while cnt < 3:  
     funcA() 
     time.sleep(5) 
     cnt += 1 
1

을 당신은 상수 난수 생성기를 파종하고 있습니다. 동일한 시드를 가진 난수 생성기에 대한 동일한 호출 시퀀스는 동일한 출력을 생성합니다. 그것이 원하는 것이 아니라면 seed으로 전화하지 마십시오.

1

셔플 전 항상 random.seed()를 한 번만 호출하십시오.

관련 문제