函数基础-练习题

'''
练习题1:
    1. 文件a1.txt内容

        序号     部门      人数      平均年龄      备注
        1       python    30         26         单身狗
        2       Linux     26         30         没对象
        3       运营部     20         24         女生多
        .......
        通过代码,将其构建成这种数据类型:
            [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},......]
'''

# dic1 = {}
# l1 = []
# f1 = open('D:\\a1.txt', encoding='utf-8', mode='r')  # 打开文件a1.txt
# for line in f1:
#     l = line.strip().split()  # 首先去除换行和空格行,之后将str-->list,其中split默认方式是按照空格进行分割。
#     if l == ['序号', '部门', '人数', '平均年龄', '备注']:
#         dic1['序号'] = ''
#         dic1['部门'] = ''
#         dic1['人数'] = ''
#         dic1['平均年龄'] = ''
#         dic1['备注'] = ''
#     else:
#         for i in range(len(l)):
#             dic1['序号'] = l[0]
#             dic1['部门'] = l[1]
#             dic1['人数'] = l[2]
#             dic1['平均年龄'] = l[3]
#             dic1['备注'] = l[4]
#             dic2 = dic1.copy()  # 进行浅拷贝,将dic1的数据拷贝至dic2,主要是用于防止数据的覆盖,因为在空间中开辟的是同一内存空间,如果不拷贝的话,后面会直接把前面的覆盖。
#             l1.append(dic2)
# f1.close()
#
# #  删除重复的数据
# for i in range(len(l1) - 1, -1, -1):
#     if l1[i] == l1[i - 1]:
#         del l1[i]
# print(l1)


'''
2. 传入函数的字符串中,[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。
'''
#
# def my_count(s):
#     n1 = 0
#     n2 = 0
#     n3 = 0
#     n4 = 0
#     for i in s:
#         if i == ' ':  # 判断是否为空格
#             n1 = n1 + 1
#         elif i.isdigit():  # 判断是否是数字
#             n2 = n2 + 1
#         elif i.isalnum():  #判断是否是字母(由于第2个判断已经过滤掉数字了, 所以该部分只能过滤出字母)
#             n3 = n3 + 1
#         else:  # 判断是否为其他字符
#             n4 = n4 + 1
#     s1 = '在输入的字符串中,输入的数字个数:' + str(n2) + ',' + '输入的字母个数:' + str(n3) + ',' + '输入的空格个数为:' + str(
#         n1) + ',' + '输入其他的个数为:' + str(n4)
#     return s1
#
#
# s = input('请输入任意字符串:')
#
# print(my_count(s))


'''
3. 写函数,接收两个数字参数,返回比较大的那个数字。
'''
#
# def my_count(a, b): return a if a > b else b
# print(my_count(110, 120))

'''
4. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
        dic = {"k1": "v1v1", "k2": [11,22,33,44]}
        PS:字典中的value只能是字符串或列表
'''
# def my_len(l):
#     dic = l
#     if type(dic) == dict:
#         for k,v in dic.items():
#             if  len(dic[k]) > 2:
#                 dic[k] = dic[k][0:2]
#     else:
#         dic = '输入的为非字典型数据,请重新输入'
#     return dic
#
# dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
# print(my_len(dic))

'''
5. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,
此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
'''

# def list_change_dic(l):
#     dict = {}
#     if type(l) == list:
#         for i in range(len(l)):
#             dict[i] = l[i]
#         return dict
#     else:
#         str = '输入非列表数据类型无法使用该函数'
#         return str
#
# l = [11, 22, 33]
# print(list_change_dic(l))

'''
6. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,
此函数接收到这四个内容,将内容追加到一个student_msg文件中。
'''

# name = input('请输入姓名:')
# sex = input('请输入性别:')
# age = input('请输入年龄:')
# education = input('请输入学历:')
#
#
# def student_msg(name, sex, age, education):
#     f1 = open('student_msg', encoding='utf-8', mode='a')
#     f1.write(name)
#     f1.write(sex)
#     f1.write(age)
#     f1.write(education)
#     f1.close()
#
#
# student_msg(name, sex, age, education)

'''
7. 对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
'''


# def wfile(name, age, sex='男'):
#     with open('登记表', encoding='utf-8', mode='a') as f1:
#         f1.write('{}|{}|{}\n'.format(name, age, sex))
#
#
# while 1:
#     name = input('姓名(输入Q/q退出):')
#     if name.upper() == 'Q': break
#     age = input('年龄:')
#     if name.startswith(' '):  # 当遇到以空格为开头的名字说明为女生。
#         sex = input('性别:')
#         wfile(name, age, sex)
#     else:
#         wfile(name, age)

'''
8. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。 *****为什么不替换内容呢?
'''


