Python创建和引入模块实例详解
我们引入的模块通常有三种类型,一种是系统库中存在的模块,一种是第三方模块,最后一种就是我们自己定义来的模块。当我们在写一个程序的时候,为了避免一个主程序的代码过于复杂,我们会将一些函数或功能写在单独的文件中,然后通过主程序调用这些自己定义的模块,我们自己定义的模块注意扩展名要以.py结尾。
本章节我们通过一个发牌游戏来学习自定义模块,题目为:
4个人玩牌,电脑随机将52张牌(不含大小王)发给4个人,在屏幕上显示每位牌手的牌。
问题分析:
1. 52张牌,按梅花0-12,方块13-25,红桃26-38,黑桃39-51顺序编号并存储在pocker列表中(未洗牌之前)。
2. 定义一个洗牌功能,随机产生两个位置索引,交换两个牌的位置,进行100次随机交换,达到洗牌的目的。
3. 发牌时,交换后pocker列表,按顺序加到四个牌手的列表中。
4. 52张牌发给4个人,每人13张,13轮循环,每次循环发给四个人。
5. 每人发一张牌的动作一样,用函数main实现。
6. 发一张牌的动作可以包含两部分:获取花色,获取数值,分别用get_color和get_value实现。
1. 创建模块
我们可以采用自定义模块来解决上面的问题,首先我们分析一下我们有几个功能要创建模块,洗牌和发牌这些都是可以放在主程序中的,每张牌的花色和数值我们是可以放在模块中的,那么我们就先来创建2个模块来完成这两个功能。
首先完成获取颜色的模块及其函数:
1 2 3 4 5 6 7 8 9 | def get_color(n): if n< 13 : return '梅花' elif n< 26 : return '方块' elif n< 39 : return '红桃' else : return '黑桃' |
模块名为getcolor.py。
接下来创建获取值的模块及其函数:
1 2 3 4 5 6 7 8 9 10 11 | 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. 调用模块并完善主程序
调用自己定义的模块,关键代码如下:
1 2 | from getcolor import get_color from getvalue import get_value |
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 = [] # 代表一副牌,现在表示还没有牌,只是一个牌盒 for i in range ( 0 , 52 ): List .append(i) # 按顺序往牌盒中放入52张牌 List = gen_pocker( List ) # 将牌盒中的牌打乱顺序 List1 = [] # 定义4个牌手 List2 = [] List3 = [] List4 = [] for i in range ( 0 , 52 ): # 实现发牌 if i < 13 : # 打乱后的前13张牌发给牌手1,实现牌手1手牌中如何含有花色和数字 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() |
输出结果为:
1 2 3 4 5 6 7 8 9 10 11 | [ 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' ] |
在这个题中,我们采用的是导入模块的第三种方式,直接引入模块的函数功能,如果我们采用第一种导入模式的时候,注意使用方式要加上模块名,例如:
1 2 | import getcolor print (getcolor.get_color( 2 )) |
一定要注意模块名的添加。
3. 总结
通过这个例子我们学习了怎么去创建自定义模块及模块的使用,自己去练习一下可以学习到这种剖析题目的解题思维,下面几节我们来学习几个常用的内置模块。