2020年9月15日星期二

[課後作業] 第025講:字典:當索引不好用時|課後測試題及答案

[課後作業] 第025講:字典:當索引不好用時|課後測試題及答案




《零基礎入門學習Python》視頻下載地址:傳送門
   
測試題:

0.當你聽到小伙伴們在談論“映射”、“哈希”、“散列”或者“關係數組”的時候,事實上他們就是在討論什麼呢?


1.嘗試一下將數據('F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115)創建為一個字典並訪問鍵'C'對應的值?


2.用方括號(“[]”)括起來的數據我們叫列表,那麼使用大括號(“{}”)括起來的數據我們就叫字典,對嗎?


3.你如何理解有些東西字典做得到,但“萬能的”列表卻難以實現(臣妾做不到T_T)?


4.下邊這些代碼,他們都在執行一樣的操作嗎?你看得出差別嗎?

  1. >>> a = dict(one=1, two=2, three=3)
  2. >>> b = {'one': 1, 'two': 2, 'three': 3}
  3. >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
  4. >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
  5. >>> e = dict({'three': 3, 'one': 1, 'two': 2})
複製代碼


5. 如圖,你可以推測出打了馬賽克部分的代碼嗎?




動動手:

0.嘗試利用字典的特性編寫一個通訊錄程序吧,功能如圖:




1.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

回复您的答案即可查看參考答案!


測試題答案:

本帖隱藏的內容

0.當你聽到小伙伴們在談論“映射”、“哈希”、“散列”或者“關係數組”的時候,事實上他們就是在討論什麼呢?

答:是的,事實上他們就是在討論我們這一講介紹的“字典”,都是一個概念!(切記,裝X的本質就是把同一個東西說成各種不同的事物~)


1.嘗試一下將數據('F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115)創建為一個字典並訪問鍵'C'對應的值?
  1. >>> MyDict = dict((('F', 70), ('i',105), ('s',115), ('h',104), ('C',67)))
  2. >>> MyDict_2 = {'F':70, 'i':105, 's':115, 'h':104, 'C':67}
  3. >>> type(MyDict)
  4. <class 'dict'>
  5. >>> type(MyDict_2)
  6. <class 'dict'>
  7. >>> MyDict['C']
  8. 67
複製代碼


2.用方括號(“[]”)括起來的數據我們叫列表,那麼使用大括號(“{}”)括起來的數據我們就叫字典,對嗎?


答:不對。
  1. >>> NotADict = {1, 2, 3, 4, 5}
  2. >>> type(NotADict)
  3. <class 'set'>
複製代碼

不難發現,雖然我們用大括號(“{}”)把一些數據括起來了,但由於沒有反映出這些數據有映射的關係,所以創建出來的不是字典,而是叫'set'的東西,那'set'到底又是啥玩意兒呢?請看第027講|集合:在我的世界裡,你就是唯一!


3.你如何理解有些東西字典做得到,但“萬能的”列表卻難以實現(臣妾做不到T_T)?

舉個例子:
  1. >>> brand = ['李寧', '耐克', '阿迪達斯', '魚C工作室']
  2. >>> slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing', '讓編程改變世界']
  3. >>> print('魚C工作室的口號是:', slogan[brand.index('魚C工作室')])
  4. 魚C工作室的口號是: 讓編程改變世界
複製代碼

列表brand、slogan的索引和相對的值是沒有任何關係的,我們可以看出唯一有聯繫的就是兩個列表間,索引號相同的元素是有關係的(品牌對應口號嘛),所以這裡我們通過brand.index('魚C工作室')這樣的語句,間接的實現通過品牌查找對應的口號的功能。
  
這確實是一種可實現方法,呃……但用起來呢,多少有些彆扭,效率還不高咧。況且Python是以簡潔為主,這樣子的實現肯定是不能讓人滿意的,所以呢,我們需要有字典這種映射類型的出現:
  1. >>> dict1 = {'李寧':'一切皆有可能', '耐克':'Just do it', '阿迪達斯':'Impossible is nothing', '魚C工作室':'讓編程改變世界' }
  2. >>> print('魚C工作室的口號是:', dict1['魚C工作室'])
  3. 魚C工作室的口號是: 讓編程改變世界
複製代碼


4. 下邊這些代碼,他們都在執行一樣的操作嗎?你看得出差別嗎?
  1. >>> a = dict(one=1, two=2, three=3)
  2. >>> b = {'one': 1, 'two': 2, 'three': 3}
  3. >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
  4. >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
  5. >>> e = dict({'three': 3, 'one': 1, 'two': 2})
複製代碼

答:是的,他們都在創建字典:a = dict(one=1, two=2, three=3),呃,我是看不出差別啦~
            
            
5.如圖,你可以推測出打了馬賽克部分的代碼嗎?

參考代碼:
  1. data = "1000,小甲魚,男"
  2. MyDict = {}
  3. # 還記得字符串的分割方法吧,別學過就忘啦^_^
  4. (MyDict['id'], MyDict['name'], MyDict['sex']) = data.split(',')

  5. print("ID: " + MyDict['id'])
  6. print("Name: " + MyDict['name'])
  7. print("Sex " + MyDict['sex'])
複製代碼




動動手答案:


本帖隱藏的內容

0.嘗試利用字典的特性編寫一個通訊錄程序吧!

參考代碼:

  1. print('|--- 歡迎進入通訊錄程序---|')
  2. print('|--- 1:查詢聯繫人資料 ---|')
  3. print('|--- 2:插入新的聯繫人 ---|')
  4. print('|--- 3:刪除已有聯繫人 ---|')
  5. print('|--- 4:退出通訊錄程序 ---|')

  6. contacts = dict()

  7. while 1:
  8.     instr = int(input('\n請輸入相關的指令代碼:'))
  9.    
  10.     if instr == 1:
  11.         name = input('請輸入聯繫人姓名:')
  12.         if name in contacts:
  13.             print(name + ' : ' + contacts[name])
  14.         else:
  15.             print('您輸入的姓名不再通訊錄中!')

  16.     if instr == 2:
  17.         name = input('請輸入聯繫人姓名:')
  18.         if name in contacts:
  19.             print('您輸入的姓名在通訊錄中已存在-->> ', end='')
  20.             print(name + ' : ' + contacts[name])
  21.             if input('是否修改用戶資料(YES/NO):') == 'YES':
  22.                 contacts[name] = input('請輸入用戶聯繫電話:')
  23.         else:
  24.             contacts[name] = input('請輸入用戶聯繫電話:')

  25.     if instr == 3:
  26.         name = input('請輸入聯繫人姓名:')
  27.         if name in contacts:
  28.             del(contacts[name]) # 也可以使用dict.pop()
  29.         else:
  30.             print('您輸入的聯繫人不存在。')
  31.             
  32.     if instr == 4:
  33.         break

  34. print('|--- 感謝使用通訊錄程序---|')
  35.    
複製代碼


1.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^

Python中的字典與日常生活中的字典進行比較是:將單詞稱為鍵(key),把這個單詞對應的含義稱為值(value)。另外,Python的字典在很多地方稱為哈希。Python中的字典為映射類型。
(1)創建和訪問字典
字典的標誌性符號是大括號。字典由多個鍵和其對應的值共同構成,每一對鍵值組合稱之為項,
  • 創建一個空字典:dict1 = { }
  • 一般創建字典方法:dict1 = {1:'one',2:'two',3:'three'}
通過映射關係創建字典:dict1 = dict(  ( (1,'one'), (2,'two'), (3,'three') )  )或者dict1 = dict( [ (1,'one'), (2,'two'), (3,'three') ] )或者dict1 = dict( [ [1,'one'], [2,'two'], [3,'three'] ] )
其中,最裡面的幾組小括號或者中括號是表示映射關係,第二層的小括號或中括號是將其組合成元組或列表,然後使用dict()函數根據映射關係創建字典。
  • 修改字典鍵對應的值:dict1[2] = 'double'
  • 增加一組鍵值:在上一行修改字典鍵對應值中,如果沒有找到對應的鍵,就增加一組鍵值:dict1[4] = 'four'

0 留言:

發佈留言