iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
AI/ ML & Data

From Python Beginner To AI Engineer系列 第 20

能不能隨機產生一個數字?

  • 分享至 

  • xImage
  •  

隨機套件

在上一篇的練習題中,我們寫了一個猜數字遊戲,但是祕密數字是寫死的(俗稱哈扣 Hardcode)。如果能隨機產生數字,會使這個遊戲更具有挑戰性。這時可以借助 random 套件來執行:

>>> import random
>>> random.randint(1, 99)
18

可以嘗試多執行幾次,會發現每次結果都不一樣。這裡用到 import 關鍵字,這是用來要求程式匯入某個套件的語法。什麼是套件呢?套件就是別人寫好的程式,並包裝成函式,方便開發者重複利用,減輕大家重造輪子的工作。

在這裡匯入的是 Python 內建的 random 套件,是個專門用來處理與隨機性相關的套件。透過 random.randint() 的方式,可以調用 random 套件裡面的 randint() 函式,代表隨機產生一個整數的意思。

因為這是官方的套件,所以在官方網站有非常詳細的說明文件

傳入 randint() 函式的第一個參數是隨機數可能的最小值,第二個是可能的最大值,因此 random.randint(1, 99) 代表產生一個 1 到 99 之間的隨機數,包含 1 跟 99。

除了產生整數以外,還有 random.random() 這個函式,不需要任何參數,會產生一個介在 0 到 1 之間的浮點數:

>>> random.random()
0.5692038748222122

如果想要產生的浮點數範圍不在 0 到 1 之間,可以使用 random.uniform() 並帶入兩個參數來指定範圍:

for i in range(5):
    print(random.uniform(3.141, 9.487))
8.232174078173292
3.5414758916994034
3.8893120934965535
7.970067675415205
6.137868315734036

隨機種子

在機器學習的實驗中,很注重實驗的結果是否能被重現,但若是程式涉及隨機性,那該怎麼重現呢?事實上,在程式裡面隨機數是根據某個種子來產生的,就像麥塊的地圖種子一樣,一樣的種子會產生一樣的地圖。在 Python 裡面,可以透過 random.seed() 來設定種子:

>>> random.seed(42)
>>> for i in range(5):
>>>     print(random.randint(1, 99))
82
15
4
95
36

將隨機種子設定為 42,這樣這格程式碼不管執行幾次,結果都是一樣的。

根據道格拉斯·亞當斯的小說《銀河便車指南》,42 是「生命、宇宙以及任何事情的終極答案」,因此很常看到有人把隨機種子設定為 42 來致敬這部作品。

自我練習

  1. 把猜數字遊戲的祕密數字改由隨機套件產生。
  2. 設計一個函式 my_randint(),在只使用 random.random() 的情況下,製作出 random.randint() 的效果。
  3. 嘗試研究官方的說明文件,產生大樂透中獎號碼,從 1 到 49 之間產生 6 個號碼與 1 個特別號。

完整的程式碼放在此 Colab 裡面供各位參考。


上一篇
如何直接跳出迴圈?
下一篇
如何操作多個變數?
系列文
From Python Beginner To AI Engineer31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言