# def modify_file(filename, content, replace_content):
#     import os
#
#     with open(filename, encoding='utf-8') as f1, \
#             open('filename.bak', encoding='utf-8', mode='w') as f2:
#         old_content = f1.read()
#         new_contenet = old_content.replace(content, replace_content)
#         f2.write(new_contenet)
#
#     os.remove(filename)
#     os.rename('filename.bak', filename)


# modify_file('登记表', '张三', '李四')


'''
9. 读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
        a=10
        b=20
        def test5(a,b):
            a=3
            b=5
            print(a,b)
        c = test5(b,a)
        print(c)
'''
# a = 20 ,b = 10,c =None
#通过函数调用,调用test5函数,将20赋值给a,将10赋值给b,函数无返回值所以c为None。

'''
10. 写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),将每个实参的每个元素依次添加到函数的动态参数args里面.
        例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)
'''


# def func(*args):
#     print(args)
#
#
# l1 = [1, 2, 3]
# t1 = (22, 33)
# func(*l1, *t1)

'''11. 写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs里面.
        例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}

'''
# def func(**kwargs):
#     print(kwargs)
#
#
# func(**{'name': 'alex'}, **{'age': 1000})

'''
12. 下面代码成立么?如果不成立为什么报错?怎么解决?
        题目一:
            a = 2
            def wrapper():
                    print(a)
            wrapper()

        题目二:
            a = 2
            def wrapper():
                    a += 1
                print(a)
            wrapper()
        题目三:
            def wrapper():
                    a = 1
                    def inner():
                        print(a)
                    inner()
                wrapper()
        题目四:
            def wrapper():
                    a = 1
                    def inner():
                        a += 1
                        print(a)
                    inner()
                wrapper()
'''

# 题目1:成立
# a = 2
#
#
# def wrapper():
#     print(a)
#
#
# wrapper()

# 题目2:不成立,由于局部变量调用全局变量并且进行了修改,所以不成立。增加一个global声明下a即可。
# a = 2
#
#
# def wrapper():
#     global a  # 增加代码
#     a += 1
#
#
# print(a)
# wrapper()
# 题目3:代码成立
# def wrapper():
#     a = 1
#
#     def inner():
#         print(a)
#
#     inner()
#
#
# wrapper()

# 题目4:不成立,由于局部变量调用全局变量并且进行了修改,所以不成立。增加一个global声明下a即可。
# def wrapper():
#     a = 1
#
#     def inner():
#         global a  # 增加代码
#         a += 1
#         print(a)
#
#     inner()
#
#
# wrapper()

'''
13. 写函数,接收两个数字参数,将较小的数字返回.
'''
#
# def my_count(a, b): return a if a < b else b
#
#
# print(my_count(100, 99))

'''
14. 写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.
        例如 传入的可迭代对象为[1,'老男孩','武sir']返回的结果为’1_老男孩_武sir’
'''


# def func(l=[]):
#     s1 = '_'.join('%s' % id for id in l)  # 循环是用于把int型转换为
#     return s1
#
#
# list = [1, 2, 3, 4, 5, 6, '老男孩', '武sir', 7, 8, 9]
# print(func(list))



'''
15. 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
        例如:如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)
'''


# def min_max(*args, **kwargs):
#     dic = {}  # 定义一个字典用于存储数据
#     dic['max'] = int(max(args))
#     dic['min'] = int(min(args))
#     return dic
#
#
# print(min_max(2, 5, 7, 8, 4))

'''
16. 写函数,传入一个参数n,返回n的阶乘
        例如:cal(7)  计算7*6*5*4*3*2*1
'''

#
# def cal_step(n):
#     count = 1
#     for i in range(1, n + 1):
#         count = i * count
#     return count
#
#
# n = int(input('请输入一个数字:'))
# print(cal_step(n))

'''
17. 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
    例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
'''

#
# def poker_list():
#     l3 = []
#     l1 = ['红心', '草花', '黑桃', '红桃']
#     for k in l1:
#         for i in range(1, 14):
#             l2 = (k, i)
#             l3.append(l2)
#     return print(l3)
#
#
# poker_list()  # 函数的调用者函数的执行者

'''
18. 有如下函数:
        def wrapper():
                def inner():
                    print(666)
            wrapper()

        你可以任意添加代码,用两种或以上的方法,执行inner函数.
'''

# 方法一:

# def wrapper():
#     def inner():
#         print(666)
#     inner()  # 增加代码
#
# wrapper()

# 方法二:
# def wrapper():
#     def inner():
#         print(666)
#     print(inner())
# wrapper()

 

posted @ 2018-10-30 22:48  马玉刚  阅读(872)  评论(0)    收藏  举报