Python面试题

Python面试题-函数

2020-02-03  本文已影响0人  复苏的兵马俑

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

def func(lis):
    new_lis = lis[1::2]
    return new_lis
print(func(['Kevin', 'Jose', 'Loki', 'Delia']))
print(func(('Kevin', 'Jose', 'Loki', 'Delia')))
# 运行结果:
['Jose', 'Delia']
('Jose', 'Delia')

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

def obj_len(obj):
    return len(obj) > 5

if obj_len('Congratulation!'):
    print("'Congratulation!'的长度大于5。")
else:
    print("'Congratulation!'的长度小于或等于5。")
    
if obj_len(['Kevin', 'Jose', 'Loki', 'Delia']):
    print("['Kevin','Jose', 'Loki', 'Delia']的长度大于5。")
else:
    print("['Kevin','Jose', 'Loki', 'Delia']的长度小于或等于5。")
    
if obj_len((1, 2, 3, 4, 5, 6)):
    print("(1, 2, 3, 4, 5, 6)的长度大于5。")
else:
    print("(1, 2, 3, 4, 5, 6)的长度小于或等于5。")
# 运行结果:
'Congratulation!'的长度大于5。
['Kevin','Jose', 'Loki', 'Delia']的长度小于或等于5。
(1, 2, 3, 4, 5, 6)的长度大于5。

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

def list_len(lis):
    return lis[:2]
print(list_len(['Kevin','Jose', 'Loki', 'Delia']))
print(list_len([1, 2, 3, 4, 5, 6]))
# 运行结果:
['Kevin', 'Jose']
[1, 2]

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

def obj_num(s):
    total = {
        'digit': 0,
        'alpha': 0,
        'space': 0,
        'other': 0
    }
    for i in s:
        if i.isdigit():
            total['digit'] += 1
        elif i.isalpha():
            total['alpha'] += 1
        elif i.isspace():
            total['space'] += 1
        else:
            total['other'] += 1
    return total
print('"lhhlk2232kj hkd 23 =-=-"中【数字】的个数 = {}'.format(obj_num("lhhlk2232kj hkd 23 =-=-")['digit']))
print('"lhhlk2232kj hkd 23 =-=-"中【字母】的个数 = {}'.format(obj_num("lhhlk2232kj hkd 23 =-=-")['alpha']))
print('"lhhlk2232kj hkd 23 =-=-"中【空格】的个数 = {}'.format(obj_num("lhhlk2232kj hkd 23 =-=-")['space']))
print('"lhhlk2232kj hkd 23 =-=-"中【其他】的个数 = {}'.format(obj_num("lhhlk2232kj hkd 23 =-=-")['other']))
# 运行结果:
"lhhlk2232kj hkd 23 =-=-"中【数字】的个数 = 6
"lhhlk2232kj hkd 23 =-=-"中【字母】的个数 = 10
"lhhlk2232kj hkd 23 =-=-"中【空格】的个数 = 3
"lhhlk2232kj hkd 23 =-=-"中【其他】的个数 = 4

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

def have_space(obj):
    if type(obj) is str:
        if obj:
            for i in obj:
                if i.isspace():
                    return True
                else:
                    continue
            return False
        else:
            return True
    elif type(obj) is list or tuple:
        if obj:
            for i in obj:
                if i == [] or i == () or i == '':
                    return True
                else:
                    continue
            return False
        else:
            return True
    else:
        print('传入的对象不正确,请传入字符串、列表或元组!')
print('""中是否含有空内容:{}'.format(have_space("")))
print('"kdfjk kjdfk"中是否含有空内容:{}'.format(have_space("kdfjk kjdfk")))
print('"jfosifjosidf"中是否含有空内容:{}'.format(have_space("jfosifjosidf")))
print('[]中是否含有空内容:{}'.format(have_space([])))
print('["Kevin","Jose",""]中是否含有空内容:{}'.format(have_space(["Kevin", "Jose", ""])))
print('["Kevin","Jose","Loki"]中是否含有空内容:{}'.format(have_space(["Kevin", "Jose", "Loki"])))
print('()中是否含有空内容:{}'.format(have_space(())))
print('("Kevin","Jose","")中是否含有空内容:{}'.format(have_space(("Kevin", "Jose", ""))))
print('("Kevin","Jose","Loki")中是否含有空内容:{}'.format(have_space(("Kevin", "Jose", "Loki yao"))))
# 运行结果:
""中是否含有空内容:True
"kdfjk kjdfk"中是否含有空内容:True
"jfosifjosidf"中是否含有空内容:False
[]中是否含有空内容:True
["Kevin","Jose",""]中是否含有空内容:True
["Kevin","Jose","Loki"]中是否含有空内容:False
()中是否含有空内容:True
("Kevin","Jose","")中是否含有空内容:True
("Kevin","Jose","Loki yao")中是否含有空内容:False

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

   dic = {"k1": "v1v1", "k2": [11,22,33,44]}
   PS:字典中的value只能是字符串或列表

def value_len(dic):
    for i in dic:
        dic[i] = dic[i][:2]
    return dic
print(value_len({"k1": "v1v1", "k2": [11,22,33,44]}))
# 运行结果:
{'k1': 'v1', 'k2': [11, 22]}

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

方法一:

def max_num(a,b):
    if a > b:
        return a
    else:
        return b
print('5和10中较大的数字是:{}'.format(max_num(5,10)))
print('15和12中较大的数字是:{}'.format(max(15,12)))
# 运行结果:
5和10中较大的数字是:10
15和12中较大的数字是:15

方法二:

def max_num(a,b):
    return a if a > b else b
print('5和10中较大的数字是:{}'.format(max_num(5,10)))
print('15和12中较大的数字是:{}'.format(max(15,12)))
# 运行结果:
5和10中较大的数字是:10
15和12中较大的数字是:15

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

def modify_file(filename,old,new):
    with open(filename, encoding = 'utf-8') as f1, open('%s.bak'%filename, 'w', encoding= 'utf-8') as f2:
        for line in f1:
            if old in line:
                line = line.replace(old,new)
            f2.write(line)
    import os
    os.remove(filename)
    os.rename('%s.bak'%filename,filename)
modify_file('test.txt', '刘德华', '张学友')

9、写函数,接收n个数字,求这些参数数字的和。

def total(*args):
    total = 0
    for i in args:
        total += int(i)
    return total
print('2,4,6,7,8,10,23中所有数字的求和结果是:{}'.format(total(2,4,6,7,8,10,23)))
# 运行结果:
2,4,6,7,8,10,23中所有数字的求和结果是:60

10、用面向函数的思想完成购物车作业:

   函数一:实现三次登录功能
   函数二:实现新用户注册功能
   函数三:购物车功能
   进阶任务:将购物功能拆分成多个函数

上一篇 下一篇

猜你喜欢

热点阅读