Python实验报告(第6章)
阅读原文时间:2023年07月09日阅读:1

实验6:函数

1、掌握函数的创建和调用;

2、了解不同的参数如何进行传递;

3、了解返回值的应用;

4、学习变量的作用域;

5、学习匿名函数(lambda)。

软件版本:Python 3.10 64_bit

1、实例01:输出每日一贴(共享版)

(1)在IDLE中创建一个名称为function_tips.py的文件,然后在该文件中创建一个名称为function_tips的函数,在该函数中,从励志文字列表中获取一条励志文字并输出,最后再调用函数function_tips,代码如下:

1 def function_tips(): #定义函数
2 '''功能:每天输出一条励志文字
3 '''
4 import datetime #引用datetime模块
5 mot = ["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择",
6 "今天星期二:\n含泪播种的人一定能笑着收获",
7 "今天星期三:\n做对的事情比把事情做对重要",
8 "今天星期四:\n命运给予我们的不是失望之酒,而是机会之杯",
9 "今天星期五:\n不要等到明天,明天太遥远,今天就能行动",
10 "今天星期六:\n求知若饥,虚心若愚",
11 "今天星期日:\n成功将属于那些从不说“不可能”的人"]
12 day = datetime.datetime.now().weekday()
13 print(mot[day])
14 function_tips() #调用函数

(2)运行结果如下:

2、实例02:根据身高、体重计算BMI指数(共享版)

(1)在IDLE中创建一个名称为function_bmi.py的文件,然后在该文件中定义一个名称为fun_bmi的函数,该函数包括3个参数,分别用于指定姓名、身高和体重,再根据公式BMI=体重/(身高*身高)计算BMI指数,并输出结果,最后在函数体外调用两次fun_bmi函数,代码如下:

1 def fun_bmi(height,weight,person = "路人"): #参数1:height,参数2:weight,已赋值参数:person
2 '''功能:根据身高和体重计算BMI指数
3 person:姓名
4 height:身高,单位:米
5 weight:体重,单位:千克
6 '''
7 print(person + "的身高:" + str(height) + "米\t体重:" + str(weight) + "千克")
8 bmi = weight/(height*height)
9 print(person + "的BMI指数为:"+str(bmi))
10 if bmi<18.5: 11 print("您的体重过轻~@_@~\n") 12 if bmi >=18.5 and bmi<24.9: 13 print("正常范围,注意保持(-_-)\n") 14 if bmi >=24.9 and bmi<29.9: 15 print("您的体重过重~@_@~\n") 16 if bmi>=29.9:
17 print("肥胖^@_@^\n")
18 fun_bmi(1.73,60)

(2)运行结果如下:

3、实例03:根据身高、体重计算BMI指数(共享升级版)****

(1)在IDLE中创建一个名称为function_bmi_upgrade.py的文件,然后在该文件中定义一个名称为function_bmi_upgrade的函数,该函数包括一个可变参数,用于指定包括姓名、身高和体重的测试人信息,在该函数中将根据测试人信息计算BMI指数,并输出结果,最后在函数体外定义一个列表,并且将该列表作为function_bmi_upgrade()函数的参数调用,代码如下:

1 def fun_bmi_upgrade(*person):
2 '''功能:根据身高和体重计算BMI指数(共享升级版)
3 *person:可变参数该参数中需要传递带3个元素的列表,
4 分别为姓名、身高(单位:米)和体重(单位:千克)
5 '''
6 for list_person in person:
7 for item in list_person:
8 person = item[0]
9 height = item[1]
10 weight = item[2]
11 print("\n" + "="*13,person,"="*13)
12 print("身高:"+str(height)+"米\t体重:"+str(weight)+"千克")
13 bmi = weight/(height*height)
14 print("BMI指数:"+str(bmi))
15 if bmi<18.5: 16 print("您的体重过轻~@_@~\n") 17 if bmi >=18.5 and bmi<24.9: 18 print("正常范围,注意保持(-_-)\n") 19 if bmi >=24.9 and bmi<29.9: 20 print("您的体重过重~@_@~\n") 21 if bmi>=29.9:
22 print("肥胖^@_@^\n")
23 #**********************************************调用函数****************************#
24 list_w = [('绮梦',1.70,65),('零语',1.78,50),('黛兰',1.72,66)]
25 list_m = [('梓轩',1.80,75),('冷伊一',1.75,70)]
26 fun_bmi_upgrade(list_w,list_m)

