零基础学Python学习笔记四函
22
函数的定义和常用操作
name.txt内容諸葛亮
關羽
劉備
曹操
孫權
關羽
張飛
呂布
周瑜
趙雲
龐統
司馬懿
黃忠
馬超
#读取人物名称f=open(name.txt,encoding=UTF-8)#encoding=UTF-8代表编码模式data=f.read()data0=data.split(
)print(data0)输出:
C:\Users\wongj\AppData\Local\Programs\Python\Python39\python.exeC:/Users/wongj/Desktop/零基础学Python/txt/guo.py[諸葛亮,關羽,劉備,曹操,孫權,關羽,張飛,呂布,周瑜,趙雲,龐統,司馬懿,黃忠,馬超]Processfinishedwithexitcode0
#读取兵器名称f2=open(weapon.txt,encoding=UTF-8)#data2=f2.read()i=1forlineinf2.readlines():ifi%2==1:print(line.strip(\n))i+=1
#读取全文f3=open(sanguo.txt,encoding=GB)#以什么样的字符编码进行打开print(f3.read().replace(\n,))#。replace()把换行符替换成空的值
涉及大量的重复语句块,以上语句句法优雅度不足。我们希望把重复的代码块提取出来,然后只执行一次,引入函数概念:
#定义一个函数,作用是读取人物名称deffunc(filename):#定义一个参数,filename表示将参数传入此函数中print(open(filename,encoding=UTF-8).read())func(name.txt)#filename变量会获得name.txt
注:每个函数实际上是可以获得多个参数的
继续以更简洁的语句对前面的程序语句进行改写:
importre#引入一个新的模块deffind_item(hero):#定义一个变量名为herowithopen(sanguo.txt,encoding=GB)asf:data=f.read().replace(\n,)name_num=re.findall(hero,data)#使用re.findall这个函数,第一个参数匹配主角名字符串,#第二个参数匹配完整的文章,将英雄名出现的次数返回给我们的变量print(主角%s出现%s次%(hero,len(name_num)))returnlen(name_num)#主程序,定义函数为此主程序服务)name_dict={}#定义一个元组withopen(name.txt,encoding=UTF=8)asf:forlineinf:names=line.split(
)forninnames:#print(n)#我们要做的事情不是输出,故注释掉name_num=find_item(n)#将主角的名字传到find_item()这个函数中,此函数返回主角出现的次数给name_numname_dict[n]=name_num#元组的key为主角的名字,value为主角出现的次数
输出:
C:\Users\wongj\AppData\Local\Programs\Python\Python39\python.exeC:/Users/wongj/Desktop/零基础学Python/timegeekbang.
|