007、py43-day07-sky-20210809
题目一:定义函数,并通过给函数传递不同的参数(要想清楚哪些做为参数哦!!):
一家商场在降价促销,所有原价都是整数(不需要考虑浮点情况),如果购买金额50-100元(包含50元和100元)之间,
会给10%的折扣,如果购买金额大于100元会给20%折扣。编写一程序,询问购买价,再显示出折扣(%10或20%)和最终价格。
代码如下:
def shopping(price):
if price < 0:
print('价格不能小于0')
else:
discount = 0
str_discount = ''
if price > 100:
discount = 0.2
str_discount = '2折'
elif 50 <= price <= 100:
discount = 0.1
str_discount = '1折'
elif 0 <= price < 50:
str_discount = '无折扣'
discount = 0
result = price*(1-discount)
print(f'该商品的折扣为:{str_discount},最终价格为:{result}')
# 函数调用,测试数据
shopping(-1)
shopping(0)
shopping(49.5)
shopping(50)
shopping(51)
shopping(100)
shopping(101)
shopping(110.5)
执行结果如下:
价格不能小于0
该商品的折扣为:无折扣,最终价格为:0
该商品的折扣为:无折扣,最终价格为:49.5
该商品的折扣为:1折,最终价格为:45.0
该商品的折扣为:1折,最终价格为:45.9
该商品的折扣为:1折,最终价格为:90.0
该商品的折扣为:2折,最终价格为:80.80000000000001
该商品的折扣为:2折,最终价格为:88.4
Process finished with exit code 0
题目二:不定长参数
定义函数,将输入的所有数字相乘之后对20取余数,用户输入的数字个数不确定。
代码如下:
def func(*args):
if len(args) != 0:
temp = 1
for i in args:
temp *= i
result = temp % 20
print(f'输入的所有数字相乘之后对20取余数,结果为:{result}')
else:
print('没有给函数传参数')
# 函数调用,测试数据
func()
func(21)
func(3, 7)
func(1, 3, 7)
func(0, 3, 7)
执行结果如下:
没有给函数传参数
输入的所有数字相乘之后对20取余数,结果为:1
输入的所有数字相乘之后对20取余数,结果为:1
输入的所有数字相乘之后对20取余数,结果为:1
输入的所有数字相乘之后对20取余数,结果为:0
Process finished with exit code 0
题目三:列表去重函数
定义一个函数 def remove_element(a_list):,将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]
去除重复元素(不能用集合去重,要使用for循环)。
def remove_repeatitive_elements(a_list):
...
my_list = [10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]
remove_repeatitive_elements(my_list)
代码如下:
def remove_repeatitive_elements(*a_list):
new_list = []
for i in a_list:
if i not in new_list:
new_list.append(i)
print(f'去重后的列表为:{new_list}')
# 函数调用
my_list = [10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]
remove_repeatitive_elements(*my_list)
执行结果如下:
去重后的列表为:[10, 1, 2, 20, 3, 15, 44, 56]
Process finished with exit code 0
题目四:通过定义一个计算器函数,调用函数传递两个参数,
然后提示选择【1】加 【2】减【3】乘 【4】除 操作,选择之后返回对应操作的值。
代码如下:
def calculator(*args):
operator = input('请输入运算,【1】加 【2】减 【3】乘 【4】除:')
result = 0
for i in range(len(args)):
if i == 0:
result = args[i]
if i > 0:
if operator == '1':
result += args[i]
if operator == '2':
result -= args[i]
if operator == '3':
result *= args[i]
if operator == '4':
result /= args[i]
print(f'结果为:{result}')
# 函数调用
calculator(1, 2)
calculator(3, 4)
calculator(5, 6)
calculator(8, 2)
执行结果如下:
请输入运算,【1】加 【2】减 【3】乘 【4】除:1
结果为:3
请输入运算,【1】加 【2】减 【3】乘 【4】除:2
结果为:-1
请输入运算,【1】加 【2】减 【3】乘 【4】除:3
结果为:30
请输入运算,【1】加 【2】减 【3】乘 【4】除:4
结果为:4.0
Process finished with exit code 0
题目五:BMI 计算
使用函数完成以下操作
输入一个人的身高(m)和体重(kg),根据BMI公式(体重除以身高的平方)计算他的BMI指数
a.例如:一个65公斤的人,身高是1.62m,则BMI为 : 65 / 1.62 ** 2 = 24.8
b.根据BMI指数,给与相应提醒
低于18.5: 过轻 18.5-25: 正常 25-28: 过重 28-32: 肥胖 高于32: 严重肥胖
def get_bmi(height, weight):
代码如下:
def get_bmi(height, weight):
bmi = weight / (height**2)
if 0 < bmi < 18.5:
print('过轻')
elif 18.5 <= bmi < 25:
print('正常')
elif 25 <= bmi <= 28:
print('过重')
elif 28 <= bmi <= 32:
print('肥胖')
elif bmi > 32:
print('严重肥胖')
else:
print('请输入大于0的身高和体重')
# 函数调用
get_bmi(1.7, 65)
执行结果如下:
正常
Process finished with exit code 0
题目六:挑选足球运动员
一个足球队在寻找年龄在15岁到22岁的女孩做拉拉队员(包括15岁和22岁)加入。
编写一个程序,根据用户的姓名,性别和年龄,打印这个人是否可以加入球队,询问10次后,打印满足条件的所有人的名字。(要求:定义函数处理逻辑)
代码如下:
# 练习拆包
all_players = [
{'name': '张爱玲', 'gender': '女', 'age': 100},
{'name': '张韶涵', 'gender': '女', 'age': 10},
{'name': '张天爱', 'gender': '女', 'age': 15},
{'name': '林志玲', 'gender': '女', 'age': 20},
{'name': '袁克定', 'gender': '男', 'age': 20},
{'name': '袁克文', 'gender': '男', 'age': 10},
{'name': '袁世凯', 'gender': '男', 'age': 100},
{'name': '徐世昌', 'gender': '男', 'age': 15},
{'name': '张勋', 'gender': '男', 'age': 20},
{'name': '武则天', 'gender': '女', 'age': 21},
{'name': '慈禧太后', 'gender': '女', 'age': 17},
{'name': '貂蝉', 'gender': '女', 'age': 25}
]
# 筛选符合条件的运动员 函数
def func(**kwargs):
if kwargs['gender'] == '女' and (15 <= kwargs['age'] <= 22):
print(f"{kwargs['name']} ,可以加入 女子足球队\n")
return True
else:
print(f"{kwargs['name']} ,不可以加入 女子足球队\n")
return False
# 筛选10次,得到最终结果
def qualified_football_player(*args):
qualified_football_players = []
count = 0
for player_info in args:
count += 1
if func(**player_info):
qualified_football_players.append(player_info)
if count == 10:
break
print('已统计10次,满足条件的人名:')
for item in qualified_football_players:
print(item['name'], end='\t')
# 函数调用
qualified_football_player(*all_players)
执行结果如下:
张爱玲 ,不可以加入 女子足球队
张韶涵 ,不可以加入 女子足球队
张天爱 ,可以加入 女子足球队
林志玲 ,可以加入 女子足球队
袁克定 ,不可以加入 女子足球队
袁克文 ,不可以加入 女子足球队
袁世凯 ,不可以加入 女子足球队
徐世昌 ,不可以加入 女子足球队
张勋 ,不可以加入 女子足球队
武则天 ,可以加入 女子足球队
已统计10次,满足条件的人名:
张天爱 林志玲 武则天
Process finished with exit code 0
题目七:列表和字典数据类型转换
# 有一组用例数据如下:
cases = [
['case_id', 'case_title', 'url', 'data', 'excepted'],
[1, '用例1', 'www.baudi.com', '001', 'ok'],
[4, '用例4', 'www.baudi.com', '002', 'ok'],
[2, '用例2', 'www.baudi.com', '002', 'ok'],
[3, '用例3', 'www.baudi.com', '002', 'ok'],
[5, '用例5', 'www.baudi.com', '002', 'ok'],
]
# 要求一:把上述数据转换为以下格式
res1 = [
{'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
{'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
]
# 要求二:把上面转换好的数据中case_id大于3的用例数据获取出来,得到如下结果
res = [
{'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
]
方法一, 代码如下:
cases = [
['case_id', 'case_title', 'url', 'data', 'excepted'],
[1, '用例1', 'www.baudi.com', '001', 'ok'],
[4, '用例4', 'www.baudi.com', '002', 'ok'],
[2, '用例2', 'www.baudi.com', '002', 'ok'],
[3, '用例3', 'www.baudi.com', '002', 'ok'],
[5, '用例5', 'www.baudi.com', '002', 'ok']
]
res1 = []
dict = {}
import copy
for i in range(1, len(cases)):
for j in range(len(cases[i])):
dict[cases[0][j]] = cases[i][j]
# print(temp_dict)
temp_dict = copy.deepcopy(dict)
res1.append(temp_dict)
print(res1)
# 排序
res1.sort(key=lambda k: k['case_id'])
new_list = []
for i in range(len(res1)):
if i > 2:
new_list.append(res1[i])
print(new_list)
执行结果如下:
[{'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
{'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}]
[{'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}] Process finished with exit code 0
方法二、代码如下:
cases = [
['case_id', 'case_title', 'url', 'data', 'excepted'],
[1, '用例1', 'www.baudi.com', '001', 'ok'],
[4, '用例4', 'www.baudi.com', '002', 'ok'],
[2, '用例2', 'www.baudi.com', '002', 'ok'],
[3, '用例3', 'www.baudi.com', '002', 'ok'],
[5, '用例5', 'www.baudi.com', '002', 'ok']
]
# 要求一:
res1 = []
for i in range(1, len(cases)):
dict = {}
for j in range(len(cases[i])):
dict[cases[0][j]] = cases[i][j]
res1.append(dict)
print(res1)
# 要求二:
# 把上面转换好的数据中case_id大于3的用例数据获取出来,得到如下结果
new_list = []
for item in res1:
if item['case_id'] > 3:
new_list.append(item)
print(new_list)
执行结果如下:
[{'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
{'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}]
[{'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
{'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}] Process finished with exit code 0