07、day07函数相关的作业1

函数相关的作业

  1. 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者

    def new_len(lt):
        my_len = []
        for i in range(len(lt)):
            if i % 2 != 0:
                my_len.append(lt[i])
        return my_len
    
    
    print(new_len([1, 2, 3, 4, 5, 6, 7, 8, 9]))  # [2, 4, 6, 8]
    
  2. 写函数,判断用户传入的对象(字符串,列表,元组)长度是否大于5

    def five_len(slt):
        return len(slt) > 5
    print(five_len([1,2,3,4,5,6]))  # True
    print(five_len('dkjaslffjdlasjkf'))  # True
    print(five_len((1,3,4)))  # False
    
  3. 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

    def two_len(li):
        return li[:2] if len(li) > 2 else li
    print(two_len([1,2,3]))
    
  4. 写函数,计算传入函数的字符串中[数字]、[字母]以及[其他]的个数,并返回结果

    def str_inspect(st):
        num_count = 0
        letter_count = 0
        other_count = 0
        for i in st:
            if i.isdigit():
                num_count += 1
            elif i.isalpha():
                letter_count += 1
            else:
                other_count += 1
        return "该字符串中,数字有:%s个,字母有:%s个,其他有:%s个" %(num_count, letter_count, other_count)
    print(str_inspect('sdjkf23fjds3994(#$*'))
    
  5. 写函数,接收两个数字参数,返回比较大的那个数字

    def max_num(a, b):
        return a if a > b else b
    print(max_num(1,2))
    
  6. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    dic = {"k1":"v1v1", "k2":[11,22,33,44]}

    ps:字典中的value只能是字符串或列表

    def dic_len2(dic):
        new_dic = {}
        for key, value in dic.items():
            new_dic[key] = value[:2]
        return new_dic
    print(dic_len2({"k1": "v1v1", "s2": [11, 22, 33, 44]}))
    
  7. 写函数,此函数直接收一个参数且此函数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为次联播的索引及对应的元素,例如传入的列表为:[11,22,33]返回的字典为

    {0:11, 1:22, 2:33}

    def replace_dic(li):
        new_dic = {}
        for i in range(len(li)):
            new_dic[i] = li[i]
        return new_dic
    print(replace_dic([11,22,33]))
    
  8. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入的函数中,此函数的接收到这四个内容,将内容追加到一个student_msg文件中

    def user_msg(n, s, a, e):
        with open('student_msg', encoding='utf-8', mode='a') as f1:
            f1.write('姓名:%s, 性别:%s, 年龄:%s, 学历:%s' % (n, s, a, e))
    while True:
        name = input('请输入姓名(Q或q退出):')
        if name.upper() == 'Q': break
        sex = input('请输入性别(Q或q退出):')
        if sex.upper() == 'Q': break
        age = input('请输入年龄(Q或q退出):')
        if age.upper() == 'Q': break
        edu = input('请输入学历(Q或q退出):')
        if edu.upper() == 'Q': break
        user_msg(name, sex, age, edu)
    
  9. 对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女

  10. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(选做题)

    import os
    
    
    def file_0(path, old_content, new_content):
        # 1.以读的方式打开原文件
        # 2.以写的模式创建一个新文件
        with open(path, encoding='utf-8') as f1, \
                open(path + '.bak', encoding='utf-8', mode='w') as f2:
            # 3.将原文件的内容读出来修改成新内容,写入新文件
            for line in f1:  # 第一次循环第一行,以此类推,每次只读一行,节省内存
                new_line = line.replace(old_content, new_content)
                f2.write(new_line)  # 写一行(读一行写一行,一行一行执行)
        os.remove(path)
        os.rename(path + '.bak', path)
    
    
    file_0('alex自述', 'alex', 'SB')
    file_0('t1', '太白', 'SB1')
    
posted @ 2020-04-06 22:47  Murphy_Yang  阅读(88)  评论(0)    收藏  举报