天天看點

python随機産生10個随機數_Python中處理随機數(幹貨)

閱讀本文需要3.5分鐘

關于在Python中處理随機性的概述,隻使用标準庫和CPython本身中内置的功能。

在0.0和1.0之間生成随機浮點數

這個random.random()函數在間隔[0.0,1.0]中傳回一個随機浮點。這意味着傳回的随機數總是小于右端點(1.0).這也被稱為半開放範圍:>>> import random

>>> random.random()

0.11981376476232541

>>> random.random()

0.757859420322092

>>> random.random()

0.7384012347073081

在x和y

這是如何在Python中的兩個端點之間生成一個随機整數的方法。random.randint()功能。這跨越了整個[x,y]間隔,可能包括兩個端點:>>> import random

>>> random.randint(1, 10)

10

>>> random.randint(1, 10)

3

>>> random.randint(1, 10)

7

帶着random.randrange()函數可以排除間隔的右側,這意味着生成的數字總是位于[x,y]内,并且它總是小于右側的端點:>>> import random

>>> random.randrange(1, 10)

5

>>> random.randrange(1, 10)

3

>>> random.randrange(1, 10)

4

産生随機浮動x和y

如果需要生成位于特定[x,y]間隔内的随機浮點數,則可以使用random.uniform:>>> import random

>>> random.uniform(1, 10)

7.850184644194309

>>> random.uniform(1, 10)

4.00388600011348

>>> random.uniform(1, 10)

6.888959882650279

從清單中選擇随機元素

要從非空序列(如清單或元組)中選擇一個随機元素,可以使用Python的random.choice:>>> import random

>>> items = ['one', 'two', 'three', 'four', 'five']

>>> random.choice(items)

'five'

>>> random.choice(items)

'one'

>>> random.choice(items)

'four'

這适用于任何非空序列,如果序列為空,則會出現異常。

随機化元素清單

可以使用random.shuffle。這将修改序列對象,并将元素的順序随機化:>>> import random

>>> items = ['one', 'two', 'three', 'four', 'five']

>>> random.shuffle(items)

>>> items

['four', 'one', 'five', 'three', 'two']

如果你不想修改原本的,你需要先複制一份,然後在随機。屬性建立Python對象的副本。copy子產品。

采摘n元素清單中的随機樣本

随機抽樣n序列中的唯一進制素,使用random.sample。它執行随機抽樣而不進行替換:>>> import random

>>> items = ['one', 'two', 'three', 'four', 'five']

>>> random.sample(items, 3)

['one', 'five', 'two']

>>> random.sample(items, 3)

['five', 'four', 'two']

>>> random.sample(items, 3)

['three', 'two', 'five']

生成密碼安全随機數

如果出于安全目的需要加密安全随機數,使用random.SystemRandom它使用加密安全的僞随機數生成器。

執行個體SystemRandom類的函數提供大多數随機數生成器操作。

下面是一個例子:>>> import random

>>> rand_gen = random.SystemRandom()

>>> rand_gen.random()

0.6112441459034399

>>> rand_gen.randint(1, 10)

2

>>> rand_gen.randrange(1, 10)

5

>>> rand_gen.uniform(1, 10)

8.42357365980016

>>> rand_gen.choice('abcdefghijklmn')

'j'

>>> items = ['one', 'two', 'three', 'four', 'five']

>>> rand_gen.shuffle(items)

>>> items

['two', 'four', 'three', 'one', 'five']

>>> rand_gen.sample('abcdefghijklmn', 3)

['g', 'e', 'c']

注意SystemRandom并不保證在所有運作Python的系統上都可用

Python 3.6+-secrets子產品:

如果您正在使用Python 3,并且你的目标是生成加密安全的随機數,那麼一定要檢查secrets子產品。這個子產品可以在Python3.6(及以上)标準庫中獲得。這使得安全令牌的生成變得很友善。

以下是幾個例子:>>> import secrets

# 生成安全令牌:

>>> secrets.token_bytes(16)

b'\xc4\xf4\xac\x9e\x07\xb2\xdc\x07\x87\xc8 \xdf\x17\x85^{'

>>> secrets.token_hex(16)

'a20f016e133a2517414e0faf3ce4328f'

>>> secrets.token_urlsafe(16)

'eEFup5t7vIsoehe6GZyM8Q'

# 從序列中随機選擇一個元素:

>>> secrets.choice('abcdefghij')

'h'

# Securely compare two strings for equality

# (Reduces the risk of timing attacks):

>>> secrets.compare_digest('abcdefghij', '123456789')

False

>>> secrets.compare_digest('123456789', '123456789')

True

您可以了解更多關于secrets子產品在Python 3文檔中.