iT邦幫忙

4

[自學Python紀錄] HackerRank 新手30天挑戰-Day08

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

樣本輸入

3
sam 99912222
tom 11122222
harry 12299933
sam
edward
harry

樣本輸出

sam=99912222
Not found
harry=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 #如果沒有測資了,跳出迴圈

輸入

2
Ace 12345678
Luffy 87654321
Zoro
Nami
Usopp
Luffy

結果為

Not found
Not found
Not found
Luffy=87654321

  
 

補充:

建立字典

字典裡元素的"值"(value)可以是任何的資料型態,例如: 字串、整數、list、物件等等。但 key 必須是唯一且不可變的,也就是在寫程式時不可隨意更動,如整數、字串、tuple 等。
Python 創建字典的方式有兩種:

  1. 使用大刮號 {}
  2. 使用內建函數 dict()

例如:

movie_1 = {'name': 'Saving Private Ryan','year': 1998,'director': 'Steven Spielberg'}
movie_2 = dict(name='The Breakfast Club',year=1985,director='John Hughes')

尚未有邦友留言

立即登入留言