最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【世界热闻】Python实验报告(第8章)

来源:博客园

实验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 * height11 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 _width10     return _width11 def getHeight():       # 获取高度的函数12     global _height13     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 + rightnumber13         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_12 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=112     for i, j in fu.items():13         if j==0:14           type=015     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按下键获取五福") 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 time10 def Study(time):11     print( "上网学习",str(time) + "小时")12     return time13 def times(time):14     if time >= 8:15        print("今天上网时间共计" + str(time) + "小时,请保护眼睛,合理安排上网时间!")16     return time

引用模块的代码如下:

1 import sz3_12 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 - 55511         elif z <= 35000:12             t = z * 0.25 -100513         elif z <= 55000:14             t = z * 0.3 -275515         elif z <= 80000:16             t = z * 0.35 - 550517         else:18             t = z * 0.45 - 1350519     tt = "{:.2f}".format(t)20     print(tt)

引用模块的代码如下:

1 import sz4_12 salary = float(input("请输入月收入:"))3 if salary>=7662:4     money = salary - 7662 * 0.2255 else:6     money = salary * 0.7757 z = money - 35008 print("应纳个人所得税税额为",end = "")9 sz4_1.my_tax(z)

(2)运行结果如下:

关键词: 天气预报 全局变量 个人所得税