Python实验报告——第8章 模块
实验报告
【实验目的】
1.掌握Python内置的标准模块和第三方模块的使用。
【实验条件】
1.PC机或者远程编程环境。
【实验内容】
1.完成第八章 文件及目录操作 实例01-04,实战一到实战四
实例01:创建计算BMi指数的模块
创建一个用于根据身高、体重计算BMI 指数的模块,命名为 bmi.py,其中 bmi为模块名,.py为扩展名。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 def fun_bmi(person, height,weight) : 2 '''功能:根据身高和体重计算BMI指数''' 3 print(person +"的身高: " + str(height)+ "米\t体重: " + str(weight)+ 4 "千克") 5 bmi=weight/ ( height*height) 6 7 def fun_bmi_upgrade(*person) : 8 #功能:根据身高和体重计算BMI指数(升级版) 9 # 此处省略了函数主体代码
![复制代码](https://common.cnblogs.com/images/copycode.gif)
实例02:导入两个包括同名函数的模块
创建两个模块,一个是矩形模块,其中包括计算矩形周长和面积的函数;另一个是圆形,其中包括计算圆形周长和面积的函数。然后在另一个Python文件中导入这两个模块,并调用相应的函数计算周长和面积。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #rectangle.py 2 def girth(width, height): 3 return (width + height) * 2 4 5 6 def area(width, height): 7 return width * heightif 8 9 10 if __name__ == '__main__': 11 print(area(10, 20))
![复制代码](https://common.cnblogs.com/images/copycode.gif)
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #circular.py 2 import math 3 PI = math.pi 4 def girth(r): 5 return round(2*PI*r, 2) 6 7 def area(r): 8 return round(PI*r*r, 2) 9 10 if __name__ == '__main__': 11 print(girth(10))
![复制代码](https://common.cnblogs.com/images/copycode.gif)
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #compute.py 2 import rectangle as r 3 import circular as c 4 if __name__ == '__main__': 5 print("圆形的周长为: ", c.girth(10)) 6 print("矩形的周长为: ", r.girth(10, 20))
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下:
实例03:在指定包中创建通用的设置和获取尺寸的模块
创建一个名称为settings的包,在该包下创建一个名称为size的模块,通过该模块实现设置和获取尺寸的通用功能。(1)在 settings包中,创建一个名称为size的模块,在该模块中,定义两个保护类型的全局变量,分别代表宽度和高度,然后定义一个change()函数,用于修改两个全局变量的值,再定义两个函数,分别用于获取宽度和高度。(2)在settings包的上一层目录中创建一个名称为main.py的文件,在该文件中导入.settings包下的size模块的全部定义,并且调用change()函数重新设置宽度和高度,然后再分别调用getWidth()和getHeight()函数获取修改后的宽度和高度。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #size.py 2 _width = 800 3 _height = 600 4 def change(w,h): 5 global _width 6 _width = w 7 global _height 8 _height = h 9 10 def getwidth(): 11 global _width 12 return _width 13 14 def getHeight(): 15 global _height 16 return _height
![复制代码](https://common.cnblogs.com/images/copycode.gif)
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #main.py 2 from settings.size import * 3 4 if __name__ =='__main__': 5 change(1024, 768) 6 print('宽度: ', getwidth()) 7 print('高度: ', getHeight())
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下:
实例04:生成由数字、字母组成的4位验证码
在IDLE中创建一个名称为checkcode.py的文件,然后在该文件中导入 Python标准模块中的random模块(用于生成随机数),然后定义一个保仔验让码的受里,世片 1o书饮A乎书的哈证码,最后输出在该循环中,调用random模块提供的randrange()和 randint()方法生成符合要求的验证码,最后输出生成的验证码。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 import random 2 checkcode = "" 3 for i in range(4): 4 index = random.randrange(0, 4) 5 if index != i and index + 1 != i: 6 checkcode += chr(random.randint(97, 122)) # 生成a~z中的一个小写字母 7 elif index + 1 == i: 8 checkcode += chr(random.randint(65, 90)) # 生成A~Z中的一个大写字母 9 else: 10 checkcode += str(random.randint(1, 9)) 11 print("验证码:", checkcode)
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下:
实战一:大乐透号码生成器
使用Random模块模拟大乐透号码生成器。选号规则为:前区在1~35的范围内随机产生不重复的5个号码,后区在1~12的范围内随机产生不重复的2个号码。效果如图8.18所示。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 import random 2 def number(): 3 a=[random.randint(1,35) for i in range(5)] 4 list1=[] 5 for i in a: 6 if i not in list1: 7 list1.append(i) 8 else: 9 i=random.randint(1,35) 10 list1.append(i) 11 list1.sort() 12 a=[str(i) for i in list1] 13 b=[random.randint(1,12) for i in range(2)] 14 o=[] 15 for i in b: 16 if i not in o: 17 o.append(i) 18 else: 19 i=random.randint(1,12) 20 o.append(i) 21 o.sort() 22 b=[str(i) for i in o] 23 c=[" "*5] 24 for i in range(5): 25 if len(a[i])==2: 26 for j in range(2): 27 if len(b[j])==2: 28 pass 29 else: 30 b[j]='0'+b[j] 31 else: 32 a[i]='0'+a[i] 33 g=a+c+b 34 for i in g: 35 print(i,end=" ") 36 print("大乐透号码生成器") 37 k=int(input("请输入要生成的大乐透号码注数:")) 38 for i in range(k): 39 number() 40 print("")
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下:
实战二:春节集五福
最近两年流行春节集五福活动。现编程实现模拟春节集五福的过程。效果如图8.19所示。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 import random 2 # 抽五福的方法 3 def Ji_fu(): 4 fus = ['爱国福', '富强福', '和谐福', '友善福', '敬业福'] 5 fu = random.sample(fus, 1) 6 return fu 7 8 # 打印当前拥有的所有福 9 def fus(fu): 10 print('当前拥有的福:') 11 # 字典的键值对遍历方法 打印福卡 12 for i, j in fu.items(): 13 print(i, ':', j, '\t', end='') 14 # 判断是否集齐五福 15 def fu_ready(fu): 16 # 设置一个集齐的标识flag,等于1表示集齐了 17 flag = 1 18 for i,j in fu.items(): 19 if j == 0: # 有一个福卡的数量为0 20 flag = 0 # 标识为0,可以继续集福 21 return flag 22 print('开始集福了…………') 23 # 定义一个五福字典 保存用户的福卡 24 fu = {'爱国福': 0, '富强福': 0, '和谐福': 0, '友善福': 0, '敬业福': 0} 25 # 用一个while语句循环获取五福,直到集齐为止 26 count = 0 # 设置一个计数器,记录集福的次数 27 while fu_ready(fu) == 0: # 集齐标识为0 28 input("\n按下<enter>键获取福卡:") 29 getfu = Ji_fu()[0] # 进行抽卡 30 print('获取了:', getfu) 31 fu[getfu] += 1 # 将抽到的卡加入五福字典,相应数量+1 32 fus(fu) # 调用方法打印当前拥有的五福 33 fu_ready(fu) # 调用方法判断是否集齐 34 count +=1 35 print("\n***五福已经集齐,真是有福之人***") 36 print("一共集福",count,'次')
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下:
实战三:封装用户的上网行为
当下很多人都会用一定的时间上网。现编程实现封装用户的上网行为,对用户的上网时间进行统计,当上网时间过长时,给出提示。效果如图8.20所示。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 # 网页浏览时间统计 2 def web(time): 3 print("浏览网页:"+str(time)+"小时;") 4 return time 5 # 看视频时间统计 6 def video(time): 7 print("看视频:"+str(time)+"小时;") 8 return time 9 # 玩网络游戏时间统计 10 def playgame(time): 11 print("玩网络游戏:"+str(time)+"小时;") 12 return time 13 # 上网学习时间统计 14 def study(time): 15 print("上网学习:"+str(time)+"小时。") 16 return time 17 # 合计上网时间统计 18 def total(time): 19 print('今天上网时间共计:'+str(time)+"小时,",end=' ') 20 if time >= 8: 21 print("请保护眼睛,合理安排上网时间!") 22 else: 23 print("比较合理,但也要注意休息!") 24 25 26 name = '小明' 27 print(name, '上网时间、行为统计……') 28 t1 = web(1.5) 29 t2 = video(2) 30 t3 = playgame(3) 31 t4 = study(2) 32 time = t1 + t2 + t3 + t4 33 total(time)
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下:
实战四:计算个人所得税
编写一个计算个人所得税的程序,随时掌握自己的工资需要缴纳多少个人所得税。效果如图8.21所示。
代码如下:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 # 根据月收入算个税模块 2 def tax(monthmoney): 3 # 最低起征点3500 4 ds = 3500 5 baoxian = 7662 6 # 养老保险 7 yanglao = monthmoney * 0.08 8 # 医疗保险 9 yiliao = monthmoney * 0.02 10 # 失业保险 11 shiye = monthmoney * 0.005 12 # 公积金 13 housem = monthmoney * 0.12 14 # 计算三险一金总额,如超过上限按上限算 15 demoney = yanglao + yiliao + shiye + housem 16 if demoney >= 7662: 17 demoney = 7662 18 # 计算应征税额 19 lastmoney = monthmoney - demoney - ds 20 # 按不同档次征税,定义税额taxes 21 if lastmoney <= 0: 22 taxes = 0 23 elif 0< lastmoney < 1500: 24 taxes = lastmoney * 0.03 25 elif 1500 <= lastmoney < 4500: 26 taxes = lastmoney * 0.1 - 105 27 elif 4500 <= lastmoney < 9000: 28 taxes = lastmoney * 0.2 - 555 29 elif 9000 <= lastmoney < 35000: 30 taxes = lastmoney * 0.25 - 1005 31 elif 35000 <= lastmoney < 55000: 32 taxes = lastmoney * 0.3 - 2002 33 elif 55000 <= lastmoney < 80000: 34 taxes = lastmoney * 0.35 - 5505 35 elif 80000 <= lastmoney: 36 taxes = lastmoney * 0.45 - 13505 37 # if lastmoney < 0: 38 # taxes = 0 39 return taxes 40 41 42 m = float(input("请输入您的月收入总额:")) 43 taxes = tax(m) 44 print('您应征个人所得税金额为:{:.2f} 元'.format(taxes))
![复制代码](https://common.cnblogs.com/images/copycode.gif)
运行结果如下: