玩轉Python 中的隨機數

2021-01-15 開發小凱

開發中我們經常遇到需要隨機數的場景,比如為了用戶密碼更安全我們有時會加鹽,也就是將用戶原密碼連接上一串隨機字符然後加密保存,又比如我們可能需要隨機展示某張圖片等等。今天,我們就來理一理 Python 中的隨機數的玩法,當然,這裡只涉及標準庫。

隨機生成 0 到 1 之間的浮點數

random.random() 方法會返回 [0.0, 1.0) 之間的浮點數,注意,這是一個左閉右開的區間,隨機數可能會是 0 但不可能為 1 。

隨機生成 a 與 b 之間的整數

使用 random.randint(a , b) 方法,你可以生成一個 a 與 b 之間的隨機整數,也就是 [a, b] 。

當然,如果你想要生成的隨機整數不會包含 b ,也即 [a, b) , 你可以使用 random.randrange() 方法。

生成 a 與 b 之間的浮點數

如果你需要生成 [a, b] 之間的隨機浮點數,那麼 random.uniform(a, b) 會滿足你的需求。

從列表中隨機取出一個元素

如果你想從序列類型中隨機取出一個元素,比如列表、元祖、字符串等,random.choice() 是一個不錯的選擇。

需要注意的是,該方法需要參數非空,不然會拋出 IndexError 的錯誤。

打亂列表中元素的順序

使用 random.shuffle(items) 方法可以幫你把序列 items 中的元素隨機打亂。

如果你不想修改原來的列表,你可以使用 copy 模塊先拷貝一份原來的列表

從列表中隨機取出 n 個元素

使用 random.sample(items, n) 方法可以從序列 items 中隨機取出 n 個元素。

生成密碼學安全的偽隨機數

