python习题,关于函数相关的练习

习题1

lis = [['哇', ['how', {'good': ['am', 100, '99']}, '太白金星']]]

  • 列表lis中的'am'变成大写
  • 列表中的100通过数字相加在转换成字符串的方式变成'10010'

解:

lis = [['哇', ['how', {'good': ['am', 100, '99']}, '太白金星']]]
lis[0][1][1].get('good')[0] = lis[0][1][1].get('good')[0].upper()
lis[0][1][1].get('good')[1] = str(lis[0][1][1].get('good')[1] + 9910)
print(lis)
# 结果:
# [['哇', ['how', {'good': ['AM', '10010', '99']}, '太白金星']]]
习题2

dic = {'k1': 'v1', 'k2': ['alex', 'sb'], (1, 2, 3): {'k3': ['2', 100, 'wer']}}

  • 将'k3'对应的值的最后面添加一个元素'23'

  • 将'k2'对应的值的第0个位置插入元素'a'

  • 将(1,2,3)对应的值添加一个键值对'k4':'v4'

解:

dic = {'k1': 'v1', 'k2': ['alex', 'sb'], (1, 2, 3): {'k3': ['2', 100, 'wer']}}
dic[(1, 2, 3)].get('k3').append('23')
dic['k2'].insert(0, 'a')
dic[(1, 2, 3)].update(k4='v4')
print(dic)
# 结果:
# {'k1': 'v1', 'k2': ['a', 'alex', 'sb'], (1, 2, 3): {'k3': ['2', 100, 'wer', '23'], 'k4': 'v4'}}
习题3

实现一个整数加法计算器(多个数相加)

例如:content = input('请输入内容:')用户输入:5 9 6 12 13

然后进行分割再进行计算

解:

import re

while True:
    try:
        nums = input('输入多个数(中间空格分隔开):')
        if not re.match(r'([\s]*[0-9]+[\s]*){2,}$', nums):
            print('输入有误!')
            continue
        nums = [i for i in (re.split(r'[\s]+', nums))]
        if len(nums) < 2:
            raise Exception('必须2个数及以上')
    except Exception as e:
        print('输入有误!')
        continue
    s = 0
    for i in nums:
        if i == '':
            continue
        s += int(i)
    print(f'它们的和为:{s}')
    break
# 结果:
# 输入多个数(中间空格分隔开):f1 2 d 3
# 输入有误!
# 输入多个数(中间空格分隔开):1234
# 输入有误!
# 输入多个数(中间空格分隔开): 1  2  3
# 它们的和为:6
习题4

请写一个电影投票程序.现在上映的电影列表如下:

lst = ['复仇者联盟4', '驯龙高手3', '金萍梅', '老男孩', '大话西游']

由用户给每一个电影投票,最终将该用户投票的信息公布出来

要求:

  • 用户可以持续投票,用户输入序号,进行投票.

    比如:输入序号1,给金萍梅投票1

  • 每次投票成功,显示给哪部电影投票成功

  • 退出投票程序后,要显示最终每个电影的投票数

    建议最终投票的结果为这种形式:

解:

import re

lst = ['复仇者联盟4', '驯龙高手3', '金萍梅', '老男孩', '大话西游']
movies = {index: {'name': movie, 'count': 0} for index, movie in enumerate(lst, start=1)}


# 上映的票房信息
def print_movies():
    for index, movie in movies.items():
        print(f'序号:{index}\t影片:{movie["name"]}\t票数:{movie["count"]}')


# 更新票房信息
def update_movies(fun):
    def inner():
        while True:
            print('提示:输入q退出!')
            num = fun()
            if not num:
                break
            movies[num]['count'] += 1
            print(f'电影:【{movies[num]["name"]}】投票成功')

    return inner


# 获取输入的编号
@update_movies
def get_movies_num():
    while True:
        num = input('输入投票的序号:').strip()
        if num.upper() == 'Q':
            return False
        if not re.match(r'[1-9]+$', num):
            print('输入有误!')
            continue
        else:
            num = int(num)
            if not 0 < num <= len(movies):
                print('输入有误!')
                continue
            return num


def main():
    print('**********投票前结果如下**********')
    print_movies()
    get_movies_num()
    print('**********投票后结果如下**********')
    print_movies()


