如何用 Python讓自己變成天選之子

如何用 Python讓自己變成天選之子

題外話:其實(shí),路并沒有錯(cuò)的,錯(cuò)的只是選擇,愛并沒有錯(cuò)的弥激,錯(cuò)的只是緣分糙捺。所以,無論何地耍缴,一路的風(fēng)景總是無限,終究會有美好的時(shí)候,無論何時(shí)勒葱,我們的年華總會長大浪汪,終究會有燦爛的一幕。--------2020514感謝遇見你

轉(zhuǎn)自:早起Python

Python的random真的就隨機(jī)了嗎凛虽?

請大家猜一猜下面這段代碼的運(yùn)行效果:

import random
import time
people = ['kingname', '王小一', '李小二', '張小三', '劉小四', '盧小五', '馬小六', '周小七', '丁小八', '朱小九']
for i in range(1, 11):    
  lucky_guy = random.choice(people)    
  print(f'第{i}次抽獎死遭,中獎用戶:{lucky_guy}')    
  time.sleep(1)

你是不是以為這段代碼運(yùn)行以后,結(jié)果如下圖所示凯旋?

image

但實(shí)際上呀潭,我可以讓輸出結(jié)果根據(jù)我的意愿隨意變動,例如像下面這個(gè) gif 至非,所有輸出結(jié)果都是我:

image

你可以先不要往下看钠署,放下手機(jī),自己寫一下代碼荒椭,試一試 如何才能實(shí)現(xiàn) gif 中的效果谐鼎。

下面來為大家解密。

要實(shí)現(xiàn)這個(gè)效果戳杀,只需要兩個(gè)知識點(diǎn):

  1. Python自帶模塊是可以被覆蓋的
  2. Python 的 import 在同一個(gè)運(yùn)行時(shí)只會導(dǎo)入一次

首先來看第一個(gè)知識點(diǎn)该面。Python 的自帶模塊是可以被覆蓋的,所以我們先來定義一個(gè)函數(shù):

def choice(option):    return 'kingname'

接下來信卡,使用這個(gè)函數(shù)覆蓋random.choice

import randomrandom.choice = choice

現(xiàn)在隔缀,無論給random.choice傳入什么參數(shù),它始終都會返回kingname傍菇,運(yùn)行效果如下圖所示:

image

這個(gè)時(shí)候猾瘸,你可能會說,那別人寫代碼的時(shí)候丢习,又重新import random怎么辦呢牵触?random.choice不是又被改回去了嗎?

實(shí)際上并不會咐低,因?yàn)镻ython 的包導(dǎo)入機(jī)制決定了揽思,在每個(gè)運(yùn)行時(shí)內(nèi)部,每個(gè)包只有第一次導(dǎo)入的時(shí)候有效见擦,所以只要還在當(dāng)前運(yùn)行時(shí)钉汗,那么后續(xù)的所有import random都是無效的。

所以鲤屡,即使重新導(dǎo)入了 random 模塊损痰,random.choice依然是你修改以后的代碼。所以當(dāng)你再次執(zhí)行的時(shí)候酒来,會發(fā)現(xiàn)返回的還是你想要的數(shù)據(jù)卢未,如下圖所示:

image

可能有人會說這樣容易被識破啊,別人只要先隨便寫一些測試數(shù)據(jù),運(yùn)行一次random.choice([123, 456])辽社,發(fā)現(xiàn)返回的竟然是kingname伟墙,這不就露餡了嗎?

實(shí)際上完全不用擔(dān)心滴铅,我們可以這樣操作:

  1. 如果備選列表里面不包含kingname远荠,那么就使用原生的 random.choice
  2. 如果備選列表里面包含kingname,那么就以60%的概率返回kingname

要實(shí)現(xiàn)這樣的功能失息,我們可以這樣寫代碼:

首先重啟當(dāng)前 Jupyter 內(nèi)核,讓 random 恢復(fù)成默認(rèn)的档址,然后編碼:

import random
origin_choice = random.choice
def choice(option):    
  if 'kingname' not in option or random.randint(1, 10) > 6:        
    return origin_choice(option)    
  return 'kingname'
random.choice = choice

這樣替換以后盹兢,當(dāng)有kingname在備選列表中時(shí),kingname被有60%的概率被選中守伸,如下圖所示:

image

當(dāng)kingname不在備選列表中時(shí)绎秒,一切正常,如下圖所示:

image
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尼摹,一起剝皮案震驚了整個(gè)濱河市见芹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蠢涝,老刑警劉巖玄呛,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異和二,居然都是意外死亡徘铝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門惯吕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕它,“玉大人,你說我怎么就攤上這事废登⊙推牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵堡距,是天一觀的道長甲锡。 經(jīng)常有香客問我,道長吏颖,這世上最難降的妖魔是什么搔体? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮半醉,結(jié)果婚禮上疚俱,老公的妹妹穿的比我還像新娘。我一直安慰自己缩多,他們只是感情好呆奕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布养晋。 她就那樣靜靜地躺著,像睡著了一般梁钾。 火紅的嫁衣襯著肌膚如雪绳泉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天姆泻,我揣著相機(jī)與錄音零酪,去河邊找鬼。 笑死拇勃,一個(gè)胖子當(dāng)著我的面吹牛四苇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播方咆,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼月腋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓣赂?” 一聲冷哼從身側(cè)響起榆骚,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煌集,沒想到半個(gè)月后妓肢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牙勘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年职恳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片方面。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡放钦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恭金,到底是詐尸還是另有隱情操禀,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布横腿,位于F島的核電站颓屑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耿焊。R本人自食惡果不足惜揪惦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罗侯。 院中可真熱鬧器腋,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至措左,卻和暖如春依痊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怎披。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工胸嘁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凉逛。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓缴渊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鱼炒。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354