zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    winform窗体扁平化设置,窗体移动,关闭
    WPF按钮控件模板
    C#连接Sqlite报错:{"试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)"}
    C#SQLite使用教程笔记
    C#自定义控件导航菜单(自定义事件,属性)
    LCS局域网屏幕监控系统安装指导
    System.Data.SQLite.dll 未安装或者版本冲突,按下面步骤操作即可 1、从Nuget卸载所有项目的System.Data.SQLite.dll 和SqlSugar,检查引用中是否还存在,存在直接删掉引用,然后Nuget重新安装即可
    C#项目脱落NuGet
    JavaScript跨域总结与解决办法
    回流与重绘:CSS性能让JavaScript变慢?
  • 原文地址:https://www.cnblogs.com/little-lucky/p/12989608.html
Copyright © 2011-2022 走看看