python之道09

整理函数相关知识点,写博客。

  1. 看代码写结果
1.
def func():
    for i in range(3):
        print(i)
    return 666
print(func()) # 0 1 2 666

2.
def func():
    for i in range(3):
        return 666
print(func())  # 666

3.
def func():
    while 1:
        print(666)
        return 111
print('太白')
print(func())
print('23期') # 太白 666 111 23期
  1. 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

答案

l1 = [11, 22, 33, 44, 55]
def func(a):
    l2 = []
    for j in range(len(a)):
        if j % 2 != 0:
            l2.append(a[j])
    return l2
ret = func(l1)
print(ret)

# 输出结果
[22, 44]

# 讲解答案
def func(l): returnl[1::2]
print(fun([1,2,3,4]))
  1. 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

答案

l1 = [11, 22, 33, 44, 55, 77]
def func(a):
    return True if len(a) > 5 else False
ret = func(l1)
print(ret)

# 输出结果
True

# 讲解
def func(argv):
    if len(argv) > 5:
        return True
    else:
        return False

def func(argv):
    return True if len(argv)>5 else False

def func(argv):
    return len(argv) > 5
print(func('fhdskafdsa'))
print(func('f'))
  1. 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

答案

# 方法一: 
# 如果列表长度小于2
l1 = []
def func(a):
    return a[:2] if len(a) > 2 else a[:2]
ret = func(l1)
print(ret)
# 输出结果
[]


# 方法二: 
# 如果列表长度小于2
l1 = []
def func(a):
    l2 = []
    if len(a) > 2:
        l2.append(l1[:2])
        return l2[0]
    else:
        return l2
ret = func(l1)
print(ret)

# 输出结果
[] # 应该返回的是之前列表的本身 

# 如果列表长度大于2
l1 = [11, 22, 33, 44, 55, 77]
def func(a):
    l2 = []
    if len(a) > 2:
        l2.append(l1[:2])
        return l2[0]
    else:
        return l2
ret = func(l1)
print(ret)
# 输出结果
[11, 22]

# 讲解结果
def func(argv):
    if len(argv) > 2:
        return argv[:2]
    else:
        return argv

def func(argv):
    return argv[:2] if len(argv) > 2 else argv
l1 = [1,2,3,4]
l1 = [1,]
print(l1[:2])


def func(argv):
    return argv[:2]

# func([1,2,3,4])
print(func([1,]))
  1. 写函数,计算传入函数的字符串中,[数字]、[字母] 以及 [其他]的个数,并返回结果。

答案

s1 = 'djeid2djsoj7dfj789k#$@'
def func(a):
    num = 0
    letter = 0
    other = 0
    for i in a:
        if i.isdecimal():
            num += 1
        elif i.isalpha():
            letter += 1
        else:
            other += 1
    return f'数字个数:{num},字母个数:{letter},其他:{other}'
ret = func(s1)
print(ret)

# 输出结果
数字:5个,字母:14个,其他:3个

# 讲解
s1 = '中国afdf'
print(s1.isalpha())
  1. 写函数,接收两个数字参数,返回比较大的那个数字。

答案

# 位置传参
def func(x,y):

    return x if x > y else y
ret = func(5,10)
print(ret)

# 返回结果
10

# 关键字传参
def func(x,y):

    return x if x > y else y
ret = func(y=5,x=10)
print(ret)

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

答案

dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def func(a):
    dic_new = {}
    for i,j in a.items():
            if len(j) > 2:
                dic_new[i]=j[:2]
    return dic_new
ret = func(dic)
print(ret)
# 输出结果
{'k1': 'v1', 'k2': [11, 22]}
  1. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。

答案

# 传入列表
l1 = [11,22,33,44,55]
def func(a):
    dic1 = {}
    if type(a) == list:
        for i,j in enumerate(a):
            dic1[i]=j

    else:
        return '警告:传入的参数必须是列表数据类型'
    return dic1
ret = func(l1)
print(ret)
# 结果
{0: 11, 1: 22, 2: 33, 3: 44, 4: 55}

# 传入非列表
l1 = 'dfajdsfj123'
def func(a):
    dic1 = {}
    if type(a) == list:
        for i,j in enumerate(a):
            dic1[i]=j

    else:
        return '警告:传入的参数必须是列表数据类型'
    return dic1
ret = func(l1)
print(ret)
# 输出结果
警告:传入的参数必须是列表数据类型

# 讲解答案
def func(argv):  # [11,22,33]
    # return {0:argv[0],1:argv[1],}
    dic = {}
    for i in range(len(argv)):
        dic[i] = argv[i]
    return dic

print(func([11,22,33,44,56]))
  1. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。

答案

def func(name,sex,edu,age):
    text = f'姓名:{name},性别:{sex},年龄:{age},学历:{edu}'
    with open('student_msg',mode='a',encoding='utf-8') as f:
        f.write('\n' + text)

    return '已添加,内容:',text
ret = func('太白金星','男','博士',18)
print(ret)
# 输出结果
('已添加,内容:', '姓名:太白金星,性别:男,年龄:18,学历:博士')
student_msg中内容:
姓名:太白金星,性别:男,年龄:18,学历:博士
姓名:太白金星,性别:男,年龄:18,学历:博士

# 讲解答案
def register(name,sex,age,edu):
    with open('student_msg',encoding='utf-8',mode='a') as f1:
        f1.write(f'{name},{sex},{age},{edu}\n')
n,s,a,e = input('请依次输入姓名,性别,年龄,学历并以逗号隔开').strip().replace(',',',').split(',')  # '立业,男,35,小本'
register(n,s,a,e)

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

答案

def func():
    while 1 :

            name=input('请输入姓名:')
            age=input('请输入年龄:')
            edu=input('请输入学历:')
            sex=input("请输入性别:")
            if sex=="":
                s=open('a1',mode="a+",encoding='utf-8')
                s.write('姓名:%s,年龄:%s,学历:%s,性别:男' %(name,age,edu) + '\n')
            else:
                s = open('a1', mode="a+", encoding='utf-8')
                s.write('姓名:%s,年龄:%s,学历:%s, 性别:%s' % (name, age, edu,sex) + '\n')
            i = input('Q退出/回车继续')
            if i.upper() == "Q":
                exit()
print(func())
# 输出结果
# 文件内容
姓名:太白,年龄:18,学历:博士,性别:男
姓名:杨丽丽,年龄:19,学历:本科, 性别:女

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

答案

def func(filename1,filename2,old_content,new_content):
    with open(filename1, mode="r", encoding='utf-8') as f1,\
        open(filename2, mode='a+', encoding='utf-8') as f2:
        for content in f1:
            content = content.replace(old_content,new_content)
            # f2.seek(0,0)
            f2.write(content)
        import os
        os.remove(filename1)
        os.rename(filename2,filename1)
func('a1.txt','a2.txt','sb','alex')

posted @ 2019-06-18 21:18  爱咋闹  阅读(243)  评论(0编辑  收藏  举报