(2)运行结果如下:

4、实例04:模拟结账功能—计算实付金额

(1)在IDLE中创建一个名称为checkout.py的文件,然后在该文件中定义一个名称为fun_checkout的函数,该函数包括一个列表类型的参数,用于保存输入的金额,在该函数中计算合计金额和相应的折扣,并将计算结果返回,最后在函数体外通过循环输入多个金额保存到列表中,并且将该列表作为fun_checkout()函数的参数调用,代码如下:

1 def fun_checkout(money):
2 '''功能:计算商品合计金额并进行折扣处理
3 money:保存商品金额的列表
4 返回商品的合计金额和折扣后的金额
5 '''
6 money_old = sum(money)
7 money_new = money_old
8 if 500 <= money_old <1000: 9 money\_new = '{:.2f}'.format(money\_old \* 0.9) 10 elif 1000 <= money\_old <= 2000: 11 money\_new = '{:.2f}'.format(money\_old \* 0.8) 12 elif 2000 <= money\_old <= 3000: 13 money\_new = '{:.2f}'.format(money\_old \* 0.7) 14 elif money\_old >= 3000:
15 money_new = '{:.2f}'.format(money_old * 0.6)
16 return money_old,money_new
17 #********************************************调用函数********************************#
18 print("\n开始结算……\n")
19 list_money = []
20 while True:
21 #请不要输入非法的金额,否则将抛出异常
22 inmoney = float(input("输入商品金额(输入0表示输入完毕):"))
23 if int(inmoney) == 0:
24 break
25 else:
26 list_money.append(inmoney)
27 money = fun_checkout(list_money)
28 print("合计金额:",money[0],"应付金额:",money[1])

(2)运行结果如下:

5、实例05:一棵松树的梦

(1)在IDLE中创建一个名称为differenttree.py的文件,然后在该文件中定义一个全局变量pinetree,并为其赋初始值,再定义一个名称为fun_christmastree的函数,在该函数中定义名称为pinetree的局部变量,并输出,最后在函数体外调用fun_christmastree()函数,并输出全局变量pinetree的值,代码如下:

1 pinetree = '我是一棵松树'
2 def fun_christmastree():
3 '''功能:一个梦
4 无返回值
5 '''
6 pinetree = '挂上彩灯、礼物……我变成一颗圣诞树@^.^@\n'
7 print(pinetree)
8 #******************************************函数体外****************************************#
9 print('\n下雪了\n')
10 print('============== 开始做梦了…… ===============\n')
11 fun_christmastree()
12 print('============== 梦醒了…… =================\n')
13 pinetree = '我身上落满雪花,' + pinetree + '-_-'
14 print(pinetree)

(2)运行结果如下:

6、实例06:应用lambda实现对爬取到的秒杀商品信息进行排序

(1)在IDLE中创建一个名称为seckillsort.py的文件,然后在该文件中定义一个保存商品信息的列表,并输出,接下来再使用列表对象的sort()方法对列表进行排序,并且在调用sort()方法是,通过lambda表达式指定排序规则,最后输出排序后的列表,代码如下:

1 bookinfo = [('不一样的卡梅拉(全套)',22.50,120),('零基础学Android',65.10,89.80),
2 ('摆渡人',23.40,36.00),('福尔摩斯探案全集8册',22.50,128)] #定义列表[(),()]
3 print('爬取到的商品信息:\n',bookinfo,'\n')
4 bookinfo.sort(key=lambda x:(x[1],x[1]/x[2])) #升序排序(关键字:lambda 参数:返回值)
5 print('排序后的商品信息:\n',bookinfo)

