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

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

更新於 發佈於 閱讀時間約 7 分鐘

當我們需要在程式中模擬或實作一些隨機發生的事件,例如模擬猜拳、丟骰子的結果,便需要程式可以根據開發者輸入的數值範圍、型態等,隨機產生一個結果,而Python的random()函數便是用於實現這個功能。

調用random()函數

使用import導入random模組。

import random

產生隨機整數

以下幾個方法可以產生指定區間的隨機整數:

randrange([start, ]stop[, step])
  • start:指定區間的起始值,若沒有輸入則預設為0。
  • stop:指定區間的結束值,不包含stop。
  • step:區間遞增的間隔,若沒有輸入則預設為1。
randint(a, b)
  • 產生一個[a, b]區間內的隨機整數。

例如,以下的程式碼會隨機產生1到9之間的整數:

# generate a random integer between 1 and 9
rand_int = random.randrange(1, 10, 1)
print(rand_int)

# generate a random interger between 1 and 9
rand_int = random.randint(1, 9)
print(rand_int)

輸出結果每個人會不同:

5
1

產生隨機浮點數

以下幾個方法可以產生隨機浮點數:

random.random()
  • 產生一個[0.0, 1.0)區間內的隨機浮點數。
random.uniform(a,b)
  • 產生一個[a, b](如果a ≤ b)或[b, a](如果b < a)區間內的隨機浮點數。
random.expovariate(λ)
  • 產生一個服從母數為λ的指數分布區間內的隨機浮點數。
random.gauss(μ, σ)
random.normalvariate(μ, σ)
  • 產生一個平均為μ、標準差為σ的常態分布區間內的隨機浮點數。

以下範例產生隨機浮點數:

# generate a random floating point between [0.0, 1.0)
rand_float = random.random()
print(rand_float)

# generate a random floating point corresponding to an uniform distribution between [0, 1]
rand_float = random.uniform(0, 1)
print(rand_float)

# generate a random floating point corresponding to a exponential distribution with lambda = 0.1
rand_float = random.expovariate(0.1)
print(rand_float)

# generate a random floating point corresponding to a gaussian distribution with mean = 0 and standard deviation = 1
rand_float = random.gauss(0, 1)
print(rand_float)

# generate a random floating point corresponding to a normal distribution with mean = 0 and standard deviation = 1
rand_float = random.normalvariate(0, 1)
print(rand_float)

輸出結果同樣每個人會不同:

0.9994071238802772
0.32634858726972726
25.89070912867779
-0.010389111766063115
-0.564451531564574

產生隨機序列

和隨機整數及隨機浮點數相同,我們也可在一組序列資料中隨機取出一筆資料或資料集合:

random.shuffle(x)
  • 使序列資料x重新隨機排列。
random.choice(x)
  • 從序列資料x中隨機取出一個元素。
random.choices(x, weights, cum_weights, k)
  • 從序列資料x中隨機取出k個元素,並可設定每個元素取出的權重(weights)或累積權重(cum_weights)。
random.sample(x, k)
  • 從序列資料x中隨機取出k個元素。

以下範例以之前在串列提過的例子,展示隨機序列的結果:

# random list
cities = ["台北", "桃園", "新竹", "台中", "台南"]
random.shuffle(cities)
print(cities)

# random item from a list
rand_city = random.choice(cities)
print(rand_city)

# random items from a list with different weights
rand_city = random.choices(cities, [10, 20, 30, 40, 50], k=2)
print(rand_city)

# random sample from a list
rand_city = random.sample(cities, 2)
print(rand_city)

輸出結果也是每個人會不同:

['台南', '桃園', '新竹', '台北', '台中']
台南
['台北', '台南']
['台中', '新竹']

程式範例

https://github.com/wjweng/marathon_python/blob/master/Day1_to_25/marathon_python_day7.py

avatar-img
Wei-Jie Weng的沙龍
47會員
36內容數
留言
avatar-img
留言分享你的想法!
Wei-Jie Weng的沙龍 的其他內容
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。