更新於 2024/12/13閱讀時間約 3 分鐘

不間斷 Python 挑戰 Day 8 - random()模組 (2)

透過random模組生成的隨機數並非是真正完全隨機的,而是可以被重現的,因此這個特徵也被稱為是偽隨機(pseudo-random),而重現隨機數的方式便是透過設定相同的種子(seed),或是設定隨機數生成器的狀態(state)來達成。
設定隨機數生成器種子的方式如下:
random.seed([a])
  • 當a被省略時,每次調用random模組的方法生成的數就會是隨機的。
  • 當a被設定後,每次使用random.seed(a)後調用random模組的方法生成的數就會是同一個。
我們也可以在調用random模組前先回傳隨機數生成器的狀態:
rand_state = random.getstate()
並在下次調用random模組前設定下相同的狀態,便可以得到相同的隨機結果:
random.setstate(rand_state)
以下範例展示利用設定相同的種子,在每個for迴圈中都產生同樣的亂數:
# import random module import random # random seed for i in range(5): random.seed(1) rand_int = random.randint(1, 10) print(f"loop {i}: {rand_int}")
執行結果:
loop 0: 3 loop 1: 3 loop 2: 3 loop 3: 3 loop 4: 3
以下範例則是random.getstate()與setstate()的用法,
# save current state of the generator rand_state = random.getstate() # generate random integer rand_int = random.randint(1, 10) print(f"Generate a random integer: {rand_int}") # generate another random integer rand_int = random.randint(1, 10) print(f"Generate another random integer: {rand_int}") # generate random integer after restoring random state random.setstate(rand_state) rand_int = random.randint(1, 10) print(f"Generate a random integer after restoring state: {rand_int}")
執行結果:
Generate a random integer: 10 Generate another random integer: 2 Generate a random integer after restoring state: 10

程式範例

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.