(2)运行结果如下:

7、实战01:导演为剧本选主角

(1)在IDLE中创建一个名称为mainchar.py的文件,模拟导演为剧本选主角,并输出确定剧本主角的名字,代码如下:

1 def zhujue(a):
2 '''功能:连接字符串
3 '''
4 print(a+ "开始参演这个剧本")
5 a = input("导演选定的主角是:")
6 zhujue(a)

(2)运行结果如下:

8、实战02:模拟美团外卖商家的套餐

(1)在IDLE中创建一个名称为menu.py的文件,模拟实现输出该米线店推出的套餐,代码如下:

1 def taocan(str1,str2,str3):
2 print("米线店套餐如下:1." +str1+ " 2."+str2+" 3."+str3)
3 a = '13元'
4 b = '9.9元'
5 c = '20元'
6 print(str1+a)
7 print(str2+b)
8 print(str3+c)
9 taocan('考神套餐','单人套餐','情侣套餐')

(2)运行结果如下:

9、实战03:根据生日判断星座

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

1 def panduan(month,day):
2 if (month == 3 and 21<=day<=31)|(month == 4 and 1<=day<=19):
3 print(str(month)+"月"+str(day)+"日星座为:"+"白羊座")
4 elif (month == 4 and 20<=day<=30)|(month == 5 and 1<=day<=20):
5 print(str(month)+"月"+str(day)+"日星座为:"+"金牛座")
6 elif (month == 5 and 21<=day<=31)|(month == 6 and 1<=day<=21):
7 print(str(month)+"月"+str(day)+"日星座为:"+"双子座")
8 elif (month == 6 and 22<=day<=30)|(month == 7 and 1<=day<=22):
9 print(str(month)+"月"+str(day)+"日星座为:"+"巨蟹座")
10 elif (month == 7 and 23<=day<=31)|(month == 8 and 1<=day<=22):
11 print(str(month)+"月"+str(day)+"日星座为:"+"狮子座")
12 elif (month == 8 and 23<=day<=31)|(month == 9 and 1<=day<=22):
13 print(str(month)+"月"+str(day)+"日星座为:"+"处女座")
14 elif (month == 9 and 23<=day<=30)|(month == 10 and 1<=day<=23):
15 print(str(month)+"月"+str(day)+"日星座为:"+"天秤座")
16 elif (month == 10 and 24<=day<=31)|(month == 11 and 1<=day<=22):
17 print(str(month)+"月"+str(day)+"日星座为:"+"天蝎座")
18 elif (month == 11 and 23<=day<=30)|(month == 12 and 1<=day<=21):
19 print(str(month)+"月"+str(day)+"日星座为:"+"射手座")
20 elif (month == 12 and 22<=day<=31)|(month == 1 and 1<=day<=19):
21 print(str(month)+"月"+str(day)+"日星座为:"+"摩羯座")
22 elif (month == 1 and 20<=day<=31)|(month == 2 and 1<=day<=18):
23 print(str(month)+"月"+str(day)+"日星座为:"+"水瓶座")
24 elif (month == 2 and 19<=day<=30)|(month == 3 and 1<=day<=20):
25 print(str(month)+"月"+str(day)+"日星座为:"+"双鱼座")
26 month = int(input("请输入月份(例如:5):"))
27 day = int(input("请输入日期(例如:17):"))
28 panduan(month,day)

(2)运行结果如下:

10、实战04:将美元转换为人民币

(1)在IDLE中创建一个名称为change.py的文件,模拟美元和人民币转换,本实战以1美元转换6.28人民币计算,代码如下:

1 def zhuanhuan():
2 '''功能:美元金额转换为人民币
3 '''
4 dollar= input("请输入要转换的美元金额:")
5 rmb = float(6.28*int(dollar))
6 print("转换后的人民币金额是:",rmb)
7 zhuanhuan()

(2)运行结果如下: