iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Software Development

跟著 OXXO 一起學 Python系列 第 38

( Day 18.3 ) Python 隨機數 random

  • 分享至 

  • xImage
  •  

Python 的標準函式「random」提供了產生隨機數的方法,不論是隨機整數、隨機浮點數,或要從串列中隨機取值,都能透過 random 標準函式來實現。

原文參考:隨機數 random

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

random 常用方法

下方列出幾種 random 模組常用的方法 ( 參考 Python 官方文件:random ):

方法 參數 說明
seed() x 設定隨機數的種子
random() 產生一個 0.0~1.0 之間的隨機浮點數
uniform() x, y 產生一個 x~y 之間的隨機浮點數
randint() x, y 產生一個 x~y 之間的隨機整數
randrange() x, y, step 產生一個間隔為 step,x~y 之間的隨機整數
choice() seq 從字串、串列或 tuple 中,隨機取出一個項目
choices() seq, k 從字串、串列或 tuple 中,隨機取出 k 個項目 ( 可能重複 )
sample() seq, k 從字串、串列或 tuple 中,隨機取出 k 個項目 ( 不會重複 )
shuffle() seq 將原本的串列順序打亂

import random

要使用 random 必須先 import random 模組,或使用 from 的方式,單獨 import 特定的類型。

import random
from random import sample

seed(x)

Python random 模組所產生的隨機數並不是真正的「隨機」,而是演算法根據「種子 seed」產生的一組數字,預設這個 seed 以電腦系統的時間為主,因此如果種子相同,就會產生相同的隨機數,以下方的程式為例,種子如果都是 1,產生的隨機數就一模一樣。

import random
random.seed(1)
print(random.random())   # 0.13436424411240122
random.seed(1)
print(random.random())   # 0.13436424411240122
random.seed(1)
print(random.random())   # 0.13436424411240122

random()

random.random() 使用後會產生一個 0.0~1.0 之間的隨機浮點數。

import random
print(random.random())   # 0.6958328667684435

uniform(x, y)

random.uniform(x, y) 使用後會產生一個 x~y 之間的隨機浮點數。

import random
print(random.uniform(3,5))   # 3.691400829417505

randint(x, y)

random.randint(x, y) 使用後會產生一個 x~y 之間的隨機整數。

import random
print(random.randint(2,10))    # 7

randrange(x, y, step)

random.randrange(x, y, step) 使用後會產生一個 x~y 之間的隨機整數,step 預設為 1,表示要間隔多少數字,例如下方的程式將 step 設定為 2,取出的隨機數就都會是偶數。

import random
print(random.randrange(2,10,2))   # 6

random.randrange 也可以只設定一個數字,表示 0~這個數字之間的隨機整數。

import random
print(random.randrange(10))    # 9

choice(seq)

random.choice(seq) 可以從一個字串、串列或 tuple 中 ( 有順序的物件 ),隨機取出一個項目。

import random
print(random.choice([1,2,3,4,5]))  # 2  串列
print(random.choice((1,2,3,4,5)))  # 5  tuple
print(random.choice('12345'))      # 1  字串

choices(seq, k)

random.choices(seq, k) 可以從一個字串、串列或 tuple 中 ( 有順序的物件 ),隨機取出 k 個項目,取出的項目可能會重複,並將這 k 個項目組成一個新的串列。

import random
print(random.choices([1,2,3,4,5],k=2))  # [2, 1]
print(random.choices((1,2,3,4,5),k=3))  # [3, 1, 1]
print(random.choices('12345',k=4))      # ['2', '5', '4', '4']

sample(seq, k)

random.sample(seq, k) 可以從一個字串、串列或 tuple 中 ( 有順序的物件 ),隨機取出 k 個項目,每個項目不會重複,並將這 k 個項目組成一個新的串列,k 一定要填入數字,且不能大於物件的長度 ( 例如串列的長度是 4,k 就不能大於 4 )。

import random
print(random.sample([1,2,3,4,5], k=4))   # [2, 5, 3, 4]
print(random.sample((1,2,3,4,5), k=4))   # [2, 1, 5, 4]
print(random.sample('12345', k=4))       # ['2', '5', '3', '1']

shuffle(list) {a9}

random.shuffle(seq) 使用後,會將原本的「串列」順序打亂 ( 不支援 tuple,因為 tuple 不能被修改 )。

a = [1,2,3,4,5]
print(a)           # [1,2,3,4,5]
random.shuffle(a)
print(a)           # [3, 2, 5, 4, 1]

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 18.2 ) Python 數學統計函式 statistics
下一篇
( Day 19.1 ) Python 日期和時間 datetime
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言