本文主要介紹Python的random模組的相關內容,具有一定藉鏡價值,需要的朋友可以參考下,希望能幫助大家。
random模組
用於產生偽隨機數
真正意義上的隨機數(或隨機事件)在某次產生過程中是按照實驗過程中表現的分佈機率隨機產生的,其結果是不可預測的,是不可見的。而計算機中的隨機函數是依照某一演算法模擬產生的,其結果是確定的,是可見的。我們可以這樣認為這個可預見的結果其出現的機率是100%。所以用計算機隨機函數所產生的「隨機數」並不隨機,是偽隨機數。
計算機的偽隨機數是由隨機種子根據一定的計算方法計算出來的數值。所以,只要計算方法一定,隨機種子一定,那麼產生的隨機數就是固定的。
只要使用者或第三方不設定隨機種子,那麼在預設情況下隨機種子來自系統時鐘。
Python的這個函式庫在底層使用通用的演算法,經過長久的考驗,可靠性沒得說,但絕對不能用於密碼相關的功能。
一、基本方法
#random.seed(a=None, version=2)<br>
初始化偽隨機數產生器。如果未提供a或a=None,則使用系統時間為種子。如果a是整數,則作為種子。
random.getstate()
傳回一個目前生成器的內部狀態的物件
random.setstate(state)<br>
傳入一個先前利用getstate方法獲得的狀態對象,使得生成器恢復到這個狀態。
random.getrandbits(k)
傳回一個不大於K位元的Python整數(十進位),例如k=10,則結果在0~2^10之間的整數。
二、針對整數的方法
#random.randrange(stop)<br>
random.randrange(start, stop[, step])
等同於choice(range(start, stop, step)),但並非實際建立range物件。
random.randint(a, b)
傳回一個a
三、針對序列類別結構的方法
random. choice(seq)
從非空序列seq中隨機選取一個元素。如果seq為空則彈出 IndexError異常。
random.choices(population, weights=None, *, cum_weights=None, k=1)
3.6版本新增。從population集群中隨機抽取K個元素。 weights是相對權重列表,cum_weights是累計權重,兩個參數不能同時存在。
random.shuffle(x[, random])
隨機打亂序列x內元素的排列順序。只能針對可變的序列,對於不可變序列,請使用下面的sample()方法。
random.sample(population, k)
從population樣本或集合中隨機抽取K個不重複的元素形成新的序列。常用於不重複的隨機抽樣。回傳的是一個新的序列,不會破壞原有序列。要從一個整數區間隨機抽取一定數量的整數,請使用sample(range(10000000), k=60)類似的方法,這非常有效且節省空間。如果k大於population的長度,則彈出ValueError異常。
四、真值分佈
#random模組最高階的功能其實在這裡。
random.random()
傳回一個介於左閉右開[0.0, 1.0)區間的浮點數
random.uniform( a, b)
傳回介於a和b之間的浮點數。如果a>b,則是b到a之間的浮點數。這裡的a和b都有可能出現在結果中。
random.triangular(low, high, mode)
傳回一個low
random.betavariate(alpha, beta)
β分佈。傳回的結果在0~1之間
random.expovariate(lambd)
指數分佈
random.gammavariate(alpha, beta)
伽瑪分佈
random.gauss(mu, sigma)<br>
高斯分佈
random.lognormvariate(mu, sigma)
對數常態分佈
random.normalvariate(mu, sigma)
常態分佈
random.vonmisesvariate( mu, kappa)
卡帕分佈
random.paretovariate(alpha)<br>
帕累托分佈
random.weibullvariate (alpha, beta)
五、可選擇的生成器
class random.SystemRandom( [seed])
使用os.urandom() 方法產生隨機數的類,由作業系統提供原始碼,不一定所有系統都支援
六、典型的例子
>>> random() # 随机浮点数: 0.0 <= x < 1.0 0.37444887175646646 >>> uniform(2.5, 10.0) # 随机浮点数: 2.5 <= x < 10.0 3.1800146073117523 >>> randrange(10) # 0-9的整数: 7 >>> randrange(0, 101, 2) # 0-100的偶数 26 >>> choice(['win', 'lose', 'draw']) # 从序列随机选择一个元素 'draw' >>> deck = 'ace two three four'.split() >>> shuffle(deck) # 对序列进行洗牌,改变原序列 >>> deck ['four', 'two', 'ace', 'three'] >>> sample([10, 20, 30, 40, 50], k=4) # 不改变原序列的抽取指定数目样本,并生成新序列 [40, 10, 50, 30] >>> # 6次旋转红黑绿*(带权重可重复的取样),不破坏原序列 >>> choices(['red', 'black', 'green'], [18, 18, 2], k=6) ['red', 'green', 'black', 'black', 'red', 'black'] >>> # 德州扑克计算概率Deal 20 cards without replacement from a deck of 52 playing cards >>> # and determine the proportion of cards with a ten-value >>> # (a ten, jack, queen, or king). >>> deck = collections.Counter(tens=16, low_cards=36) >>> seen = sample(list(deck.elements()), k=20) >>> seen.count('tens') / 20 0.15 >>> # 模拟概率Estimate the probability of getting 5 or more heads from 7 spins >>> # of a biased coin that settles on heads 60% of the time. >>> trial = lambda: choices('HT', cum_weights=(0.60, 1.00), k=7).count('H') >= 5 >>> sum(trial() for i in range(10000)) / 10000 0.4169 >>> # Probability of the median of 5 samples being in middle two quartiles >>> trial = lambda : 2500 <= sorted(choices(range(10000), k=5))[2] < 7500 >>> sum(trial() for i in range(10000)) / 10000 0.7958
下面是產生一個包含大寫字母A-Z和數字0-9的隨機4位驗證碼的程式
import random checkcode = '' for i in range(4): current = random.randrange(0,4) if current != i: temp = chr(random.randint(65,90)) else: temp = random.randint(0,9) checkcode += str(temp) print(checkcode)
#以下是產生指定長度字母數字隨機序列的程式碼:
#!/usr/bin/env python # -*- coding:utf-8 -*- import random, string def gen_random_string(length): # 数字的个数随机产生 num_of_numeric = random.randint(1,length-1) # 剩下的都是字母 num_of_letter = length - num_of_numeric # 随机生成数字 numerics = [random.choice(string.digits) for i in range(num_of_numeric)] # 随机生成字母 letters = [random.choice(string.ascii_letters) for i in range(num_of_letter)] # 结合两者 all_chars = numerics + letters # 洗牌 random.shuffle(all_chars) # 生成最终字符串 result = ''.join([i for i in all_chars]) return result if __name__ == '__main__': print(gen_random_string(64))
#相關推薦:
以上是Python的random模組詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

防止會話固定攻擊的有效方法包括:1.在用戶登錄後重新生成會話ID;2.使用安全的會話ID生成算法;3.實施會話超時機制;4.使用HTTPS加密會話數據,這些措施能確保應用在面對會話固定攻擊時堅不可摧。

實現無會話身份驗證可以通過使用JSONWebTokens(JWT)來實現,這是一種基於令牌的認證系統,所有的必要信息都存儲在令牌中,無需服務器端會話存儲。 1)使用JWT生成和驗證令牌,2)確保使用HTTPS防止令牌被截獲,3)在客戶端安全存儲令牌,4)在服務器端驗證令牌以防篡改,5)實現令牌撤銷機制,如使用短期訪問令牌和長期刷新令牌。

PHP會話的安全風險主要包括會話劫持、會話固定、會話預測和會話中毒。 1.會話劫持可以通過使用HTTPS和保護cookie來防範。 2.會話固定可以通過在用戶登錄前重新生成會話ID來避免。 3.會話預測需要確保會話ID的隨機性和不可預測性。 4.會話中毒可以通過對會話數據進行驗證和過濾來預防。

銷毀PHP會話需要先啟動會話,然後清除數據並銷毀會話文件。 1.使用session_start()啟動會話。 2.用session_unset()清除會話數據。 3.最後用session_destroy()銷毀會話文件,確保數據安全和資源釋放。

如何改變PHP的默認會話保存路徑?可以通過以下步驟實現:在PHP腳本中使用session_save_path('/var/www/sessions');session_start();設置會話保存路徑。在php.ini文件中設置session.save_path="/var/www/sessions"來全局改變會話保存路徑。使用Memcached或Redis存儲會話數據,如ini_set('session.save_handler','memcached');ini_set(

tomodifyDataNaphPsession,startTheSessionWithSession_start(),然後使用$ _sessionToset,修改,orremovevariables.1)startThesession.2)setthesession.2)使用$ _session.3)setormodifysessessvariables.3)emovervariableswithunset()

在PHP會話中可以存儲數組。 1.啟動會話,使用session_start()。 2.創建數組並存儲在$_SESSION中。 3.通過$_SESSION檢索數組。 4.優化會話數據以提升性能。

PHP會話垃圾回收通過概率機制觸發,清理過期會話數據。 1)配置文件中設置觸發概率和會話生命週期;2)可使用cron任務優化高負載應用;3)需平衡垃圾回收頻率與性能,避免數據丟失。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能