if __name__ == '__main__':
    main()

# 运行结果:
# **********投票前结果如下**********
# 序号:1	影片:复仇者联盟4	票数:0
# 序号:2	影片:驯龙高手3	票数:0
# 序号:3	影片:金萍梅	票数:0
# 序号:4	影片:老男孩	票数:0
# 序号:5	影片:大话西游	票数:0
# 提示:输入q退出!
# 输入投票的序号:1
# 电影:【复仇者联盟4】投票成功
# 提示:输入q退出!
# 输入投票的序号:6
# 输入有误!
# 输入投票的序号:2
# 电影:【驯龙高手3】投票成功
# 提示:输入q退出!
# 输入投票的序号:3
# 电影:【金萍梅】投票成功
# 提示:输入q退出!
# 输入投票的序号:4
# 电影:【老男孩】投票成功
# 提示:输入q退出!
# 输入投票的序号:2
# 电影:【驯龙高手3】投票成功
# 提示:输入q退出!
# 输入投票的序号:1
# 电影:【复仇者联盟4】投票成功
# 提示:输入q退出!
# 输入投票的序号:5
# 电影:【大话西游】投票成功
# 提示:输入q退出!
# 输入投票的序号:4
# 电影:【老男孩】投票成功
# 提示:输入q退出!
# 输入投票的序号:4
# 电影:【老男孩】投票成功
# 提示:输入q退出!
# 输入投票的序号:3
# 电影:【金萍梅】投票成功
# 提示:输入q退出!
# 输入投票的序号:q
# **********投票后结果如下**********
# 序号:1	影片:复仇者联盟4	票数:2
# 序号:2	影片:驯龙高手3	票数:2
# 序号:3	影片:金萍梅	票数:2
# 序号:4	影片:老男孩	票数:3
# 序号:5	影片:大话西游	票数:1
习题5

有文件t1.txt里面的内容为:

id,name,age,phone,job
1,Alex,22,13651054608,IT
2,taibai,23,13304320533,Tearcher
3,nezha,25,1333235322,IT

利用文件操作,将其构造成如下格式的数据类型

[{'id': '1', 'name': 'Alex', 'age': '22', 'phone': '13651054608', 'job': 'IT'}...]

解:

lst = []


# 本地数据
def load_local_info():
    try:
        with open('t1.txt', encoding='utf-8') as f1:
            temp = None
            for line in f1:
                result = {}
                line = line.strip('\n').split(',')
                if temp == None:
                    temp = line
                    continue
                for key, vaule in zip(temp, line):
                    result[key] = vaule
                lst.append(result)
    except FileNotFoundError:
        with open('t1.txt', encoding='utf-8', mode='w') as f2:
            pass


def main():
    # 加载数据
    load_local_info()
    print(lst)


if __name__ == '__main__':
    main()

# 运行结果:
# [{'id': '1', 'name': 'Alex', 'age': '22', 'phone': '13651054608', 'job': 'IT'}, {'id': '2', 'name': 'taibai', 'age': '23', 'phone': '13304320533', 'job': 'Tearcher'}, {'id': '3', 'name': 'nezha', 'age': '25', 'phone': '1333235322', 'job': 'IT'}]
习题6

按要求完成下列转化

list3 = [
    {'name': 'alex', 'hobby': '抽烟'},
    {'name': 'alex', 'hobby': '喝酒'},
    {'name': 'alex', 'hobby': '烫头'},
    {'name': 'alex', 'hobby': 'Massage'},
    {'name': 'wusir', 'hobby': '喊麦'},
    {'name': 'wusir', 'hobby': '街舞'}]
# 转化结果
# list4 = [
#     {'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']},
#     {'name': 'wusir', 'hobby_list': ['喊麦', '街舞']}]

将list3这种数据类型转化成list4类型:代码必须支持可拓展
无论要求加多少数据,代码都可以转化

# 比如:
['name', 'wusir', 'hobby', '溜达']  # list3增加一个字典
{'name': 'wusir', 'hobby_list': ['rap', 'sing', 'dance']}  # list4增加一个字典
{'name': '太白', 'hobby_list': ["开车"]}  # list4增加一个字典

解:

