我们引入的模块通常有三种类型,一种是系统库中存在的模块,一种是第三方模块,最后一种就是我们自己定义来的模块。当我们在写一个程序的时候,为了避免一个主程序的代码过于复杂,我们会将一些函数或功能写在单独的文件中,然后通过主程序调用这些自己定义的模块,我们自己定义的模块注意扩展名要以.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个模块来完成这两个功能。

首先完成获取颜色的模块及其函数:

def get_color(n):
    if n<13:
        return '梅花'
    elif n<26:
        return '方块'
    elif n<39:
        return '红桃'
    else:
        return '黑桃'

模块名为getcolor.py。

接下来创建获取值的模块及其函数:

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. 调用模块并完善主程序

调用自己定义的模块,关键代码如下:

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 = []  # 代表一副牌,现在表示还没有牌,只是一个牌盒
    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()

输出结果为:

[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']

在这个题中,我们采用的是导入模块的第三种方式,直接引入模块的函数功能,如果我们采用第一种导入模式的时候,注意使用方式要加上模块名,例如:

import getcolor
print(getcolor.get_color(2))

一定要注意模块名的添加。

3. 总结

通过这个例子我们学习了怎么去创建自定义模块及模块的使用,自己去练习一下可以学习到这种剖析题目的解题思维,下面几节我们来学习几个常用的内置模块。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)