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 * 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)运行结果如下:
Python实验报告(第8章)的更多相关文章
- Python实验报告——第4章 序列的应用
实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...
- Python实验报告——第3章 流程控制语句
实验报告 [实验目的] 1.掌握python中流程控制语句的使用,并能够应用到实际开发中. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第三章流程控制语句实例01-09,实战一到实 ...
- Python实验报告——第2章 Python语言基础
实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...
- python实验报告(第五周)
一.实验目的和要求 学会使用字符串的常用操作方法和正确应用正则表达式. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:使用字符串拼接输出一个关于程序员的笑话 ...
- Python实验报告(第四周
一.实验目的和要求 学会应用列表.元组.字典等序列: 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:输出每日一贴 (1)在IDLE中创建一个名称为tips.p ...
- Python 实验报告(第三周)
一.实验目的和要求 1.熟练运用常见选择结构: 2.熟练运用for循环和while循环: 3.理解带else语句的循环结构执行过程和break.continue语句在循环中的作用. 二.实验环境 软件 ...
- 2017-2018-2 20165315 实验四《Android程序设计》实验报告
2017-2018-2 20165315 实验四<Android程序设计>实验报告 第24章:初识Android Android Studio项目的目录树 1 build:该目录包含了自动 ...
- Python程序设计实验报告一:熟悉IDLE和在线编程平台
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩_____ 日期 2020.3.8 指导老师 ...
- Python程序设计实验报告二:顺序结构程序设计(验证性实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩 日期 2020.3.22 指导老师 修宇 [实验 ...
- Python程序设计实验报告四:循环结构程序设计(设计型实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 姚彩琴 学号3190505129 成绩 日期 2020.4.8 指导老师 修宇 [实验名称 ...
随机推荐
- 从 C# 崩溃异常 中研究页堆布局
一:背景 1.讲故事 最近遇到一位朋友的程序崩溃,发现崩溃点在富编辑器 msftedit 上,这个不是重点,重点在于发现他已经开启了 页堆 ,看样子是做了最后的挣扎. 0:000> !analy ...
- 洛谷P5788 单调栈(模板)
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=3e6+10; 4 int n,a[N],s[N],ans[N ...
- .Net Framework中的AppDomain.AssemblyResolve事件的常见用法、问题,以及解决办法
一.简述 本文简要的介绍.NET Framework中System.AppDomain.AssemblyResolve事件的用法.使用注意事项,以及复杂场景下AssemblyResolve事件的污染问 ...
- CRT & EXCRT 学习笔记
这玩意解决的是把同余方程组合并的问题. CRT的核心思想和拉格朗日插值差不多,就是构造一组\(R_i\)使得$\forall i,j(i \neq j) $ \[R_im_i = 1, R_im_j ...
- Python凯撒密码加解密
#凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...
- Vue学习之--------组件嵌套以及VueComponent的讲解(代码实现)(2022/7/23)
欢迎加入刚建立的社区:http://t.csdn.cn/Q52km 加入社区的好处: 1.专栏更加明确.便于学习 2.覆盖的知识点更多.便于发散学习 3.大家共同学习进步 3.不定时的发现金红包(不多 ...
- 人生苦短,我用 python 之入门篇
Python 是一种跨平台的,开源的,免费的,解释型的高级编程语言,它具有丰富和强大的库,其应用领域也非常广泛,在 web 编程/图形处理/黑客编程/大数据处理/网络爬虫和科学计算等领域都能找到其身影 ...
- 洛P8109题解
摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p8109 本题原题目摘录: 本场比赛共有 \(n\) 道题,Ci ...
- Java多线程(7):JUC(上)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面把线程相关的生命周期.关键字.线程池(ThreadPool).ThreadLocal.CAS.锁和AQS都讲完了,现在就剩下怎么来用多线程了 ...
- Scrapy 发送Request Payload
Scrapy 发送Request Payload 首先要打开 F12 进入调试模式 然后 查看是用什么方法获取的 如果是Json: 1. json.dumps 转化成Json yield Reques ...