2012-01-25 52 views
9

Tôi đang sử dụng để nhập random.randrange. Tôi sẽ thực hiện một số from random import Random để phát hiện lỗi từ bây giờ.Công cụ random.Random.seed của python hoạt động như thế nào?

Đối với một trò chơi liên quan đến thế hệ thủ tục (nope, không phải là một bản sao Minecraft: p) Tôi muốn giữ một vài máy phát điện số giả ngẫu nhiên khác nhau:

  • một cho thế hệ của thế giới (phong cảnh, nhiệm vụ, v.v.),
  • một cho các sự kiện ngẫu nhiên có thể xảy ra trên thế giới (chẳng hạn như thiệt hại trong khi chiến đấu).

Lý do là tôi muốn có thể tạo lại mẫu đầu tiên, vì vậy tôi không muốn thứ hai gây trở ngại.

Tôi nghĩ rằng random.Random đã được thực hiện cho điều đó. Tuy nhiên, có điều gì đó khiến tôi khó hiểu:

import random 
rnd = random.Random() 
rnd.seed(0) 
print [random.randrange(5) for i in range(10)] 
rnd.seed(0) 
print [random.randrange(5) for i in range(10)] 

sản xuất hai trình tự khác nhau. Khi tôi làm rnd = random thì mọi thứ hoạt động như mong đợi, nhưng tôi cần một số máy phát điện.

Tôi đang thiếu gì?

+1

Nó thực sự đã cho tôi một vài phút để phát hiện ra điều đó. Đừng cảm thấy xấu xảy ra với tất cả chúng ta, vui vì nó đã được giải quyết :) –

Trả lời

13

Nó hoạt động gần như chính xác như bạn đã cố gắng nhưng rnd.seed() áp dụng cho các đối tượng rnd

chỉ cần sử dụng

rnd = random.Random(0) # <<-- or set it here 
rnd.seed(7) 
print [rnd.randrange(5) for i in range(10)] 

hoặc bằng cách đặt hạt giống toàn cầu, như thế này:

random.seed(7) 
print [random.randrange(5) for i in range(10)] 
4

Chuyển hạt giống đến hàm tạo của Random:

>>> import random 
>>> rnd = random.Random(0) 
>>> [rnd.randint(0, 10) for i in range(10)] 
[9, 8, 4, 2, 5, 4, 8, 3, 5, 6] 
>>> rnd = random.Random(0) 
>>> [rnd.randint(0, 10) for i in range(10)] 
[9, 8, 4, 2, 5, 4, 8, 3, 5, 6] 
>>> rnd = random.Random(1) 
>>> [rnd.randint(0, 10) for i in range(10)] 
[1, 9, 8, 2, 5, 4, 7, 8, 1, 0] 
Các vấn đề liên quan