首页  /  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个模块来完成这两个功能。

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

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. 总结

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

 



本文固定URL:https://www.dotcpp.com/course/269

上一课:模块概述 下一课:math模块
第一章 人生苦短,我用Python
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 函数
第六章 面向对象编程
第七章 模块
第八章 异常处理和程序调试
第九章 文件及目录操作
第十章 GUI编程
第十一章 进程和线程
第十二章 数据库管理
第十三章 算法
第十四章 爬虫
第十五章 实战篇
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)