09 练习题:函数、参数

# 1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def odd_index(iterable):
    return iterable[1::2]


# 2.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def longer_than_5(iterable):
    # return True if len(iterable) > 5 else False
    return len(iterable) > 5

# 3.写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def retain_2(list):
    return list if len(list) <= 2 else list[:2]


# 4.写函数,计算传入函数的字符串中,[数字]、[字母] 以及 [其他]的个数,并返回结果。
def count_type(string):
    count_list = [0, 0, 0]
    for char in string:
        if char.isdecimal() == True:
            count_list[0] += 1
        elif char.isalpha() == True:
            count_list[1] += 1
        else:
            count_list[2] += 1
    return count_list


# 5.写函数,接收两个数字参数,返回比较大的那个数字。
def cmp(digit_1, digit_2):
    return digit_1 if digit_1 > digit_2 else digit_2


# 6.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# PS:字典中的value只能是字符串或列表
def retain_value_2(dic):
    for key in dic.keys():
        dic[key] = dic[key] if len(dic[key]) < 2 else dic[key][:2]
    return dic


# 7.写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def list_to_dic(list):
    dic = {}
    for i in range(len(list)):
        dic.setdefault(i, list[i])
    return dic


# 8.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
def append_student(name, gender, age ,degree):
    with open(r'03 作业\student_msg.txt', encoding='utf-8', mode='a') as file_handler:
        file_handler.write(name + ' ' + gender + ' ' + age + ' ' + degree + '\n')
while 1:
    name = input('name:\n')
    gender = input('gender:\n')
    age = input('age:\n')
    degree = input('degree:\n')
    append_student(name, gender, age, degree)
    if input('continue append?(input q or Q to exit)\n').upper() == 'Q':
        break


# 9.对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
def append_student(name, age ,degree, gender='girl'):
    with open(r'03 作业\student_msg.txt', encoding='utf-8', mode='a') as file_handler:
        file_handler.write(name + ' ' + gender + ' ' + age + ' ' + degree + '\n')
while 1:
    name = input('name:\n')
    gender = input('gender:\n')
    age = input('age:\n')
    degree = input('degree:\n')
    if gender == '':
        append_student(name, age, degree)
    else:
        append_student(name, age, degree, gender)
    if input('continue append?(input q or Q to exit)\n').upper() == 'Q':
        break


# 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(选做题)。
def revise_file(old_contents, new_contents, file_name):
    import os
    with open(r'03 作业\{}'.format(file_name), encoding='utf-8', mode='r') as file_handler_1,\
            open(r'03 作业\{}.bak'.format(file_name), encoding='utf-8', mode='w') as file_handler_2:
        for line in file_handler_1:
            line = line.replace(old_contents,new_contents)
            file_handler_2.write(line)
    os.remove(r'03 作业\{}'.format(file_name))
    os.rename(r'03 作业\{}.bak'.format(file_name), r'03 作业\{}'.format(file_name))
revise_file('alex', 'SB', 'alex自述')
posted @ 2020-07-06 23:22  Raigor  阅读(192)  评论(0编辑  收藏  举报