6、函数_1

1.编写如下程序

尝试函数部分分装:

a.用户输入1-7七个数字,分别代表周一到周日

b.如果输入1~5,打印对应的“周一”~“周五”,如果输入的数字是6或7,打印输出“周末”

c.如果输入0,退出循环

d.输入其他内容,提示:“输入有误,请重新输入!”

提示:本题可以使用if和while循环,同时需要校验用户的输入是否正确。不用考虑浮点数等情况。

 

2.列表去重

将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]去除重复元素

 

3.将两个变量的值进行交换(a = 100, b = 200)

交换之后,a = 200, b = 100, 使用函数。

4.编写如下程序

尝试函数部分封装:

输入一个人的身高(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:   严重肥胖
 
 
 
# 方法1,定义一个字典,key值存储用户输入,value存储对应的周期;key作为参数传入函数。需要处理1-5,6-7,0,不在此里面的输入
def my_input():
"""
这是一个根据输入数值判断是周几的函数!
定义一个字典,key值存储用户输入,value存储对应的周期;key作为参数传入函数。需要处理1-5,6-7,0,不在此里面的输入
暂不判断浮点数、字符串、中文等输入
:return:
"""
# 定义一个正确输入的列表,此处可以优化,使用keys()来判断
a = [1, 2, 3, 4, 5, 6, 7, 0]
# 定义一个存储信息的字典,key为查询的数字,value为key对应的周几
b = {
1: "今天是周一,忙碌的一周开始了",
2: "今天是周二,又是元气满满的一天",
3: "今天是周三,已经过去2天啦",
4: "今天是周四,离休息不远啦",
5: "今天是周五,明天又可以嗨嗨嗨啦",
6: "今天是周末,又是可以睡懒觉的一天",
7: "今天是周末,继续嗨起来",
0: "退出查询"
}
while True:
my_str = int(input("请输入1-7的数字,判断今天是周几:"))
if my_str in a[:7]: # 判断输入在正确范围1-7内
print(b[my_str]) # 根据key从字典中得出周几
elif my_str not in a: # 判断范围外的输入
print("输入{}有误,请重新输入!".format(my_str))
else: # 判断退出
print("不查询了,我选择{}!".format(b[my_str]))
break # 输入0,退出循环


# 调用函数,需手动传入参数
my_input()


# 方法2 使用列表取值
def week(i):
week_list = ['周一', '周二', '周三', '周四', '周五', '周末', '周末']
print(week_list[i - 1])


while True:

print('输入0-7八个数字,1-7分别代表周一到周日,0代表退出。')
a = input('请输入:')
# 输入必须为整数,且为0-7,否则报错!
if a.isdigit() and int(a) in range(8):
if a == '0':
print('退出!')
break
else:
print("输入有误,请重新输入!")

print("~" * 50, "上面为第一题答案", "~" * 50) # 打印空行,区分每题结果


# 方法2,定义列表,一个存储1-5,一个存储6-7,一个存储0 [1,2,3,4,5,6,7,0]

# 方法3,土方法,一个个判断

# 方法4,todo 精简版
def get_week_name(num):
dict_week = {"1": "周一", "2": "周二", "3": "周三", "4": "周四"
, "5": "周五", "6": "周六", "7": "周日"}

if num == "0":
return "break"
elif num not in dict_week.keys():
return ("error")
else:
return dict_week[num]


def main():
while True:
num = input("请输入1-7的数字,判断今天是周几:")
out = get_week_name(num)
if out == "break":
break
elif out == "error":
print("输入信息有误!")
continue
else:
print("今天是{}".format(out))

main()

"""
2.列表去重
将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]去除重复元素
"""


# todo 面试前作下这些题目,讲解多种方法,让自己在多个面试者当中脱颖而出

# 方法1 定义不传参的函数,函数体,set去重
def my_set(a):
"""
这是一个去除列表重复元素的函数,使用集合去重,然后转成列表,return接收
:param a: 变量a为参数
:return:
"""
b = list(set(a)) # 先转换列表为集合去重后在转换为列表
return b # 接收最终的结果


# 调用函数,传入列表,输出去重后的列表
c = my_set([10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1])
print("去重后的列表为{}".format(c)) # 打印


# 方法2,定义一个空列表,循环判断输入值,在里面的不添加到空列表,最后打印原来的空字典
def removal(num):
a = [] # 定义一个空列表,用来接收不重复的元素
for i in num: # 此处i为传入num的元素
if i not in a: # TODO 判断添加进的元素是否重复
a.append(i) # 将不重复的元素添加到原来的空列表
# print(i)
return a


list_new = removal([10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1])
print(list_new)


# 方法3,TODO remove删除重复的元素,判断传入的参数元素个数,个数大于1,删除该元素
def del_repetition(list_1):
"""
去除列表中的重复元素
:param list_1: 原始列表
:return: 去重后的列表
"""
new_list = list_1[:]
for i in new_list: # 此处有坑,不能赋值给变量,否则会跳着取元素(因为索引是不断增加的,列表不断变化),TODO 推荐使用切片来复制
if list_1.count(i) > 1: # 判断传入列表中重复的元素个数,大于1,删除该元素
list_1.remove(i)
return list_1


list_1 = [10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]
print(del_repetition(list_1))


# 方法4 使用count统计元素个数,定义一个空列表,判断里面的元素,如果空列表里没有则添加。
def unique_list(source_list):
new_list = []
for item in source_list:
if new_list.count(item) == 0: # TODO 判断新列表里是否有该元素,有则不添加,没有则添加
new_list.append(item)
return new_list


print(unique_list([10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]))
print("~" * 50, "上面为第二题答案", "~" * 50) # 打印空行,区分每题结果
# 方法2 排序后,remove删除元素。

# 方法3 排序后,pop删除元素,正负索引
# 需要先找的重复元素的索引值。。。


# 方法4,排序后,del删除元素,正负索引

# 方法5,排序后,切片,正负索引

"""
3.将两个变量的值进行交换(a = 100, b = 200)
交换之后,a = 200, b = 100, 使用函数。
"""


# 方法1,直接交换参数值,使用元祖解包,互换 值参数a,b传入值,return返回值
def swap(a, b):
"""
这是一个交换变量值的函数,直接重新赋值,return一个元祖
:param a:变量a
:param b:变量b
:return:
"""
b, a = a, b # 元祖解包
return a, b # 返回交换后的值


# 定义一个变量接收调用函数的结果,并打印输出
my_ans = swap(100, 200)
print("交换后的值为:{}".format(my_ans))


def switch(a, b):
a, b = b, a
return a, b


a = switch(100, 200)[0] # TODO 获取返回的a
b = switch(100, 200)[1] # 获取返回的b
print("""交换后为
a={},b={}
""".format(a, b))


# 方法2 将传入的参数存储在列表中,根据索引来取值互换值 ,不推荐使用
def swap(a, b):
list_1 = [a, b]
a = list_1[1]
b = list_1[0]
return ("a={} b={}".format(a, b))


print(swap(100, 200))

# 方法3,使用第三个变量,来交换值


print("~" * 50, "上面为第三题答案", "~" * 50) # 打印空行,区分每题结果
"""
4.编写如下程序
尝试函数部分封装:
输入一个人的身高(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: 严重肥胖
"""


# 参数:身高,体重 使用decimal?? round,校验异常输入。比较运算
def my_bmi(height, weight):
"""
这是一个计算BMI系数的函数,可以分辨出您的身体状况,使用decimal小数点过多,使用round取前两位小数
:param height:身高参数,单位为米
:param weight:体重参数,单位为kg
:return:
"""
# 定义一个变量,接收BMI计算公式
my_health = round((weight / (height ** 2)), 2)
# 根据题目要求进行判断
if 0 < my_health < 18.5:
print("哇塞,您也太苗条了吧,身高为{}米,体重为{}kg,BMI系数是{},太轻了".format(height, weight, my_health))
elif 18.5 <= my_health <= 25:
print("您很健康,身高为{}米,体重为{}kg,BMI系数是{},属于正常范围".format(height, weight, my_health))
elif 25 < my_health < 28:
print("额,您体重稍微超标了,身高为{}米,体重为{}kg,BMI系数是{},属于过重了".format(height, weight, my_health))
elif 28 <= my_health <= 32:
print("额,您体重严格超标了,身高为{}米,体重为{}kg,BMI系数是{},属于肥胖型".format(height, weight, my_health))
else:
print("额,您的健康出现了严重问题,身高为{}米,体重为{}kg,BMI系数是{},属于严重肥胖型".format(height, weight, my_health))


# 传入参数,调用函数
my_bmi(1.80, 65)
print("~" * 50, "上面为第四题答案", "~" * 50) # 打印空行,区分每题结果
"""
"""


# TODO 精简版
def get_bmi(height, weight):
return weight / height ** 2


def get_warning(bmi):
if bmi < 18.5:
return "过轻"
elif 18.5 <= bmi <= 25:
return "正常"
elif 25 < bmi < 28:
return "肥胖"
else:
return "过于肥胖"


def main():
"""函数的相互调用"""
    height = float(input("请输入身高:"))
weight = float(input("请输入体重:"))

bmi = get_bmi(height, weight)
# 接收上一个函数从返回值作为下一个函数的输入值


print(get_warning(bmi))
 
 
 
 
 
 
 
 
好文要顶 关注我 收藏该文  
posted @ 2020-05-29 21:09  lucky_little  阅读(357)  评论(0编辑  收藏  举报