7、函数_2

1. 将用户输入的所有数字相乘之后对20取余数

用户输入的数字个数不确定

 

2,编写函数,检查传入列表的长度,如果大于2,那么仅仅保留前两个长度的内容,并将新内容返回

 

3, 定义一个函数,传入一个字典和字符串,判断字符串是否为字典中的值,如果字符串不在字典中,则添加到字典中,并返回新的字典

 

4, 通过定义一个计算器函数,调用函数传递两个参数,然后提示选择【1】加 【2】减【3】乘 【4】除 操作,选择之后返回对应操作的值。

 

5, 一个足球队在寻找年龄在15岁到22岁的女孩做拉拉队员(包括15岁和22岁)加入。编写一个程序,询问用户的性别和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次后,输出满足条件的总人数。

 

 

 

#  return注意点、位置参数、关键字参数、默认参数、位置参数不定长、关键字参数不定长
# TODO 什么时候封装函数?
# 1.过程比较复杂,封装成函数。
# 2.多个地方会同时使用某一段程序,ctrl+c
# 3.封装成函数要不要参数??一般有参数的。也可以不传入参数(过程比较复杂)。
# 4.函数封装返回值一般是确定的,是根据参数确定的。
# 5.最好不要把input放在函数体里。

"""
1205-函数2
截至:12月10日 18:00
1. 将用户输入的所有数字相乘之后对20取余数
用户输入的数字个数不确定
"""


# 用户输入不确定,使用*args;输入数字;取余;
def my_input(*my_data):
"""
这是一个将用户输入的所有数字相乘然后对20取余数的函数
首先输入数字个数不确定,使用*args接收不定长参数;使用for遍历该不定长参数;
*= 有坑,需要再先定义另一个变量1,来求乘积。
然后定义一个变量来接收对20取余
:param my_data: 传入的不定长参数
:return:
"""
# 定义一个全局变量,用来接收乘积值,不能写在函数体内部,否则每次循环都会重新赋值
count = 1
for i in my_data: # 循环遍历用户输入的不定长参数
count *= i # 将每次取得的元素与count相乘并赋值给count
my_data = count % 20 # 在循环外,最终的乘积对20取余赋值给变量,用来返回
return count, my_data # 返回最终的乘积,取余后的结果,方便验证结果


test_1 = [1, 2, 3, 4, 5, 7] # 定义一个列表,传递参数,也可使用元祖来传递
a = my_input(*test_1) # 将return的元祖赋予一个变量,用来取值
print("输入一连串数字为{},其乘积为{},对20取余的结果为{}".format(test_1, a[0], a[1])) # 打印输入内容,乘积值,取余的结果
print("~" * 50, "上面是第一题答案", "~" * 50)
print()

"""
"""

# 题目分析,用户输入的数字个数不确定
# num = input("请输入数字:")

# 用,或者其他符号 *。注意分隔的逗号要与split里的一致
num = input("请输入数字,用逗号隔开:")
# 保存多个数据,用列表存储
# TODO 字符串转化成列表,用,分隔,使用split
num_list = num.split(",") # 注意输入数字的时候,使用的什么模式下的逗号,split里就得是什么模式下的逗号
# 取余数,逻辑稍微复杂一点的,封装成函数。get_mod()
# 方式:1,列表作为参数 方式2.不定长参数*args

def get_mod(*args):
# def get_mod(args):
product = 1
for arg in args:
product *= float(arg) # todo 为啥用数据转化呢。因为字符串分割成列表的是字符串。
return product % 20

print(get_mod(*num_list)) # 这样写运行会报错,num_list与*args不匹配,需要在num_list前面加入一个*,来解包
# print(get_mod(num_list)) # 这里的num_list是一个列表
# 可以把*args与*num_list前面的*去掉,就代表输入的是一个列表作为参数。
"""
2,编写函数,检查传入列表的长度,如果大于2,那么仅仅保留前两个长度的内容,并将新内容返回
"""


# 传入列表,使用*args接收; 长度使用len(); 大于2,判断使用if; 保留前2个长度的内容,切片; 使用return返回内容
# 先写函数主流程。再写逻辑


