跳至正文
View Categories

1 min read

主要内容 #

综合实战:能简单了解模块化编程的基本流程,掌握python大型程序实现的基本思路。本节课主要简单介绍mydisplay和myanalyse模块的实现,python包实现中__init__.py函数的一些设计,以及主函数的功能实现

12.myanalyse模块的实现 #

根据模块设计的思路,我们对myanalyse模块进行实现和测试
# coding=gbk
'''模块myanalyse,主要用于对英文单词列表进行处理并进行词性分析'''
def myanalyse(wordlist=[]):
    '''根据输入的单词列表对词性进行分析,返回两个字典
    返回的两个字典分别表示每种词性个数,以及内容'''
    wdic1={'名词':0,'动词':0,'形容词':0,'介词':0}
    wdic2={'名词':[],'动词':[],'形容词':[],'介词':[]}
    for string in wordlist:
        if 'n.' in string:#对于每个检索出的英文单词根据后缀判断词性,可观察资源文件的词性标注确定
            wdic1['名词']+=1
            wdic2['名词'].append(string)
        if 'a.' in string:
            wdic1['形容词']+=1
            wdic2['形容词'].append(string)
        if 'vi.' in string or 'vt.' in string:
            wdic1['动词'] += 1
            wdic2['动词'].append(string)
        if 'prep.' in string:
            wdic1['介词']+=1
            wdic2['介词'].append(string)
    return wdic1,wdic2
if __name__ == '__main__':#模块测试
    dict1,dict2=myanalyse(['good a.好的'])
    print(dict1,dict2)

13.mydisplay模块的实现 #

同上对mydispaly模块进行实现和测试
# coding=gbk
'''模块mydisplay,用来展示检索的结果'''
def mydisplay(*args):#*args接收不同长度的参数,并打包成元组
    '''展示两个key值相同的字典或者其它内容'''
    if len(args)==2 and isinstance(args[0],dict)\ #isinstance()函数判断数据类型
            and isinstance(args[1],dict):#如果输入的对象是两个字典,按以下方式展示
        for key in args[0]:
            print(key,args[0][key],args[1][key])
    else:
        print(args)
if __name__=='__main__':#模块测试
    mydisplay('test')

14.__init__.py的设计 #

  • 在之前的课程中我们学习过,__init__.py是python包的标识,是在导入包时首先执行的文件
  • 我们可以在其中,将我们需要的模块方法或者变量导入进来,使得我们整个包对外呈现的像一个模块一样
  • 你也可以根据需要不对__init__.py做任何事情,但是在后续使用该包的时候可能比较麻烦
  • 当然你也可以使用__all__=[…]的形式规定from mydic import*导入哪些模块的方法进行设定
  • #__init__.py
    __all__=['mysearch','myanalyse','mydisplay']#设定from mydic import*时导入列表内哪些模块的方法,也可以不加因为默认就是全部导入
    from mydic.mysearch import *
    from mydic.myanalyse import *
    from mydic.mydisplay import *

    15.main.py的设计 #

    在mydic包之外新建main.py文件,通过对我们已经实现的包mydic的调用,实现程序设计的两个功能
    import mydic#导入mydic包
    word=mydic.mysearch(head='mis',path='mydic\\六级单词.txt')#单词检索,注意路径
    mydic.mydisplay(*word)#word本身就是列表,在前面加上*后表示将列表解构后,每个列表的元素都作为函数参数
    mydic.mydisplay(*mydic.myanalyse(word))#同上,myanalyse(word)返回的是两个字典组成的元组,将元组解构后传入两个字典作为函数参数

    习题 #

  • python中*号有很多的用处,请尽量总结一下*有哪些用法,并用实际例子验证
  • OJ训练题 #

    1、可逆素数 – ★
    2、剪绳子 – ★
    3、最少的交换次数 – ★★
    4、切割蛋糕 – ★★★
    5、拉格朗日定理 – ★★★★