FIsh论坛《零基础入门学习Python》| 第025讲:字典:当索引不好用时 课后测试题及答案
测试题
- 当你听到小伙伴们在谈论“映射”、“哈希”、“散列”或者“关系数组”的时候,事实上他们就是在讨论什么呢?
事实上他们就是在讨论我们这一讲介绍的“字典”。 - 尝试一下将数据(‘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
- 用方括号(“[]”)括起来的数据我们叫列表,那么使用大括号(“{}”)括起来的数据我们就叫字典,对吗?
NotADict = {1, 2, 3, 4, 5} #答:不对。 要存在映射才是字典
print(type(NotADict))
输出结果:
<class 'set'>
- 你如何理解有些东西字典做得到,但“万能的”列表却难以实现?
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工作室的口号是: 让编程改变世界
- 下边这些代码,他们都在执行一样的操作吗?你看得出差别吗?
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']
动动手
- 尝试利用字典的特性编写一个通讯录程序吧,功能如图:
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
|---感谢使用通讯录程序---|