def my_return(my_list):
"""
这是一个判断列表长度的函数,如果长度大于2,则返回前2个元素的值
定义一个变量接收列表的长度,if判读长度,长度大于2切片取前两位返回,小等于2则让重新传值
:param my_list: 传入的参数值
:return: 返回值
"""
my_length = len(my_list) # 将输入的长度赋值给变量
if my_length <= 2: # 判断列表长度小于等于2的情况
print("您输入的列表{}长度不够哦,返回前2个长度的内容为空哦".format(my_list))
else: # 列表长度大于2的情况
return my_list[:2]


# 给定一个列表
b = ["name", "age", 1, 2, 3]
# 定义一个变量接收返回的值
a = my_return(b)
print("输入的列表为{},返回的前2个长度的内容为{}".format(b, a)) # 打印列表及前2个长度的内容
print("~" * 50, "上面是第二题答案", "~" * 50)
print()
"""

"""

# 下面是答案
def remain_two(mlist):
if len(mlist) > 2:
return mlist[:2]
return mlist


# todo 新知识 三目运算,三元表达式
def remain_two2(mlist):
return mlist[:2] if len(mlist) > 2 else mlist


"""
3, 定义一个函数,传入一个字典和字符串,判断字符串是否为字典中的值,如果字符串不在字典中,则添加到字典中,并返回新的字典
"""


# 字符串为字典中的值,字符串元素须为成对的元祖类型。
def my_dict(my_str, dic):
"""
这是一个判断是否往字典中传入内容的函数。
判断输入的字符串是否在字典的value()中,如果在则不返回,如果不在则添加到字典,key取my_str,值为my_str的值
:param my_str: 传入的字符串值
:param dic: 传入的字典值
:return:
"""
if my_str in dic.values(): # 判断字符串是否在字典的值当中,在则返回1
return 1
else: # 字符串不在字典中,则根据键值对添加到字典中
dic[my_str] = my_str
return dic


# 定义一个字符串
a = "gender"
# 定义一个字典
b = {"name": "lucky", "age": 18}
# 定义一个变量接收返回值
c = my_dict(a, b)
# print("输入的字符串为{},输入的字典为{},返回的新字典为{}".format(a, b, c)) # 打印输入值与返回值,此处注意字典已变化
print("返回的新字典为{}".format(c)) # 打印返回值,此处注意字典已变化
print("~" * 50, "上面是第三题答案", "~" * 50)
print()

"""
# 下面是答案及分析
分析题目。缺少key,只需要key保持不可变类型,并且是唯一的即可
可以使用random随机生成key值
"""
# TODO 使用随机数作为key值。
def add_element(e, mdict={}):
# TODO 不要把mdict={} 当成默认参数
if e not in mdict.values():
# e 作为key
mdict[e] = e
return mdict

import random


def add_element3(e, mdict={}):
# TODO 不要把mdict={} 当成默认参数
if e not in mdict.values():
# 使用随机数 作为key
while True:
key = random.randint(1, 9999)
# TODO 必须判断key是否在mdict.keys(),因为字典里的key必须是不可变数据类型且唯一
if key not in mdict.keys():
mdict[key] = e
break # 赋值成功,终止循环,此步不能少
return mdict


print(add_element("lucky", {"name": "xiaohong", "age": 18}))


# 方法2
# TODO 使用time作为key值
import time


def add_element2(e, mdict={}):
# TODO 不要把mdict={} 当成默认参数
if e not in mdict.values():
# e 作为key
mdict[int(time.time())] = e
return mdict


print(add_element2("lucky", {"name": "xiaohong", "age": 18}))

# TODO 有没有什么key 永远都不可能重复,时间
# import time
# int(time.time()) # 或int(datatime.now()) 自己需要练习。

"""
4, 通过定义一个计算器函数,调用函数传递两个参数,然后提示选择【1】加 【2】减【3】乘 【4】除 操作,选择之后返回对应操作的值。
"""


