实验8:模块

一、实验目的和要求

1、了解模块的内容;

2、掌握模块的创建和导入方式;

3、了解包结构的创建和使用。

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

1、实例01:创建计算BMI指数的模块

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

 1 def fun_bmi(person,height,weight):
2 '''功能:根据身高和体重计算BMI指数
3 person:姓名
4 height:身高,单位:米
5 weight:体重,单位:千克
6 '''
7
8 print(person + "的身高:" + str(height) + "米\t体重:" + str(weight) + "千克")
9 bmi=weight/(height*height) # 用于计算BMI指数,公式为:BMI=体重/身高的平方
10 print(person + "的BMI指数为:"+str(bmi))  # 输出BMI指数
11 # 此处省略了显示判断结果的代码
12 def fun_bmi_upgrade(*person):
13 '''功能:根据身高和体重计算BMI指数(升级版)
14 *person:可变参数该参数中需要传递带3个元素的列表,
15 分别为姓名、身高(单位:米)和体重(单位:千克)
16 '''
17
18 # 此处省略了函数主体代码

2、实例02:导入两个包括同名函数的模块

(1)创建两个模块,一个是矩形模块,其中包括计算矩形周长和面积的函数;另一个是圆形,其中包括计算圆形周长和面积的函数。然后在另一个Python文件中导入这两个模块,并调用相应的函数计算周长的面积。具体步骤如下:

1.创建矩形模块,对应的文件名为rectangle.py,在该文件中定义两个函数,一个用于计算矩形的周长,另一个用于计算矩形的面积,代码如下:

 1 def girth(width,height):
2 '''功能:计算周长
3 参数:width(宽度)、height(高)
4 '''
5 return(width + height)*2
6 def area(width,height):
7 '''功能:计算面积
8 参数:width(宽度)、height(高)
9 '''
10 return width * height
11 if __name__ == '__main__':
12 print(area(10,20))

2.创建圆形模块,对应的文件名称为circular.py,在该文件中定义两个函数,一个用于计算圆形的周长,另一个用于计算圆形的面积,代码如下:

 1 import math                         # 导入标志模块math
2 PI = math.pi # 圆周率
3 def girth(r):
4 '''功能:计算周长
5 参数:r(半径)
6 '''
7 return round(2 * PI * r ,2 ) # 计算周长并保留两位小数
8 def area(r):
9 '''功能:计算面积
10 参数:r(半径)
11 '''
12 return round(PI * r * r ,2 ) # 计算面积并保留两位小数
13 if __name__ == '__main__':
14 print(girth(10))

3.创建一个名称为compute.py 的Python文件,首先导入矩形模块的全部定义,然后导入圆形模型的全部定义,最后分别调用计算矩形周长的函数和计算圆形周长的函数,代码如下:

1 from rectangle import *                    # 导入矩形模块
2 from circular import * # 导入圆形模块
3 if __name__ == '__main__':
4 print('圆形的周长为:',girth(10)) # 调用计算圆形周长的函数
5 print('矩形的周长为:',girth(10,20)) # 调用计算矩形周长的函数

执行compute.py文件,结果如下:

从图中可以看出执行步骤(3)的第5行代码时出现异常,这是因为原本想执行的矩形模块的girth() 函数被圆形模块的girth() 函数给盖住了。解决该问题的方法是,不使用from...import 语句导入,而是使用import 语句导入。修改后的代码如下:

1 import rectangle as r                          # 导入矩形模块
2 import circular as c # 导入圆形模块
3 if __name__ == '__main__':
4 print('圆形的周长为:',c.girth(10)) # 调用计算圆形周长的函数
5 print('矩形的周长为:',r.girth(10,20)) # 调用计算矩形周长的函数

(2)运行结果如下:

