Python练习:字典

题目1

鼠标右键点击这里,弹出菜单中,选择 链接另存为,下载数据文件 0016_1.txt 到本机上。

这个是一个数据文件,格式如下

薛蟠     4560 42
薛蝌     4460 25
薛宝钗   5776 43
薛宝琴   4346 42
王夫人   3360 25
王熙凤   4460 35
王子腾   5660 45
王仁     5034 65
尤二姐   5324 25
贾芹   5663 25
贾蓉     3446 15
贾兰     3443 35
贾芸     4522 25
尤三姐   5905 45
贾珍     4603 25

这里面有3列数据,分别 保存了 游戏系统的用户名, 用户积分 , 年龄

现在要求大家写一个程序,计算出同一姓氏的人的积分总和。

输出结果格式如下:

 : 19142
 : 18514
 : 11229
 : 21677

答案与解析

答案视频讲解

题目2

下面的字典里面记录了一个游戏系统中用户的信息。 其中key 是用户的ID, value 是另外一个字典,记录了用户名,用户等级和金币数量。

members = {
    1 :{'name':'白月黑羽', 'level':3, 'coins':300},
    2 :{'name':'短笛魔王', 'level':5, 'coins':330},
    3 :{'name':'紫气一元', 'level':6, 'coins':340},
    4 :{'name':'拜月主',   'level':3, 'coins':32200},
    5 :{'name':'诸法空',   'level':4, 'coins':330},
    6 :{'name':'暗光城主', 'level':3, 'coins':320},
    7 :{'name':'心魔尊',   'level':3, 'coins':2300},
    8 :{'name':'日月童子', 'level':8, 'coins':3450},
    9 :{'name':'不死尸王', 'level':3, 'coins':324},
    10:{'name':'天池剑尊', 'level':9, 'coins':13100},
}

要求大家写一个程序,运行的时候先显示如下主菜单

请选择操作选项:
   1 查看用户账号信息
   2 添加用户
   3 删除用户
   4 列出所有用户信息
   0 退出

如果用户选择 1 选项, 再次提示用户输入账号名, 用户输入账号后,显示该用户的 ID, 等级和 金币数量。

如果用户选择 2 选项, 提示用户输入账号名、等级、金币数量。 用户输入后,要检查该账号名是否已经存在,如果已经存在,则提示用户重新输入。如果用户输入的账号不存在,则添加该信息到字典中。

如果用户选择 3 选项, 提示用户输入账号名。 用户输入后,要检查该账号名是否已经存在,如果不存在,则提示用户重新输入。如果用户输入的账号存在,在用户字典中删除该账号。

如果用户选择 4 选项,则打印出当前用户表里所有用户的信息

如果用户选择 0 选项, 则退出程序。

只要不是选择退出,用户操作完后,再次进入主菜单,让用户再次选择。如此循环,直到用户选择0 退出。

答案与解析


扫码分享给朋友,一起学更有动力哦


















































题目1-答案

with open('0016_1.txt',encoding='utf8') as f:
    infoList = f.read().splitlines()

coinTable = {}

for info in infoList:
    # 先去除左右空白字符
    info = info.strip()
    if not info:
        continue

    parts = info.split(' ')
    name = parts[0]
    coin = int(parts[-2])


    # 如果姓氏还没有在统计表中
    # 创建新元素
    if name[0] not in coinTable:
        coinTable[name[0]] = coin

    # 如果姓氏已经在统计表中
    # 累加积分
    else:
        coinTable[name[0]] += coin

for name1,coins in coinTable.items():
    print(f'{name1} : {coins}')

题目2-答案

from pprint import pprint

members = {
    1 :{'name':'白月黑羽', 'level':3, 'coins':300},
    2 :{'name':'短笛魔王', 'level':5, 'coins':330},
    3 :{'name':'紫气一元', 'level':6, 'coins':340},
    4 :{'name':'拜月主',   'level':3, 'coins':32200},
    5 :{'name':'诸法空',   'level':4, 'coins':330},
    6 :{'name':'暗光城主', 'level':3, 'coins':320},
    7 :{'name':'心魔尊',   'level':3, 'coins':2300},
    8 :{'name':'日月童子', 'level':8, 'coins':3450},
    9 :{'name':'不死尸王', 'level':3, 'coins':324},
    10:{'name':'天池剑尊', 'level':9, 'coins':13100},
}


# 因为要根据用户名查找用户信息,需要改变字典格式
# 以用户名为key,创建一个字典

name2info = {}
for k,v in members.items():
    name = v['name']
    # 因为id也是要查询的内容,加到 字典的 value值中
    v['id'] = k
    name2info[name] = v


# 定义查看用户账号的处理函数
def checkAccount():
    name = input('请输入查找的用户账号:')
    if name not in name2info:
        print(f'对不起,账号 {name} 不存在.')
        return
    
    info = name2info[name]
    print(f'账号: {name} , ID : {info["id"]} , 等级:{info["level"]} , 金币:{info["coins"]} ')    


# 定义添加用户账号的处理函数
def addAccount():
    while True:
        name = input('请输入添加用户的账号:')
        if name in name2info:
            print('对不起,该账号已经存在')
        else:
            break
    
    while True:
        level = input('请输入该用户的等级:')
        # 如果不是数字 , 则输入格式错误
        if not level.isdigit():
            print('对不起,等级必须为一个数字')
        else:
            level = int(level) # 转化为整数
            break

            
    while True:
        coins = input('请输入该用户的金币数量:')
        # 如果不是数字 , 则输入格式错误
        if not coins.isdigit():
            print('对不起,金币数 必须为一个数字')
        else:
            coins = int(coins) # 转化为整数
            break

    # 要产生一个不存在的ID号, 这里我们取 当前最大的ID号+ 1
    newId = max(members.keys()) + 1
    # 注意: 两个字典里面都要添加
    members[newId] =  {'name':name, 'level':level, 'coins':coins}
    name2info[name] = {'name':name, 'level':level, 'coins':coins, 'id':newId}


# 定义删除用户账号的处理函数
def delAccount():
    name = input('请输入要删除的用户账号:')
    if name not in name2info:
        print(f'对不起,账号 {name} 不存在.')
        return

    # 注意: 两个字典里面都要删除
    theID = name2info[name]['id']
    name2info.pop(name)
    members.pop(theID)
    

# 定义打印表内容的处理函数
def showTables():    
    print('\n现在name2info的表内容是:\n')
    pprint(name2info)
    print('\n现在members的表内容是:\n')
    pprint(members)



menu = '''
请选择操作选项:
   1 查看用户账号信息
   2 添加用户
   3 删除用户
   4 列出所有用户信息
   0 退出
'''   
# 显示主菜单
while True:
    choice = input(menu)

    # 选择查看查看用户账号
    if choice == '1':
        checkAccount()
    elif choice == '2':
        addAccount()
    elif choice == '3':
        delAccount()
    elif choice == '4':
        showTables()
    elif choice == '0':
        break