# 传递2个参数,用户选择1、2、3、4对应加减乘除操作,使用键值对。根据选择的操作返回对应操作的值。
def my_calc(x, y):
"""
这是一个根据选择进行计算器中2个数加减乘除的函数
使用字典存储用户选择
:param x: 第一个参数
:param y: 第二个参数
:return: 返回值
"""
# 定义一个用户选择的操作,根据用户选择的key值取用户想进行的操作
dict_1 = {"1": "+", "2": "-", "3": "*", "4": "/"}
# print(dict_1.keys()) # dict_keys(['1', '2', '3', '4']) # TODO 注意此处key的值为字符串,不需要转换input的类型
while True:
# 让用户选择要进行的操作
choose = input("请选择你想进行的操作【1】加 【2】减【3】乘 【4】除 ,输入对应的数字:")
if choose not in dict_1.keys(): # 用户输入的内容不再可操作范围内,让用户重新选择
print("您选择的操作有误,请重新选择")
elif choose == "1": # 用户选择加法操作
print("您想进行的操作为{}".format(dict_1[choose]))
return dict_1[choose], x + y # 取出对应的操作,返回2个值操作后的值
elif choose == "2": # 用户选择减法操作
print("您想进行的操作为{}".format(dict_1[choose]))
return dict_1[choose], x - y
elif choose == "3": # 用户选择乘法操作
print("您想进行的操作为{}".format(dict_1[choose]))
return dict_1[choose], x * y
else: # 用户选择除法操作
print("您想进行的操作为{}".format(dict_1[choose]))
return dict_1[choose], x / y


# 定义2个传入的值
m = 8
n = 2
# 定义一个变量接收返回值
res = my_calc(m, n)
print("用户输入的值是{},{},用户选择的操作是{},操作后得到的结果为{}".format(m, n, res[0], res[1])) # 打印用户选择的操作,操作后的值
print("~" * 50, "上面是第四题答案", "~" * 50)


# 下面是答案及分析,骚操作
"""
分析,需要传入2个参数,1个参数判断加减乘除
"""
methods = {"1": "+", "2": "-", "3": "*", "4": "/"}


def calc(x, y, method):
# methods['1'] = + - * /
method_f = methods[method]
# eval函数是将字符串转化成可以运行的python代码
return eval("{} {} {}".format(x, method_f, y))


print(calc(1, 2, 3))
"""
5, 一个足球队在寻找年龄在15岁到22岁的女孩做拉拉队员(包括15岁和22岁)加入。编写一个程序,询问用户的性别和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次后,输出满足条件的总人数。
"""


# 让用户输入性别、年龄。对年龄进行判断,共判断10次,在[15,22],则count值加1(count默认为0),最后返回count值
# 定义一个函数存储用户输入,存储到字典,判断性别女&年龄,符合则计数,不符合不计数,最后返回计数值。
def my_register(gender, age):
"""
这是一个判断能否成为啦啦队一员的函数
:param gender: 性别参数
:param age: 年龄参数
:return:
"""
if gender == "女" and 15 <= age <= 22: # 判断符合啦啦队的要求
print("恭喜你成为啦啦队的一员,登记信息为性别{},年龄{}".format(gender, age))
return 1 # 返回true
else: # 不符合啦啦队的要求。不处理
pass


def my_count():
"""
这是统计10次中有多少个女孩能成为拉拉队成员的函数
:return:
"""
# 定义变量,计数
count = 0
for i in range(10): # 判断10次
your_gender = input("请输入你的性别:") # 输入性别,数据类型为str
your_age = int(input("请输入你的年龄:")) # 输入年龄,数据类型为str,需要转换为int,方便比较
if my_register(your_gender, your_age): # 如果my_register函数返回的True则表示符合拉拉队的要求
count += 1 # 符合要求,招募名额加1
else: # my_register返回False,则告知不符合拉拉队的要求
print("很抱歉,您不符合啦啦队的要求,拉拉队的要求是女生且年龄在15-22岁,包含15和22岁!")
return count # 返回统计的符合条件的个数


# 定义一个变量来接收计数值
result = my_count()
print("总共询问了10次,共招募了{}个啦啦队队员".format(result))


# 精简
def join_team(age):
"""是否 可以加入足球队"""
if 15 <= age <= 22:
return True
return False


def main():
"""主程序"""
num = 0
for i in range(10):
age = input("输入年龄:")
if not age.isdigit():
print("输入不合法")
continue
joined = join_team(int(age))
if joined:
num += 1
print(num)
posted @ 2020-05-29 21:11  lucky_little  阅读(805)  评论(0编辑  收藏  举报