FIsh论坛《零基础入门学习Python》| 第025讲 课后测试题及答案

FIsh论坛《零基础入门学习Python》| 第025讲:字典:当索引不好用时 课后测试题及答案

测试题

  1. 当你听到小伙伴们在谈论“映射”、“哈希”、“散列”或者“关系数组”的时候,事实上他们就是在讨论什么呢?
    事实上他们就是在讨论我们这一讲介绍的“字典”。
  2. 尝试一下将数据(‘F’: 70, ‘C’: 67, ‘h’: 104, ‘i’: 105, ‘s’: 115)创建为一个字典并访问键 ‘C’ 对应的值?
dict = {'F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115}

print("dict['C']: ", dict['C'])


输出结果:
dict['C']:  67

  1. 用方括号(“[]”)括起来的数据我们叫列表,那么使用大括号(“{}”)括起来的数据我们就叫字典,对吗?
NotADict = {1, 2, 3, 4, 5} #答:不对。 要存在映射才是字典
print(type(NotADict))
输出结果:
<class 'set'>
  1. 你如何理解有些东西字典做得到,但“万能的”列表却难以实现?


brand = ['李宁', '耐克', '阿迪达斯', '鱼C工作室']
slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing', '让编程改变世界']
print('鱼C工作室的口号是:', slogan[brand.index('鱼C工作室')])


输出结果:
鱼C工作室的口号是: 让编程改变世界


index():检测字符串中是否包含子字符串 str,如果包含子字符串,返回开始的索引值,否则抛出异常。

brand = ['李宁', '耐克', '阿迪达斯', '鱼C工作室']
slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing', '让编程改变世界']
print(brand.index('鱼C工作室'))
输出结果:
3

如果使用字典,字典的映射关系能很好地解决这个问题,代码也显得简洁:

dict1 = {'李宁':'一切皆有可能', '耐克':'Just do it', '阿迪达斯':'Impossible is nothing', '鱼C工作室':'让编程改变世界'}
print('鱼C工作室的口号是:', dict1['鱼C工作室'])


输出结果:
鱼C工作室的口号是: 让编程改变世界


  1. 下边这些代码,他们都在执行一样的操作吗?你看得出差别吗?
print(a = dict(one=1, two=2, three=3))
print(b = {'one': 1, 'two': 2, 'three': 3})
print(c = dict(zip(['one', 'two', 'three'], [1, 2, 3])))
print(d = dict([('two', 2), ('one', 1), ('three', 3)]))
print(e = dict({'three': 3, 'one': 1, 'two': 2}))

输出结果:
Traceback (most recent call last):
  File "D:/PycharmProjects/pythonProject/venv/001.py", line 8, in <module>
    print(a = dict(one=1, two=2, three=3))
TypeError: 'a' is an invalid keyword argument for print()

修改后:

a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
d = dict([('two', 2), ('one', 1), ('three', 3)])
e = dict({'three': 3, 'one': 1, 'two': 2})
输出结果:

Process finished with exit code 0

参考答案:
在这里插入图片描述
5. 如图,你可以推测出打了马赛克部分的代码吗?
在这里插入图片描述

data = "1000,小甲鱼,男"
MyDict = {}
# 还记得字符串的分割方法吧,别学过就忘啦^_^
(MyDict['id'], MyDict['name'], MyDict['sex'])= data.split(',')

#print(type(data.split(',')))\
 #   print(type((MyDict['id'], MyDict['name'], MyDict['sex'])))

print("ID:   " + MyDict['id'])
print("Name: " + MyDict['name'])
print("Sex   " + MyDict['sex'])

输出结果:

ID:   1000
Name: 小甲鱼
Sex   男

注意,列表是可以赋值给元组的,元组也可以赋值给列表
split()
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。
str.split(str=“”, num=string.count(str))
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num
– 分割次数。默认为 -1, 即分隔所有。

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );       # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
输出结果:
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

动动手

  1. 尝试利用字典的特性编写一个通讯录程序吧,功能如图:
    在这里插入图片描述
print("|---欢迎进入通讯录程序 ---|")
print("|---1:查询联系人资料 ---|")
print("|---2:插入新的联系人 ---|")
print("|---3:删除已有联系人 ---|")
print("|---4:退出通讯录程序 ---|")
phone_books ={ }
def chaxun():
    name = input("请输入联系人姓名:")
    if name in phone_books:
        print(name+":"+phone_books[name])
    else:
        print("用户不存在")
def insert():
    name = input("请输入联系人姓名:")
    if name in phone_books:
        print("您输入的姓名在通讯录中已存在-->",name+":"+phone_books[name])
        t =input("是否修改用户资料(YES/NO):")
        if t== "YES":
            num = input("请输入用户联系电话:")
            phone_books[name]=num
    else:
        phone_books[name] = input("请输入用户联系电话:")
def pop():
    name = input("请输入联系人姓名:")
    if name in phone_books:
        del(phone_books[name])
    else:
        print("用户不存在")
while 1:
    temp = int(input("请输入相关指令代码:"))
    if temp == 1:
        chaxun()
    elif temp == 2:
        insert()
    elif temp == 3:
        pop()
    elif temp==4:
        break
print("|---感谢使用通讯录程序---|")



输出结果:
|---欢迎进入通讯录程序 ---|
|---1:查询联系人资料 ---|
|---2:插入新的联系人 ---|
|---3:删除已有联系人 ---|
|---4:退出通讯录程序 ---|
请输入相关指令代码:2
请输入联系人姓名:国王
请输入用户联系电话:001
请输入相关指令代码:1
请输入联系人姓名:国王
国王:001
请输入相关指令代码:4
|---感谢使用通讯录程序---|

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值