list3 = [
    {'name': 'alex', 'hobby': '抽烟'},
    {'name': 'alex', 'hobby': '喝酒'},
    {'name': 'alex', 'hobby': '烫头'},
    {'name': 'alex', 'hobby': 'Massage'},
    {'name': 'wusir', 'hobby': '喊麦'},
    {'name': 'wusir', 'hobby': '街舞'}]

list4 = []


# 列表list3转为为list4的格式
def l3_l4(l3: list):
    if not isinstance(l3, list):
        raise Exception('参数有误,必须为列表类型!')
    # 遍历源列表内的字典元素
    for group in l3:
        if list4 == []:
            temp = {}
            temp.update({'name': group['name'], 'hobby_list': [group['hobby']]})
            list4.append(temp)
            continue
        flag_name = 0
        i = 0
        # 查看l3的组name,hobby是否在lst列表中
        while i < len(list4):
            # 查看l3的组name对应的value是否在lst列表中
            if group.get('name') != list4[i].get('name'):
                flag_name += 1
            else:
                index = i
            i += 1
        # 进入次数等于列表的循环次数 说明没有找到name对应的value值
        if flag_name == len(list4):
            temp = {}
            temp.update({'name': group['name'], 'hobby_list': [group['hobby']]})
            list4.append(temp)
        else:
            # 进入次数少于循环次数说明有对应name的value值
            # 存在name后判断hobby_list列表内的元素是否重叠 利用集合特性去重
            list4[index]['hobby_list'].append(group.get('hobby'))
            list4[index]['hobby_list'] = list(set(list4[index]['hobby_list']))


# list3列表的元素添加
def add_list3(name='name', name_value=None, hobby='hobby', holly_value=None):
    temp = {}
    temp.update({name: name_value, hobby: holly_value})
    list3.append(temp)


# list4列表的元素添加
def add_list4(temp: dict):
    if not isinstance(temp, dict):
        raise Exception('参数错误,必须是dict类型!')
    if list4 == []:
        list4.append(temp)
        return True
        # 判断是否在列表内
    i = 0
    count = 0
    while i < len(list4):
        # 判断列表内是否有该name
        if list4[i].get('name') != temp.get('name'):
            count += 1
        else:
            index = i
        i += 1
    # 如果相同则不在内
    if count == len(list4):
        list4.append(temp)
    else:
        # 存在name后判断列表内的元素是否重叠 利用集合特性去重
        list4[index]['hobby_list'].extend(temp['hobby_list'])
        list4[index]['hobby_list'] = list(set(list4[index]['hobby_list']))


def main():
    add_list3(*['name', 'wusir', 'hobby', '溜达'])
    print(f'列表list3:{list3}')
    l3_l4(list3)
    print(f'list3转化后的结果:{list4}')
    add_list4({'name': 'wusir', 'hobby_list': ['rap', 'sing', 'dance']})
    print(f'新添一个元素后的结果:{list4}')
    add_list4({'name': '太白', 'hobby_list': ["开车"]})
    print(f'在添一个元素后的结果:{list4}')


if __name__ == '__main__':
    main()

# 运行结果:
# 列表list3:[{'name': 'alex', 'hobby': '抽烟'}, {'name': 'alex', 'hobby': '喝酒'}, {'name': 'alex', 'hobby': '烫头'}, {'name': 'alex', 'hobby': 'Massage'}, {'name': 'wusir', 'hobby': '喊麦'}, {'name': 'wusir', 'hobby': '街舞'}, {'name': 'wusir', 'hobby': '溜达'}]
# list3转化后的结果:[{'name': 'alex', 'hobby_list': ['烫头', 'Massage', '抽烟', '喝酒']}, {'name': 'wusir', 'hobby_list': ['溜达', '喊麦', '街舞']}]
# 新添一个元素后的结果:[{'name': 'alex', 'hobby_list': ['烫头', 'Massage', '抽烟', '喝酒']}, {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '溜达', 'sing', 'rap', 'dance']}]
# 在添一个元素后的结果:[{'name': 'alex', 'hobby_list': ['烫头', 'Massage', '抽烟', '喝酒']}, {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '溜达', 'sing', 'rap', 'dance']}, {'name': '太白', 'hobby_list': ['开车']}]
posted @ 2021-04-19 14:48  缘兮Fate  阅读(296)  评论(0)    收藏  举报