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