3、实例03:在制定包中创建通用的设置和获取尺寸的模块

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,在settings包中,创建一个名称为size的模块,在该模块中,定义两个保护类型的的全局变量,分别代表宽度和高度,然后定义一个change()函数,用于修改两个全局变量的值,在定义两个函数,分别用于获取宽度和高度,代码如下:

 1 width = 800             # 定义保护类型的全局变量(宽度)
2 height = 600 # 定义保护类型的全局变量(高度)
3 def change(w,h):
4 global _width # 全局变量(宽度)
5 _width = w # 重新给宽度赋值
6 global _height # 全局变量(高度)
7 _height = h # 重新给高度赋值
8 def getWidth(): # 获取宽度的函数
9 global _width
10 return _width
11 def getHeight(): # 获取高度的函数
12 global _height
13 return _height

在settings 包的上一层目录中创建一个名称为main.py的文件,在该文件中导入settings包下的size模块的全部定义,并且调用change()函数重新设置宽度和高度,然后在分别调用getWidth()和getHeight()函数获取修改后的宽度和高度,具体代码如下:

1 from settings.size import *         # 导入size模块下的全部定义
2 if __name__=='__main__':
3 change(1024,768) # 调用change()函数改变尺寸
4 print('宽度:',getWidth()) # 输出宽度
5 print('高度:',getHeight()) # 输出高度

(2)运行结果如下:

4、实例04:生成由数字、字母组成的4位验证码

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

 1 import random                                           # 导入标准模块中的random
2 if __name__=='__main__':
3 checkcode = "" # 保存验证码的变量
4 for i in range(4): # 循环4次
5 index = random.randrange(0,4) # 生成0~3中的一个数
6 if index != i and index + 1 != i:
7 checkcode += chr(random.randint(97,122)) # 生成a~z中的一个小写字母
8 elif index + 1 == i:
9 checkcode += chr(random.randint(65,90)) # 生成A~Z中的一个大写字母
10 else:
11 checkcode += str(random.randint(1,9)) # 生成1~9中的一个数字
12 print("验证码:",checkcode) # 输出生成的验证码

(2)运行结果如下:

5、实战01:大乐透号码生成器

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

 1 import random
2 def GreatLotto(times):
3 Greatnumber = []
4 for i in range(0,times):
5 numbers = []
6 leftlist = list(range(1,36))
7 leftnumber = random.sample(leftlist,5)
8 rightlist = list(range(1,13))
9 rightnumber = random.sample(rightlist,2)
10 leftnumber.sort()
11 rightnumber.sort()
12 numbers = leftnumber + rightnumber
13 for n in range(len(numbers)):
14 if numbers[n]<10:
15 numbers[n] = '0'+ str(numbers[n])
16 Greatnumber.append( numbers)
17 return Greatnumber

引用模块的代码如下:

1 import sz1_1
2 print("大乐透生成器")
3 time = input("请输入要随即大乐透号码注数:")
4 Greatnumber = sz1_1.GreatLotto(int(time))
5 for i in range(0,int(time)):
6 print('{} {} {} {} {} {} {}'.format(Greatnumber[i][0],Greatnumber[i][1],
7 Greatnumber[i][2],Greatnumber[i][3],
8 Greatnumber[i][4],Greatnumber[i][5],
9 Greatnumber[i][6]))

(2)运行结果如下:

6、实战02:春节集五福

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

 1 import  random
2 def Ji_Fu():
3 fus=['爱国福','富强福','和谐福','友善福','敬业福']
4 fu = random.sample(fus,1)
5 return fu
6 def fus(fu):
7 print('当前拥有的福:')
8 for i, j in fu.items():
9 print(i,': ',j,'\t',end='')
10 def five_blessings(fu):
11 type=1
12 for i, j in fu.items():
13 if j==0:
14 type=0
15 return type;

引用模块的代码如下:

 1 import sz2_1