什麼是密碼學安全的偽隨機數,請看維基百科( http://dwz.cn/7JhRN5 )。不過暫時不需要深入的話,理解為比普通隨機數更隨機的技術就好。

如果你需要生成密碼學安全的隨機數,你可以通過 random.SystemRandom 類實現。random.SystemRandom 實例化後的對象擁有與 random 類似的方法。

如果 Python 版本在 3.6 及以上,可以使用 secrets 模塊

通過 secrets 模塊,同樣也能生成密碼學安全的隨機數。並且,利用它生成一些特定的秘鑰特別方便。

下面是一些簡單的例子

通過這個模塊比較字符串相等,還可以減少被時序攻擊的風險。

什麼是時序攻擊呢,我這找了一個通俗的解釋

舉一個最簡單的計時攻擊的例子,某個函數負責比較用戶輸入的密碼和存放在系統內密碼是否相同,如果該函數是從第一位開始比較,發現不同就立即返回,那麼通過計算返回的速度就知道了大概是哪一位開始不同的,這樣就實現了電影中經常出現的按位破解密碼的場景。密碼破解複雜度成千上萬倍甚至百萬千萬倍的下降。

(文字來源知乎,侵刪)

關於secrets 模塊的更多介紹,請看官方文檔( https://docs.python.org/3/library/secrets.html )。

相關焦點

  • python隨機函數random分配應用,隨機分配8名老師到3個教室中
    羽憶教程最近遇到一個問題,要隨機分配8名老師到3個辦公室中,這時小編想要了python中的隨機函數random來進行分配工作,感覺小編像個月老一樣。python隨機函數python隨機函數在python中,想要生成隨機數
  • 「每日一練」巧用python生成隨機數
    隨機數在我們的生產和生活中有很多的應用場景,比如說登錄驗證的隨機數字等等,那麼你知道在Python中怎麼生成隨機數嗎?往下看,就是這麼簡單!題目python中生成隨機整數、隨機小數、0--1之間小數方法代碼先上代碼~運行效果題目詳述程序分析:隨機整數:random.randint(a,b),生成區間內的整數隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數0-1隨機小數
  • python安全開發軍規之四:使用安全的隨機數生成器
    背景日常開發中,必然會碰到需要生成隨機數的需求,比如生成圖片驗證碼,簡訊驗證碼……隨機數生成既然是這麼簡單的一個功能,開發必然也很簡單,我們看看怎麼生成一個隨機數,這裡以隨機生成1-100的整數為例。QA有話說隨機模塊提供的隨機生成器是偽隨機數生成器。所謂偽隨機數,是通過固定的算法生成的,其結果是確定的,可預見的。一般情況下,偽隨機數的生成需要一個種子,如果沒有特別設置,種子就是系統的時鐘。簡而言之,由於偽隨機數算法固定,種子固定,那結果就是可推導和模擬的。
  • Python學習第128課——在Python中實現醉漢隨機遊走
    【每天幾分鐘,從零入門python編程的世界!】這節我們在2D平面內實現隨機遊走。我們先把原理搞清楚,用代碼實現這個原理。原理分析:我們想像在2D平面內有一個x軸和y軸組成的坐標系,有一個人他是個醉漢,他以(0,0)為原點,隨機遊走,以x和y表示遊走後的坐標值,剛開始x=0,y=0。他每走一步之前,都需要先做一次選擇,選擇往東南西北哪一個方向去走,這個選擇我們需要先引入一個random庫,這是一個可以用來實現隨機數、隨機選擇的庫,用這個庫來實現隨機方向的選擇。
  • 詳解Python隨機數的生成
    ,比如密碼加鹽時會在原密碼上關聯一串隨機數,蒙特卡洛算法會通過隨機數採樣等等。注意的是返回的隨機數可能會是 0 但不可能為 1,即左閉右開的區間。num = [1, 2, 3, 4, 5]random.shuffle(num)print("shuffle: ",num)7、random.sample(items, n)從列表 items 中隨機取出 n 個元素。
  • Python基礎知識:以實例教你學隨機數產生和字符/ASCII碼轉換操作
    基本實現方法1使用python內置的random模塊產生隨機數,我們知道字符「a」和「z」對應的ASCII碼分別為97和122,所以對於題目要求產生「a」-「z」之間的隨機字符序列,只需使用random模塊產生97-122之間的隨機數,然後將其轉換為對應的字符即可。其中,字符轉數字的函數為ord函數,數字轉字符的函數為chr函數。
  • 使用樹莓派(Raspberry Pi)的真正隨機數生成器
    使用電視上的靜態信號將Raspberry Pi變成了真正的隨機數生成器。在國外,我們不再接收模擬地面廣播,因此在電視上查找靜態信號就像將其放在模擬頻道上一樣簡單。 我使用的設置是插入Raspberry Pi的eSecure USB 8MP網絡攝像頭,我將其指向電視。
  • 無聊到一定境界後,我用python隨機數創造了虛擬世界
    有的時候,在太過於無聊時,我會通過隨機數隨機取一堆名字出來,然後賦予給它們一定的交互動作,只要足夠的無聊,我可以讓它們陪著自己玩一整天。如果再添加一點新的玩法,我就可以把程序放在網上,讓大家一起看這些虛擬角色的直播......今天讓我們用python代碼來實現這個想法吧!
  • python隨機模塊22個函數詳解(上)
    作者:小伍哥來源: AI入門學習今天給大家介紹下python中的隨機模塊,隨機數可以用於數學,遊戲,安全等領域中,還經常被嵌入到算法中,用以提高算法效率,並提高程序的安全性。平時數據分析各種分布的數據構造也會用到。
  • 隨機生成N個立方體,學習blender Python隨機數生成
    打開blender控制臺首先輸入import random print(random.randint(0,9))多次執行print(random.randint(0,9)),就能見到系統每次都生成0-9內的隨機整數使用了
  • 【乾貨】隨機森林的Python實現
    【新智元導讀】在機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定。隨機森林幾乎是任何預測類問題(甚至非線性問題)的首選。本文介紹了隨機森林的原理、用途,以及用 Python 實現隨機森林的方法。
  • Python學習第130課——蒙特卡洛模擬隨機遊走
    【每天幾分鐘,從零入門python編程的世界!】之前我們用代碼實現了醉漢隨機遊走的過程。現在我們用蒙特卡洛模擬計算一下,醉漢在不同的條件下打車回家的概率。我們先定義幾個參數。how_many_steps,表示醉漢走多少步數算完成一次隨機遊走。foot_limit,表示醉漢超過出發的原點多少米就不走了,要打車回家。how_many_simulations,表示我們模擬多少次醉漢遊走的過程。taking_a_taxi_counter,表示我們模擬醉漢遊走一定的次數後,統計打車回家的次數。
  • 中小學python教學案例:隨機數按升序排列 輸出
    以下程序的功能是隨機生成 100 個 97-122 之間的正整數(包括 97 和 122),並將一個區間內的數取出並按升序輸出。如果a > b,則生成隨機數?1 n: a <= n <= b。如果 a <b, 則 b <= n <= a。?
  • Python學習第129課——醉漢隨機遊走代碼改進
    【每天幾分鐘,從零入門python編程的世界!】上節我們在Python中用代碼實現了醉漢隨機遊走的邏輯和過程,這節我們把上節的代碼改進一下。現在我們的小例子代碼是非常少的,實際開發中,有些項目代碼量會非常大,為了代碼在執行時有更快的速度,那麼就需要對代碼進行改進優化。
  • 隨機數
    隨機數,就是隨機生成的數,隨機數最重要的特性是:不可預測。後面的數與前面的數毫無關係,例如:1、200、33、2…..等。
  • python求兩個數的最大公約數
    前言提到最大公約數,那麼就不得不說什麼是公約數,它是一個能被若干個整數同時均整除的整數。如果一個整數同時是幾個整數的約數,稱這個整數為它們的「公約數」;公約數中最大的稱為最大公約數。對任意的若干個正整數,1總是它們的公因數。
  • excel隨機數函數是什麼?excel怎樣生成隨機數?
    本篇將介紹excel隨機數函數是什麼?excel怎樣生成隨機數?有興趣的朋友可以了解一下!一、前言excel是我們工作中很常用的一款表格製作工具,它不僅僅只是用來製作表格,它還能對表格中的數據進行處理(比如:運算、排序、篩選等)。excel為數據的處理提供了很多函數,今天小編要介紹的是excel隨機數函數,以及隨機數函數的用法,希望對大家有所幫助!
  • 淺談Java中的幾種隨機數
    眾所周知,隨機數是任何一種程式語言最基本的特徵之一。而生成隨機數的基本方式也是相同的:產生一個0到1之間的隨機數。看似簡單,但有時我們也會忽略了一些有趣的功能。我們從書本上學到什麼?最明顯的,也是直觀的方式,在Java中生成隨機數隻要簡單的調用:java.lang.Math.random() 在所有其他語言中,生成隨機數就像是使用Math工具類,如abs, pow, floor, sqrt和其他數學函數。大多數人通過書籍、教程和課程來了解這個類。一個簡單的例子:從0.0到1.0之間可以生成一個雙精度浮點數。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    (6套課程) 注:零基礎全能篇中,針對windows和liunx系統均有兩套課程可供選擇學習,單純學python,哪個系統都一樣,初學者只需選擇自己熟悉的系統學習相應課程即可。 19自動辦公難題 無api接口庫解決方案 20 獨家前沿用實力說話 21自動辦公實用tips python自動發送郵件 5機器學習與人工智慧 1歡迎來到python3玩轉機器學習 2機器學習基礎 3Jupyter notebook numpy 4最基礎的分類算法-k近鄰算法 knn
  • Excel生成隨機數的技巧,隨機數發生器,你用過嗎
    Excel獲取隨機數從概率分布中產生隨機樣本,其基本原理是隨機數的概念。隨機數是均勻分布在0和1之間的數。從技術上講,電腦不能產生真正的隨機數,因為它們必須使用一個可預測的算法。但是,設計用於產生一個數列的算法,似乎是隨機的。在 Excel中,我們可以使用函數RAND()在任何一個單元格之中產生隨機數。