《python编程快速上手 让繁琐工作自动化》第五章习题+实践答案

习题

1.空字典的代码是怎样的?
答:两个花括号:{}
2.一个字典包含键’fow’和值42,看起来是怎样的?
答:{‘fow’:42}
3.字典和列表的主要区别是什么?
答:字典中的表项是不排序的,不能像列表那样切片,可以用任意值作为键
4.如果spam 是{‘bar’: 100},你试图访问spam[‘foo’],会发生什么?
答:尝试访问字典中不存在的键,将导致KeyError 出错信息
5.如果一个字典保存在spam 中,表达式’cat’ in spam 和’cat’ in spam.keys()之间的区别是什么?
答:没有区别,‘cat’ in spam 是’cat’ in spam.keys()的简写版本,检查’cat’键是否存在于字典中
6.如果一个字典保存在变量中,表达式’cat’ in spam 和’cat’ in spam.values()之间的区别是什么?
答:6.‘cat’ in spam 检查字典中是不是有一个’cat’ 键,而’cat’ in spam.values() 检查是否有一个值’cat’ 对应于 spam 中的某个键。
7.下面代码的简洁写法是什么?
if ‘color’ not in spam:
spam[‘color’] = ‘black’
答:spam.setdefault(‘color’,‘black’)
8.什么模块和函数可以用于“漂亮打印”字典值?
答:pprint模块,pprint()和pformat()函数

实践项目

1.好玩游戏的物品清单
写一个名为displayInventory()的函数,它接受任何可能的物品清单,并显示如下:

Inventory:
12 arrow
42 gold coin
1 rope
6 torch
1 dagger
Total number of items: 62

答:

stuff={'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}

def displayInventory(inventory):
    print("Inventory:")
    count=0
    for k,v in inventory.items():
        print(str(v)+" "+k)
        count+=v
    print("Total number of items:"+str(count))

displayInventory(stuff)

2.列表到字典的函数,针对好玩游戏物品清单
假设征服一条龙的战利品表示为这样的字符串列表:

dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

写一个名为addToInventory(inventory, addedItems)的函数,其中inventory 参数是一个字典,表示玩家的物品清单(像前面项目一样),addedItems 参数是一个列表,就像dragonLoot。
addToInventory()函数应该返回一个字典,表示更新过的物品清单。请注意,列表可以包含多个同样的项。你的代码看起来可能像这样:

def addToInventory(inventory, addedItems):
#your code goes here
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)

前面的程序(加上前一个项目中的displayInventory()函数)将输出如下:

Inventory:
45 gold coin
1 rope
1 ruby
1 dagger
Total number of items: 48

答:
第一种:

def displayInventory(inventory):
    print("Inventory:")
    count=0
    for k,v in inventory.items():
        print(str(v)+" "+k)
        count+=v
    print("Total number of items:"+str(count))

def addToInventory(inventory, addedItems):
    for i in range(len(addedItems)):
        if addedItems[i] not in inventory:        
            inventory.setdefault(addedItems[i],1)
        else:
            inventory[addedItems[i]]+=1
    return inventory

inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)

第二种:

def displayInventory(inventory):
    print("Inventory:")
    count=0
    for k,v in inventory.items():
        print(str(v)+" "+k)
        count+=v
    print("Total number of items:"+str(count))

def addToInventory(inventory, addedItems):
    for i in addedItems:
        if i in inventory:
            inventory[i]+=1
        else:
            inventory[i]=1
    return inventory

inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)    
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值