Hi there! 我是嘟嘟~受到前辈启发,想说可以纪录一下自己练习的过程,小女子为程式超超菜鸟,此系列非教学文,仅为个人解题笔记,可能有错误或未补充详尽之处,欢迎前辈们不吝指教!也欢迎正在自学的伙伴一起讨论学习~
Day 8: Dictionaries and Maps(字典)
输入格式
第一行输入一整数n
代表电话簿里资料的数量。
后面n行输入姓名和8码电话代表电话簿,并用两行空格隔开。
后面输入未知行数的姓名,测试是否有在电话簿里。你必须一直测试值到没有输入值为止。
There are an unknown number of lines of queries. Each line (query) contains a name
to look up, and you must continue reading lines until there is no more input.
输出格式
如果查询的姓名有出现在电话簿里,印出姓名和电话,格式为name=phoneNumber
;
否则,印出Not found
。
样本输入
3sam 99912222tom 11122222harry 12299933samedwardharry
样本输出
sam=99912222Not foundharry=12299933
我的解答(错误版本)
n = int(input())phoneBook = {} #建立字典for i in range(n): name,phone = input().strip().split() #输入n笔电话和姓名 phoneBook[name] = phone #新增字典资料[Key:value=name:phone]for i in range(n): nameTest = input() #输入n笔测资 print(nameTest + '=' + phoneBook[nameTest]) if nameTest in phoneBook else print('Not found') #查询姓名是否在电话簿里面
结果死在Test Case1,发现是自己太粗心没看清楚题目写到测试资料是未知数!! 感谢前辈补充!!
因为不知道测资有几笔,只能用while迴圈一直读测资(直到读取失败),可以使用try-except用法,try-except必须成对出现,try意思是我先尝试做一些事,比如说「nameTest = input()」读取测资,当try里面做的事失败就会进入except里面。
我的解答(修正后)
n = int(input())phoneBook = {} #建立字典for i in range(n): name,phone = input().strip().split() #输入n笔电话和姓名 phoneBook[name] = phone #新增n笔字典资料[key:value=name:phone]for i in range(n): while True: #因为不知道测资有几笔,就一直跑迴圈 try: nameTest = input() #尝试读取测资,没有测资时会失败,进入except print(nameTest + '=' + phoneBook[nameTest]) if nameTest in phoneBook else print('Not found') #查询姓名是否在电话簿里面 except: break #如果没有测资了,跳出迴圈
输入
2Ace 12345678Luffy 87654321ZoroNamiUsoppLuffy
结果为
Not foundNot foundNot foundLuffy=87654321
补充:
建立字典
字典里元素的"值"(value)可以是任何的资料型态,例如: 字串、整数、list、物件等等。但 key 必须是唯一且不可变的,也就是在写程式时不可随意更动,如整数、字串、tuple 等。
Python 创建字典的方式有两种:
例如:
movie_1 = {'name': 'Saving Private Ryan','year': 1998,'director': 'Steven Spielberg'}movie_2 = dict(name='The Breakfast Club',year=1985,director='John Hughes')
参考资料【Python 初学第九讲 — 字典】
【Python 3.1 快速导览 - 例外处理 try-except陈述】