今天下午,成長群的群主申總提出,群里每個(gè)人找一個(gè)戰(zhàn)友,互幫互助。一石激起千層浪,群里面積極向上好青年們就開始踴躍自我介紹,一個(gè)比一個(gè)優(yōu)秀,讓人羨慕不已。我正想要參與其中,突然想到我的活學(xué)活用系列需要更新了。沒有困難,創(chuàng)造困難也要上。于是,仔細(xì)想一想,可能出現(xiàn)幾種情況:
十年的思茅網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整思茅建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“思茅網(wǎng)站設(shè)計(jì)”,“思茅網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
如果用Python來隨機(jī)配對,能解決上面的問題。還有一個(gè)好處,每個(gè)月初,有了新的成員加進(jìn)來之后,可以重新打亂配對一次,這樣每個(gè)月都會(huì)有一個(gè)新的戰(zhàn)友配對,就可以結(jié)交一個(gè)新朋友,豈不更好。
把全體群成員放在一個(gè)集合里面,然后隨機(jī)的從這個(gè)集合中挑出兩個(gè)元素,作為一對戰(zhàn)友,然后把這倆哥們從集合中刪除,剩下的成員組成了新的集合,再對新的集合重復(fù)上面的操作,一直到新的集合為空,程序結(jié)束
在Python中可以用list或者set來實(shí)現(xiàn)
set和list的區(qū)別如下:
set是無序的,不可重復(fù)的
list是有序的,可以重復(fù)的
直覺上set比較適合,于是查看set的文檔,看有沒有適合的操作函數(shù)。發(fā)現(xiàn)set的操作函數(shù)有5個(gè):
其中pop()從集合中刪除并返回隨機(jī)的一個(gè)元素,好像很符合我的要求,于是動(dòng)手嘗試。
輸入的結(jié)果如下:
成功了O(∩_∩)O哈哈~
PS:因?yàn)榭赡艽嬖诔蓡T數(shù)為單數(shù)的情況,為了不使程序出錯(cuò),這里添加了一個(gè)try-except
上面是用set實(shí)現(xiàn)的,那用list能實(shí)現(xiàn)嗎?
答案是:可以
查看Python文檔,發(fā)現(xiàn)一個(gè)函數(shù)非常適合:random.shuffle,這個(gè)家伙能把一個(gè)list中的成員洗牌打亂,那么我們就可以按照順序把大亂以后的list中的成員打印出來,挨著的兩個(gè)成員就成為戰(zhàn)友。實(shí)現(xiàn)如下:
輸入的結(jié)果如下:
成功,而且不會(huì)因?yàn)閱螖?shù)問題報(bào)錯(cuò),實(shí)現(xiàn)起來也比set簡單,更重要的一點(diǎn)是程序運(yùn)行后生成了一個(gè)雷暴members保存了所有的戰(zhàn)友匹配信息。方便保存。
這里有個(gè)知識(shí)點(diǎn)是list的切片,list[i:j]返回的是一個(gè)小list,是原來list的第i個(gè)元素到第j個(gè)元素。
如果要應(yīng)用到群成員配對,只需要把members的內(nèi)容替換成為愿意程序配對的群成員們就可以啦
set創(chuàng)建和pop()函數(shù)
list創(chuàng)建,list切片
random.shuffle(list)給list洗牌
可以
不是遞歸, 遞歸是一個(gè)功能的自我調(diào)用. 這里也不需要遞歸.
你可以使用更簡單的方法. 先把列表打亂(使用shuffle函數(shù)), 然后在一排人中隨機(jī)插兩個(gè)不同的隔板進(jìn)去, 就相當(dāng)于把人分成了三組. 這樣實(shí)現(xiàn)簡單, 并且不會(huì)產(chǎn)生空的現(xiàn)象.
編程語言中rand()表示產(chǎn)生一個(gè)隨機(jī)整數(shù),%30將隨機(jī)數(shù)限制在[0,30),%10表示只取0-9這10個(gè)自然數(shù)。以python為例,random.randint(0,30)產(chǎn)生0-30的自然數(shù):
擴(kuò)展資料:
python中random.randint(a,b)可以產(chǎn)生一個(gè)在區(qū)間[a,b)之間的隨機(jī)整數(shù)。
python中random.random()可以產(chǎn)生隨機(jī)浮點(diǎn)數(shù),浮點(diǎn)數(shù)范圍在0-1之間:
參考資料:
python官方api文檔
1.確定你的用戶界面準(zhǔn)備用什么框架,也就基本確定你要引用些什么了,建議使用tkinter 的按鈕,這個(gè)估計(jì)學(xué)習(xí)成本最低。
2.一個(gè)n*n的矩陣發(fā)生器,注意只能是雙數(shù)了,除非是X*y,其中有一個(gè)雙數(shù)。不過可能就不是正方形了。
3.一個(gè)圖片裝載器(n*n )的矩陣總得裝 除以2的圖片吧。
4.洗牌函數(shù)總是要有的,用來生成圖片的排列順序。好隨機(jī)的分配。
5.對錯(cuò)判斷函數(shù),判斷翻過來的對錯(cuò)
在Python中,如果我們想實(shí)現(xiàn)創(chuàng)建類似于序列和映射的類(可以迭代以及通過[下標(biāo)]返回元素),可以通過重寫魔法方法 __getitem__、__setitem__、__delitem__、__len__ 方法去模擬。
__getitem__(self,key): 返回鍵對應(yīng)的值。
__setitem__(self,key,value): 設(shè)置給定鍵的值
__delitem__(self,key): 刪除給定鍵對應(yīng)的元素。
__len__(): 返回元素的數(shù)量
【注釋】只要實(shí)現(xiàn)了 __getitem__ 和 __len__ 方法,就會(huì)被認(rèn)為是序列。
這些魔術(shù)方法的原理就是:當(dāng)我們對類的屬性item進(jìn)行下標(biāo)的操作時(shí),首先會(huì)被 __getitem__()、__setitem__()、__delitem__() 攔截,從而執(zhí)行我們在方法中設(shè)定的操作,如賦值,修改內(nèi)容,刪除內(nèi)容等等。
這個(gè)方法應(yīng)該以與鍵相關(guān)聯(lián)的方式存儲(chǔ)值,以便之后能夠使用 __setitem__ 來獲取。當(dāng)然,這個(gè)對象可變時(shí)才需要實(shí)現(xiàn)這個(gè)方法。
舉個(gè)栗子:
定義一副撲克牌(不包括大小王),對牌進(jìn)行洗牌,然后發(fā)牌。
Output:
【注意】 :我們會(huì)發(fā)現(xiàn)output中,輸出了: slice(1, 3, None) ,下面給出解釋。
語法:
參數(shù)說明:
slice() 函數(shù)實(shí)現(xiàn)切片對象,主要用在切片操作函數(shù)里的參數(shù)傳遞。
舉兩個(gè)栗子來看看:
Output:
切片原理
output
(程序員必會(huì)的 hhhhh.....)
看看slice在python3.7中是怎么描述的:
網(wǎng)站欄目:洗牌函數(shù)python 洗牌函數(shù)c語言
文章網(wǎng)址:http://m.rwnh.cn/article10/doopogo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、營銷型網(wǎng)站建設(shè)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)