day 9 - 2 函数练习

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

def func(lis):
    print(lis[1::2])    #取偶数
    return lis[::2]     #取计数
    
f=[1,2,3,4,5,6]
print(func(f))

 

2、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于 5 。

#两行就搞定
def func2(lis):
    return len(lis)>5 #大于 5 则自动返回 True

f=[1,2,3,4,5,6]
print(func2(f))
#比较 low 的方法
def func2(lis):
    k = len(lis)
    if k > 5:
        print("大于 5")
    else:
        print("小于等于 5")

f=[1,2,3,4,5,6]
func2(f)

 

3、写函数,检查传入列表的长度,如果大于 2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

#无需判断列表长度是否大于 2 切片都会自动截取对应位置的值的
def func3(lis):
    return lis[0:2]

f=[1,2,3,4,5,6]
print(func3(f))

 

4、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。

#运用字典来储存和调用值
def func4(str):
    dic = {'letter':0,"num":0,"space":0,'other':0}
    for i in str:
        if i.isalpha():
            dic['letter'] +=1
        elif i.isdigit():
            dic['num'] += 1
        elif i ==" ":
            dic['space'] += 1
        else:
            dic["other"] += 1
    return dic

f="%123abc   qwe789%"
print(func4(f))
#比较 low 的 idea
def func4(str):
    letter = 0
    num = 0
    space = 0
    other = 0
    for i in str:
        if i.isalpha():
            letter +=1
        elif i.isdigit():
            num += 1
        elif i ==" ":
            space += 1
        else:
            other += 1
    return(letter,num,space,other)

f="%123abc   qwe789%"
print(func4(f))

 

5、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。

def func5(space):
    if type(space) is str:    #参数是字符串
        for i in space:
            if i == " ":
                return True
    if type(space) is list or type(space) is tuple: #参数为列表或元祖
        for i in space:
            if not i:
                return True
    
f="%123abc   qwe789%"
print(func5(f))

f2 = [1,2,3]
print(func5(f2))

f3 = (1,2,"",3)
print(func5(f3))

 

6、写函数,检查传入字典的每一个 value 的长度,如果大于 2 ,那么仅保留前两个长度的内容,并将新内容返回给调用者。

dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def func6(d):
    for i in d:
        if len(d[i]) > 2:
            d[i] = d[i][:2]
    return d

print(func6(dic))
print(func6({'name':'ysg','age':'1234'}))

 

7、写函数,接收两个数字参数,返回比较大的那个数字。

#三元运算
def func7(a,b):
    return a if a>b else b
   
print(func7(56,23))
#比较 low 的 idea
def func7(a,b):
    if a>b:
        return a
    else:
        return b
print(func7(23,56))

 

8、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)

#其实传入函数中的是三个参数
#文件名 修改的前内容 修改后的内容
def func8(filename,a,b):
    with open(filename,encoding='utf-8') as f,open('%s.bak'%filename,'w',encoding='utf-8')as f2:
        for line in f:
            if a in line:
                line = line.replace(a,b)
            f2.write(line)

    import os
    os.remove(filename)     # 删除文件
    os.rename('%s.bak'%filename,filename)   # 重命名文件
                
func8('D:/py/log/test.txt','in','IN')
posted @ 2018-12-02 19:01  亦双弓  阅读(270)  评论(0编辑  收藏  举报