第025講:字典:當索引不好用時 | 課后測試題及答案


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

  me:字典

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

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

  me:

dict1={'F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115}
print(dict1["C"])

   參考答案:

>>> MyDict = dict((('F', 70), ('i',105), ('s',115), ('h',104), ('C',67)))
>>> MyDict_2 = {'F':70, 'i':105, 's':115, 'h':104, 'C':67}
>>> type(MyDict)
<class 'dict'>
>>> type(MyDict_2)
<class 'dict'>
>>> MyDict['C']
67

 

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

  me:不對,只是列表的表達形式是用[]將數據括起來,字典的表達形式是使用{}將數據括起來,但是使用{}括起來的數據並不能表示為字典

  參考答案:

>>> NotADict = {1, 2, 3, 4, 5}
>>> type(NotADict)
<class 'set'>

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

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

  me:

  參考答案:

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

  列表brand、slogan的索引和相對的值是沒有任何關系的,我們可以看出唯一有聯系的就是兩個列表間,索引號相同的元素是有關系的(品牌對應口號嘛),所以這里我們通過brand.index('魚C工作室')這樣的語句,間接的實現通過品牌查找對應的口號的功能。
  
這確實是一種可實現方法,呃……但用起來呢,多少有些別扭,效率還不高咧。況且Python是以簡潔為主,這樣子的實現肯定是不能讓人滿意的,所以呢,我們需要有字典這種映射類型的出現:

>>> dict1 = {'李寧':'一切皆有可能', '耐克':'Just do it', '阿迪達斯':'Impossible is nothing', '魚C工作室':'讓編程改變世界'}
>>> print('魚C工作室的口號是:', dict1['魚C工作室'])
魚C工作室的口號是: 讓編程改變世界

 

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

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})

  me:

  參考答案:是的,他們都在創建字典:a = dict(one=1, two=2, three=3),呃,我是看不出差別啦~

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

 

   me:

date="100,小甲魚,男"
MyDict={}
(MyDict["id"],MyDict["name"],MyDict["sex"])=date.split(",",3)
print("ID: " + MyDict["id"])
print("name: " + MyDict["name"])
print("sex: " +MyDict["sex"])

  參考答案:

動手:

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

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

 

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

 

   me:

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

dictTX=dict()
while 1:
    InputY = int(input("請輸入相關的指令代碼:"))
    if InputY == 1:
        name = input("請輸入聯系人姓名:")
        print(name + "" + dictTX[name])
    elif InputY == 2 :
        name = input("請輸入聯系人姓名:")
        if name in dictTX:
            print("您輸入的姓名已經在通訊錄中 -->> ",name," : ",dictTX[name])
            temp = input("是否需要修改用戶資料(YES/NO):")
            if temp == "YES":
                namder = input("請輸入用戶聯系電話:")
                dictTX[name] = namder
        else:
            namder = input("請輸入用戶聯系電話:")
            dictTX[name] = namder
    elif InputY == 3:
        name=input("請輸入聯系人姓名:")
        if name in dictTX:
            del dictTX[name]
        else:
            print(name,"不在通訊錄中;")
    elif InputY == 4:
        print("|--- 感謝使用通訊錄程序 ---|")
        break

   參考答案:

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

contacts = dict()

while 1:
    instr = int(input('\n請輸入相關的指令代碼:'))
    
    if instr == 1:
        name = input('請輸入聯系人姓名:')
        if name in contacts:
            print(name + ' : ' + contacts[name])
        else:
            print('您輸入的姓名不再通訊錄中!')

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

    if instr == 3:
        name = input('請輸入聯系人姓名:')
        if name in contacts:
            del(contacts[name])         # 也可以使用dict.pop()
        else:
            print('您輸入的聯系人不存在。')
            
    if instr == 4:
        break

print('|--- 感謝使用通訊錄程序 ---|')
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM