国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Python五種“隨機(jī)抽獎(jiǎng)”方法

2021-07-07 06:32:07牟曉東
電腦報(bào) 2021年16期
關(guān)鍵詞:抽獎(jiǎng)列表整數(shù)

牟曉東

“隨機(jī)抽獎(jiǎng)”例題:假設(shè)要從10000個(gè)人中隨機(jī)抽取出10人作為“中獎(jiǎng)?wù)摺?,每人?duì)應(yīng)一個(gè)0-9999中的整數(shù),要求使用Python編程按從小到大的順序輸出中獎(jiǎng)?wù)邤?shù)字代號(hào)。類似的“隨機(jī)抽獎(jiǎng)”程序一般均需要先導(dǎo)入random(隨機(jī))模塊,然后借助其中的randint()、shuffle()和sample()等函數(shù)進(jìn)行隨機(jī)數(shù)的選取,最后使用列表或集合對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)、排序和輸出。

法1:randint()生成隨機(jī)整數(shù)后進(jìn)行in成員運(yùn)算判斷

首先,通過(guò)“import random”導(dǎo)入random模塊(下同);接著,建立空列表“my_list1 = []”;建立while循環(huán)結(jié)構(gòu),判斷條件為“l(fā)en(my_list1) <= 10”,即列表my_list1中元素的個(gè)數(shù)達(dá)到10為止(通過(guò)len()檢測(cè)列表的長(zhǎng)度);在循環(huán)體中,第一條語(yǔ)句為“x = random.randint(0,9999)”,變量x取值為0-9999中的隨機(jī)某個(gè)整數(shù)(包括0和9999);條件判斷語(yǔ)句“if x not in my_list1”的作用是,查看生成的隨機(jī)數(shù)x是否在列表my_list1中,防止多次生成的隨機(jī)數(shù)中有重復(fù)值出現(xiàn);如果不重復(fù),則使用append()方法將x追加到列表my_list1中:“my_list1.append(x)”;當(dāng)循環(huán)結(jié)束時(shí),列表my_list1中就會(huì)保存有10個(gè)0-9999間的不重復(fù)數(shù)據(jù)。最后,通過(guò)sorted()函數(shù)對(duì)列表my_list1進(jìn)行默認(rèn)參數(shù)排序(升序):“my_list2 = sorted(my_list1)”,得到的列表my_list2就是從小到大順序中獎(jiǎng)號(hào)碼,再使用print()輸出結(jié)果即可。

運(yùn)行程序,得到了10個(gè)“中獎(jiǎng)”號(hào)碼(如圖1)。

法2:randint()生成隨機(jī)整數(shù)后存入集合“去重”

與法1類似,只不過(guò)是使用集合而非列表來(lái)存儲(chǔ)生成的隨機(jī)數(shù):“my_set = set()”,建立一個(gè)空集合;接著,仍然是在while循環(huán)中,通過(guò)randint生成0-9999間的某隨機(jī)數(shù),將它追加到集合my_set中。由于集合中的元素是不可能存在重復(fù)數(shù)據(jù)的,因此不必像法1中的列表元素進(jìn)行in成員運(yùn)算判斷,相當(dāng)于直接進(jìn)行了“去重”操作。循環(huán)結(jié)束后,仍然是使用sorted()函數(shù)進(jìn)行排序并保存至列表my_list中,進(jìn)行print打印輸出(如圖2)。

法3:shuffle()隨機(jī)排序后進(jìn)行“切片”

首先建立列表my_list1,其值為“l(fā)ist(range(10000))”,通過(guò)list()將0至9999共10000個(gè)數(shù)據(jù)保存至列表my_list1中;接著使用random中的shuffle(),將列表my_list1中的數(shù)據(jù)進(jìn)行隨機(jī)排序:“random.shuffle(my_list1)”;然后對(duì)列表my_list1進(jìn)行切片操作,任意截取出10個(gè)數(shù)據(jù),比如“my_list1[:10]”是指從索引的第0個(gè)切至第9個(gè)(當(dāng)然也可以使用“my_list2 = my_list1[99:109]”,意思是從第99個(gè)切至第109個(gè)),將它們存入列表my_list2中;仍然是使用sorted()函數(shù)進(jìn)行排序并保存至第3個(gè)列表my_list3中,進(jìn)行print打印輸出(如圖3)。

法4:sample()隨機(jī)多個(gè)“取樣”

Random中的sample()功能是從序列中隨機(jī)多個(gè)“取樣”。首先建立列表my_list1,其值為從0-9999中隨機(jī)抽取10個(gè)不重復(fù)的數(shù)據(jù):“my_list1 = random.sample(range(10000),10)”;然后就可以使用sorted()函數(shù)進(jìn)行排序,將結(jié)果保存至列表my_list2中,最后進(jìn)行print打印輸出(如圖4)。

法5:numpy中的random.choice()隨機(jī)項(xiàng)提取

numpy中有個(gè)random.choice(),可以隨機(jī)從指定列表中提取若干個(gè)元素。首先,通過(guò)“import numpy as np”導(dǎo)入numpy;接著建立列表my_list1,存儲(chǔ)的數(shù)據(jù)是0-9999共10000個(gè)數(shù)據(jù):“my_list1 = list(range(10000))”;建立列表my_list2,值為從列表my_list1中隨機(jī)提取10個(gè)不重復(fù)的數(shù)據(jù):“my_list2 = np.random.choice(my_list1,10,replace=False)”,其中的參數(shù)“replace=False”即為控制隨機(jī)數(shù)“不重復(fù)”。最后,使用sorted()函數(shù)進(jìn)行排序并保存至第3個(gè)列表my_list3中,進(jìn)行print打印輸出即可(如圖5)。

小結(jié):抽獎(jiǎng)就是獲取不重復(fù)的隨機(jī)數(shù)的問(wèn)題,要解決這個(gè)問(wèn)題Python有多種函數(shù)和算法可以選擇,體會(huì)其中的區(qū)別后你可以合理運(yùn)用在其他實(shí)際應(yīng)用中。

猜你喜歡
抽獎(jiǎng)列表整數(shù)
巧用列表來(lái)推理
開學(xué)大抽獎(jiǎng)
學(xué)習(xí)運(yùn)用列表法
擴(kuò)列吧
一類整數(shù)遞推數(shù)列的周期性
大抽獎(jiǎng)
航空模型(2016年8期)2017-05-03 12:17:21
抽獎(jiǎng)
聚焦不等式(組)的“整數(shù)解”
不含3-圈的1-平面圖的列表邊染色與列表全染色
抽獎(jiǎng)
雷山县| 公安县| 沙河市| 九龙县| 丰台区| 保康县| 亚东县| 邵阳县| 浮梁县| 峡江县| 墨玉县| 和林格尔县| 清河县| 沁水县| 同江市| 刚察县| 五寨县| 崇礼县| 凌云县| 若尔盖县| 绥德县| 增城市| 南京市| 河津市| 习水县| 泰顺县| 陇西县| 布尔津县| 遂溪县| 鸡西市| 嵊州市| 重庆市| 乌苏市| 大田县| 昭通市| 新昌县| 无棣县| 南汇区| 安达市| 津南区| 丰原市|