2 print('开始集福啦~~~')
3 fu={'爱国福':0,'富强福':0,'和谐福':0,'友善福':0,'敬业福':0}
4 while sz2_1.five_blessings(fu)==0:
5 input('\n按下<Enter>键获取五福')
6 Strfu=sz2_1.Ji_Fu()[0]
7 print('获取到:' + Strfu)
8 fu[Strfu] += 1
9 sz2_1.fus(fu)
10 print('\n恭喜您集成五福!!!')

(2)运行结果如下:

7、实战03:封装用户的上网行为

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

 1 def net_play(time):
2 print("浏览网页",str(time) + "小时")
3 return time
4 def Watch_videos(time):
5 print("看视频",str(time) + "小时")
6 return time
7 def Play_game(time):
8 print("玩网络游戏",str(time) + "小时")
9 return time
10 def Study(time):
11 print( "上网学习",str(time) + "小时")
12 return time
13 def times(time):
14 if time >= 8:
15 print("今天上网时间共计" + str(time) + "小时,请保护眼睛,合理安排上网时间!")
16 return time

引用模块的代码如下:

1 import sz3_1
2 name = "小明"
3 time = 0;
4 print(name,"上网时间、行为统计:")
5 time += sz3_1.net_play(1.5)
6 time += sz3_1.Watch_videos(2)
7 time += sz3_1.Play_game(3)
8 time += sz3_1.Study(2)
9 sz3_1.times(time)

(2)运行结果如下:

8、实战04:计算个人所得税

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

 1 def my_tax(z):
2 if z <= 0:
3 print("NULL")
4 else:
5 if z <= 1500:
6 t = z * 0.03
7 elif z <= 4500:
8 t = z * 0.1 - 105
9 elif z <= 9000:
10 t = z * 0.2 - 555
11 elif z <= 35000:
12 t = z * 0.25 -1005
13 elif z <= 55000:
14 t = z * 0.3 -2755
15 elif z <= 80000:
16 t = z * 0.35 - 5505
17 else:
18 t = z * 0.45 - 13505
19 tt = "{:.2f}".format(t)
20 print(tt)

引用模块的代码如下:

1 import sz4_1
2 salary = float(input("请输入月收入:"))
3 if salary>=7662:
4 money = salary - 7662 * 0.225
5 else:
6 money = salary * 0.775
7 z = money - 3500
8 print("应纳个人所得税税额为",end = "")
9 sz4_1.my_tax(z)

(2)运行结果如下:

最新文章

  1. BZOJ4643 : 卡常大水题
  2. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
  3. Mysql的Error 1364
  4. log4net 快速上手使用
  5. iOS开发篇-AFNetworking 上传和下载
  6. C#之关于时间的整理
  7. hibernate分页查询的实现
  8. 修改了SpringBoot的主类名称后,gradle build报错的解决办法
  9. [bzoj1088]扫雷
  10. 基于IAR平台FreeRTOS移植
  11. 19_04_02校内训练[deadline]
  12. 2. Net、ASP.Net、C#、VisualStudio之间的关系
  13. FlinkCEP - Complex event processing for Flink
  14. File类文件的常见操作
  15. every day a practice —— morning(6)
  16. org.apache.ibatis.binding.BindingException: Invalid bound statement
  17. Storm 第三章 Storm编程案例及Stream Grouping详解
  18. 【Cf #502 F】The Neutral Zone
  19. 在JS数组指定位置插入元素
  20. IP地址、域名、域名解析系统相关

热门文章

  1. Node.js(二)express
  2. RNN自学理解(一)
  3. Python编程之定时任务(crontab)详解
  4. Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令
  5. SQL 报表制作和整形
  6. (二)Three光线检测-实现摄像机向鼠标点击位置滑动动画
  7. 【Bluetooth|蓝牙开发】二、蓝牙开发入门
  8. Oracle:ORA-39006、ORA-39213解决办法
  9. Byte和byte的区别
  10. 用 vue3 中的 reduce(累加器) 随机生成100个字母,放入数组中,统计每个字母出现的次数