我們引入的模塊通常有三種類型,一種是系統(tǒng)庫(kù)中存在的模塊,一種是第三方模塊,最后一種就是我們自己定義來的模塊。當(dāng)我們?cè)趯懸粋€(gè)程序的時(shí)候,為了避免一個(gè)主程序的代碼過于復(fù)雜,我們會(huì)將一些函數(shù)或功能寫在單獨(dú)的文件中,然后通過主程序調(diào)用這些自己定義的模塊,我們自己定義的模塊注意擴(kuò)展名要以.py結(jié)尾。
本章節(jié)我們通過一個(gè)發(fā)牌游戲來學(xué)習(xí)自定義模塊,題目為:
4個(gè)人玩牌,電腦隨機(jī)將52張牌(不含大小王)發(fā)給4個(gè)人,在屏幕上顯示每位牌手的牌。
問題分析:
1. 52張牌,按梅花0-12,方塊13-25,紅桃26-38,黑桃39-51順序編號(hào)并存儲(chǔ)在pocker列表中(未洗牌之前)。
2. 定義一個(gè)洗牌功能,隨機(jī)產(chǎn)生兩個(gè)位置索引,交換兩個(gè)牌的位置,進(jìn)行100次隨機(jī)交換,達(dá)到洗牌的目的。
3. 發(fā)牌時(shí),交換后pocker列表,按順序加到四個(gè)牌手的列表中。
4. 52張牌發(fā)給4個(gè)人,每人13張,13輪循環(huán),每次循環(huán)發(fā)給四個(gè)人。
5. 每人發(fā)一張牌的動(dòng)作一樣,用函數(shù)main實(shí)現(xiàn)。
6. 發(fā)一張牌的動(dòng)作可以包含兩部分:獲取花色,獲取數(shù)值,分別用get_color和get_value實(shí)現(xiàn)。
1. 創(chuàng)建模塊
我們可以采用自定義模塊來解決上面的問題,首先我們分析一下我們有幾個(gè)功能要?jiǎng)?chuàng)建模塊,洗牌和發(fā)牌這些都是可以放在主程序中的,每張牌的花色和數(shù)值我們是可以放在模塊中的,那么我們就先來創(chuàng)建2個(gè)模塊來完成這兩個(gè)功能。
首先完成獲取顏色的模塊及其函數(shù):
def get_color(n): if n<13: return '梅花' elif n<26: return '方塊' elif n<39: return '紅桃' else: return '黑桃'
模塊名為getcolor.py。
接下來創(chuàng)建獲取值的模塊及其函數(shù):
def get_value(n): if n==0 or n==13 or n==26 or n==39: return 'A' elif n==12 or n==25 or n==38 or n==51: return 'K' elif n==11 or n==24 or n==37 or n==50: return 'Q' elif n==10 or n==23 or n==36 or n==49: return 'J' else: return n%13
模塊名為getvalue.py。
2. 調(diào)用模塊并完善主程序
調(diào)用自己定義的模塊,關(guān)鍵代碼如下:
from getcolor import get_color from getvalue import get_value
完整代碼如下:
import random from getcolor import get_color from getvalue import get_value n = 52 def gen_pocker(n): random.shuffle(n) return n def main(): List = [] # 代表一副牌,現(xiàn)在表示還沒有牌,只是一個(gè)牌盒 for i in range(0, 52): List.append(i) # 按順序往牌盒中放入52張牌 List = gen_pocker(List) # 將牌盒中的牌打亂順序 List1 = [] # 定義4個(gè)牌手 List2 = [] List3 = [] List4 = [] for i in range(0, 52): # 實(shí)現(xiàn)發(fā)牌 if i < 13: # 打亂后的前13張牌發(fā)給牌手1,實(shí)現(xiàn)牌手1手牌中如何含有花色和數(shù)字 List1.append(get_color(List[i]) + str(get_value(List[i]))) elif i < 26: List2.append(get_color(List[i]) + str(get_value(List[i]))) elif i < 39: List3.append(get_color(List[i]) + str(get_value(List[i]))) else: List4.append(get_color(List[i]) + str(get_value(List[i]))) print(List) print("牌手1", List1) print("牌手2", List2) print("牌手3", List3) print("牌手4", List4) main()
輸出結(jié)果為:
[48, 30, 25, 51, 10, 34, 41, 19, 38, 8, 13, 3, 24, 28, 43, 35, 6, 49, 37, 0, 33, 27, 11, 14, 4, 31, 21, 50, 9, 46, 12, 47, 1, 44, 18, 22, 26, 32, 20, 42, 45, 7, 17, 36, 29, 2, 15, 40, 39, 5, 16, 23] 牌手1 ['黑桃9', '紅桃4', '方塊K', '黑桃K', '梅花J', '紅桃8', '黑桃2', '方塊6', '紅桃K', '梅花8', '方塊A', '梅花3', '方塊Q'] 牌手2 ['紅桃2', '黑桃4', '紅桃9', '梅花6', '黑桃J', '紅桃Q', '梅花A', '紅桃7', '紅桃1', '梅花Q', '方塊1', '梅花4', '紅桃5'] 牌手3 ['方塊8', '黑桃Q', '梅花9', '黑桃7', '梅花K', '黑桃8', '梅花1', '黑桃5', '方塊5', '方塊9', '紅桃A', '紅桃6', '方塊7'] 牌手4 ['黑桃3', '黑桃6', '梅花7', '方塊4', '紅桃J', '紅桃3', '梅花2', '方塊2', '黑桃1', '黑桃A', '梅花5', '方塊3', '方塊J']
在這個(gè)題中,我們采用的是導(dǎo)入模塊的第三種方式,直接引入模塊的函數(shù)功能,如果我們采用第一種導(dǎo)入模式的時(shí)候,注意使用方式要加上模塊名,例如:
import getcolor print(getcolor.get_color(2))
一定要注意模塊名的添加。
3. 總結(jié)
通過這個(gè)例子我們學(xué)習(xí)了怎么去創(chuàng)建自定義模塊及模塊的使用,自己去練習(xí)一下可以學(xué)習(xí)到這種剖析題目的解題思維,下面幾節(jié)我們來學(xué)習(xí)幾個(gè)常用的內(nèi)置模塊。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程