版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、7-1.字典方法。哪個(gè)字典方法可以用來(lái)把兩個(gè)字典合并到一起。答案:dict.update(dict2)將字典dict2的鍵-值對(duì)添加到字典dict中7-2.字典的鍵。我們知道字典的值可以是任意的Python對(duì)象,那字典的鍵又如何呢?請(qǐng)?jiān)囍鴮⒊龜?shù)字和字符串意外的其他不同類型的對(duì)象作為字典的鍵,看看哪些類型可以,哪些不行。對(duì)那些不能作為字典的鍵的對(duì)象類型,你認(rèn)為是什么原因呢?答案:鍵必須是可哈希的。所有不可變的類型都是可哈希的,因此他們都可以作為字典的鍵。一個(gè)要說(shuō)明的問(wèn)題是:值相等的數(shù)字表示相同的鍵。換句話說(shuō),整型數(shù)字1和浮點(diǎn)型1.0的哈希值是相同的,即它們是相同的鍵。同時(shí),也有一些可變對(duì)象(很少
2、)是可哈希的,它們可以作為字典的鍵,但很少見(jiàn)。用元組做有效的鍵,必須要加限制:元組中只包括像數(shù)字和字符串這樣的不可變參數(shù),才可以作為字典中有效的鍵。內(nèi)建函數(shù)hash()可以判斷某個(gè)對(duì)象是否可以做一個(gè)字典的鍵,如果非可哈希類型作為參數(shù)傳遞給hash()方法,會(huì)產(chǎn)生TypeError錯(cuò)誤,否則會(huì)產(chǎn)生hash值,整數(shù)。>>> hash(1)1>>> hash('a')-468864544>>> hash(1,2)Traceback (most recent call last): File "<pyshell#2&
3、gt;", line 1, in <module> hash(1,2)TypeError: unhashable type: 'list'>>> hash(1:2,)Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> hash(1:2,)TypeError: unhashable type: 'dict'>>> hash(set('abc')Trac
4、eback (most recent call last): File "<pyshell#4>", line 1, in <module> hash(set('abc')TypeError: unhashable type: 'set'>>> hash('abc')-1600925533>>> hash(1.0)1>>> hash(frozenset('abc')-114069471>>> hash(1,3,9)1
5、140186820>>> hash(1,3,9),(1,2)340745663>>> hash(1,3,'9'),(1,2)1944127872>>> hash(1,3,'9'),1,2,(1,2)Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> hash(1,3,'9'),1,2,(1,2)TypeError: unhashable type: &
6、#39;list'>>> 7-3.字典和列表的方法。(a)創(chuàng)建一個(gè)字典,并把這個(gè)字典中的鍵按照字母順序顯示出來(lái)。(b)現(xiàn)在根據(jù)已經(jīng)按照字母順序排列好的鍵,顯示出這個(gè)字典中的鍵和值。(c)同(b),但這次是根據(jù)已按照字母順序排序好的字典的值,顯示出這個(gè)字典中的鍵和值(注意:對(duì)字典和哈希表來(lái)說(shuō),這樣做一般沒(méi)什么實(shí)際意義,因?yàn)榇蠖鄶?shù)訪問(wèn)和排序(如果需要)都是基于字典的鍵,這里只把它作為一個(gè)練習(xí))。答案:(a)>>> dict1 = 'a':1,'b':2,'c':3>>> >>&
7、gt; sorted(dict1.keys()'a', 'b', 'c'>>> (b)>>> dict1 = 'a':1,'b':2,'c':3>>> for i in sorted(dict1.keys():print i,dict1ia 1b 2c 3>>> (c)dict1 = 'a':3,'b':1,'c':2,'d':4print dict1dict1va
8、lue = dict1.values()dict1value.sort()for i in dict1value:for key in dict1.keys():if i = dict1key:print i,key7-4.建立字典。給定兩個(gè)長(zhǎng)度相同的列表,比如說(shuō),列表1,2,3,.和'abc', 'def', 'ghi', .,用這兩個(gè)列表里的所有數(shù)據(jù)組成一個(gè)字典。像這樣:1:'abc', 2:'def', 3:'ghi', .。答案:>>> dict(zip(5,3,2,8,&
9、#39;a','d','r','m')8: 'm', 2: 'r', 3: 'd', 5: 'a'>>> 75. userpw2.py。下面的問(wèn)題和例題7.1 中管理名字-密碼的鍵值對(duì)數(shù)據(jù)的程序有關(guān)。(a)修改那個(gè)腳本,使它能記錄用戶上次的登錄日期和時(shí)間(用time 模塊),并與用戶密碼一起保存起來(lái)。程序的界面有要求用戶輸入用戶名和密碼的提示。無(wú)論戶名是否成功登錄,都應(yīng)有提示,在戶名成功登錄后,應(yīng)更新相應(yīng)用戶的上次登錄時(shí)間戳。如果本次登錄與上次登錄在時(shí)間上相
10、差不超過(guò)4 個(gè)小時(shí),則通知該用戶: “You already logged in at: <last_ login_timestamp>.”(b) 添加一個(gè)“管理”菜單,其中有以下兩項(xiàng):(1)刪除一個(gè)用戶 (2)顯示系統(tǒng)中所有用戶的名字和他們的密碼的清單。(c) 口令目前沒(méi)有加密。請(qǐng)?zhí)砑右欢螌?duì)口令加密的代碼(請(qǐng)參考crypt, rotor, 或其它加密模塊)(d) 為程序添加圖形界面,例如,用Tkinter 寫。(e) 要求用戶名不區(qū)分大小寫。(f) 加強(qiáng)對(duì)用戶名的限制,不允許符號(hào)和空白符。(g)合并“新用戶”和“老用戶”兩個(gè)選項(xiàng)。如果一個(gè)新用戶試圖用一個(gè)不存在的用戶名登錄,詢問(wèn)該
11、用戶是否是新用戶,如果回答是肯定的,就創(chuàng)建該帳戶。否則,按照老用戶的方式登錄。答案:略7-6. 列表和字典。創(chuàng)建一個(gè)簡(jiǎn)單的股票證券投資數(shù)據(jù)系統(tǒng)。其中應(yīng)至少包含四項(xiàng)數(shù)據(jù):股市行情顯示器符號(hào),所持有的股票,購(gòu)買價(jià)格及當(dāng)前價(jià)位 - 你可以隨意添加其他數(shù)據(jù)項(xiàng),比如收益率,52 周最高指數(shù)、最低指數(shù),等等。用戶每次輸入各列的數(shù)據(jù)構(gòu)成一個(gè)輸出行。每行數(shù)據(jù)構(gòu)成一個(gè)列表。還有一個(gè)總列表,包括了所有行的數(shù)據(jù)。數(shù)據(jù)輸入完畢后,提示用戶選擇一列數(shù)據(jù)項(xiàng)進(jìn)行排序。把該數(shù)據(jù)項(xiàng)抽取出來(lái)作為字典的鍵,字典的值就是該鍵對(duì)應(yīng)行的值的列表。提醒讀者:被選擇用來(lái)排序的數(shù)據(jù)項(xiàng)必須是非重復(fù)的鍵,否則就會(huì)丟失數(shù)據(jù),因?yàn)樽值洳辉试S一個(gè)鍵有多
12、個(gè)值。你還可以選擇其他計(jì)算輸出,比如,盈虧比率,目前證券資產(chǎn)價(jià)值等。答案:略。以后補(bǔ)7-7. 顛倒字典中的鍵和值。用一個(gè)字典做輸入,輸出另一個(gè)字典,用前者的鍵做值,前者的值做鍵。dict1 = 'a':3,'b':1,'c':2,'d':4print dict1dict2 = for key in dict1.keys():dict2.update(.fromkeys(str(dict1key),key)print dict27-8. 人力資源。創(chuàng)建一個(gè)簡(jiǎn)單的雇員姓名和編號(hào)的程序。讓用戶輸入一組雇員姓名和編號(hào)。你的程序可以提供按照
13、姓名排序輸出的功能,雇員姓名顯示在前面,后面是對(duì)應(yīng)的雇員編號(hào)。附加題:添加一項(xiàng)功能,按照雇員編號(hào)的順序輸出數(shù)據(jù)。#coding:utf-8dict1 = dict2 = while True:name = raw_input('name: ')if name = 'q':breaknumber = int(raw_input('number: ')dict1name = numberdict2number = namedef name_output():print '-'* 21print ' name','
14、; number'for key in sorted(dict1.keys():print '%10s %10d' %(key,dict1key)print '-'* 21def number_output():print '-'* 21print ' number',' name'for key in sorted(dict2.keys():print '%10d %10s' %(key,dict2key)print '-'* 21def showmenu():prompt
15、 = """-Menu:(N)ame sort(S)ort number(Q)uit-Enter choice: """done = Truewhile done:chosen = Truewhile chosen:try:choice = raw_input(prompt).strip()0.lower()except (EOFError,KeyboardInterrupt):choice = 'q'print 'nYou picked: %s' % choiceif choice not in
16、39;nsq':print 'invalid option, try again'else:chosen = Falseif choice = 'q':breakif choice = 'n':name_output()if choice = 's':number_output()if _name_ = '_main_':showmenu()7-9. 翻譯(a) 編寫一個(gè)字符翻譯程序(功能類似于Unix 中的tr 命令)。我們將這個(gè)函數(shù)叫做tr(),它有三個(gè)字符串做參數(shù): 源字符串、目的字符串、基本字符串,
17、語(yǔ)法定義如下:def tr(srcstr, dststr, string)srcstr 的內(nèi)容是你打算“翻譯”的字符集合,dsrstr 是翻譯后得到的字符集合,而string 是你打算進(jìn)行翻譯操作的字符串。舉例來(lái)說(shuō),如果srcstr = 'abc', dststr = 'mno', string ='abcdef', 那么tr()的輸出將是'mnodef'. 注意這里len(srcstr) = len(dststr).在這個(gè)練習(xí)里,你可以使用內(nèi)建函數(shù)chr() 和 ord(), 但它們并不一定是解決這個(gè)問(wèn)題所必不可少的函數(shù)。(b)
18、 在這個(gè)函數(shù)里增加一個(gè)標(biāo)志符參數(shù),來(lái)處理不區(qū)分大小寫的翻譯問(wèn)題。(c)修改你的程序,使它能夠處理刪除字符的操作。字符串srcstr 中不能夠映射到字符串dststr中字符的多余字符都將被過(guò)濾掉。換句話說(shuō),這些字符沒(méi)有映射到dststr 字符串中的任何字符,因此就從函數(shù)返回的字符里被過(guò)濾掉了。舉例來(lái)說(shuō):如果 srcstr = 'abcdef', dststr = 'mno',string = 'abcdefghi', 那么tr()將輸出'mnoghi'. 注意這里len(srcstr) >= len(dststr).答案:不會(huì)
19、710. 加密。(a) 用上一個(gè)練習(xí)的思路編寫一個(gè)"rot13"翻譯器。"rot13"是一個(gè)古老而又簡(jiǎn)單的加密方法,它把字母表中的每個(gè)字母用其后的第13 個(gè)字母來(lái)代替。字母表中前半部分字母將被映射到后半部分,而后半部分字母將被映射到前半部分,大小寫保持不變。舉例來(lái)說(shuō),'a'將被替換為'n','X'將被替換為'K' 數(shù)字和符號(hào)不進(jìn)行翻譯。(b)在你的解決方案的基礎(chǔ)上加一個(gè)應(yīng)用程序,讓它提示用戶輸入準(zhǔn)備加密的字符串(這個(gè)算法同時(shí)也可以對(duì)加密后的字符串進(jìn)行解密),如下所示:% rot13.pyEn
20、ter string to rot13: This is a short sentence. Your string to en/decrypt was: Thisis a short sentence.The rot13 string is: Guvf vf n fubeg fragrapr.% rot13.pyEnter string to rot13: Guvf vf n fubeg fragrapr. Your string to en/decrypt was: Guvfvf n fubeg fragrapr.The rot13 string is: This is a short s
21、entence.答案:不會(huì)+17-11.定義。什么組成字典中合法的鍵?舉例說(shuō)明字典中合法的鍵和非法的鍵。答案:字典中的鍵必須是可哈希的,像列表和字典這樣的可變類型,由于他們不是可哈希的,所以不能作為鍵。7-12. 定義。 (a)在數(shù)學(xué)上,什么是集合? (b)在 Python 中,關(guān)于集合類型的定義是什么?答案:(a)數(shù)學(xué)上,把set稱作由不同的元素組成的集合,集合的成員通常被稱作集合元素。(b)Python中,集合對(duì)象是一組無(wú)序排列的可哈希的值。713. 隨機(jī)數(shù)。修改練習(xí)5-17 的代碼:使用random 模塊中的randint()或randrange()方法生成一個(gè)隨機(jī)數(shù)集合:從0 到9(包
22、括9)中隨機(jī)選擇,生成1 到10 個(gè)隨機(jī)數(shù)。這些數(shù)字組成集合A(A 可以是可變集合,也可以不是)。同理,按此方法生成集合B。每次新生成集合A 和B 后,顯示結(jié)果 A | B 和 A & B答案:import randomabc = xyz = for i in range(random.randint(1,10):abc.append(random.randint(0,9)A = set(abc)for i in range(random.randrange(1,10):xyz.append(random.randrange(0,9)B = set(xyz)print Aprint Bprint A | Bprint A & B7-14. 用戶驗(yàn)證。修改前面的練習(xí),要求用戶輸入A|B和A&B的結(jié)果,并告訴用戶的答案是否正確,而不是將A|B和A&B的結(jié)果直接顯示出來(lái)。如果用戶回答錯(cuò)誤,允許他修改解決方案,然后重新驗(yàn)證用戶輸入的答案。如果用戶三次提交的答案均不正確,程序?qū)@示正確結(jié)果。附加題:運(yùn)用你關(guān)于集合的知識(shí),創(chuàng)建某個(gè)集合的潛在子集,并詢問(wèn)用戶此潛在子集是否真是該集合的子集,要求和主程序一樣有顯示更正和答案的功能。答案:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 杭州市電影院租賃合同
- 2025版文員崗位培訓(xùn)與晉升聘用合同模板2篇
- 2025版文藝演出公司與劇院合作合同3篇
- 2025個(gè)人土地開(kāi)發(fā)使用權(quán)購(gòu)買合同樣本4篇
- 2025屆威海市高三語(yǔ)文上學(xué)期期末考試卷附答案解析
- 2025年度個(gè)人住房貸款保證合同個(gè)人貸款信息共享與查詢合同4篇
- 2025年三層樓房屋建造委托施工合同模板(2篇)
- 2025年三方專項(xiàng)法律服務(wù)合同范文(2篇)
- 2025年專業(yè)照明電器租賃合同模板(三篇)
- 2025年上海市汽車買賣合同(三篇)
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級(jí)國(guó)土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測(cè)對(duì)環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競(jìng)賽AMC8試卷(含答案)
- 神經(jīng)外科課件:神經(jīng)外科急重癥
- 2024年低壓電工證理論考試題庫(kù)及答案
- 2023年十天突破公務(wù)員面試
- 《瘋狂動(dòng)物城》中英文對(duì)照(全本臺(tái)詞)
- 醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)證明(樣本)
- 小學(xué)六年級(jí)語(yǔ)文閱讀理解100篇(及答案)
- 氣功修煉十奧妙
評(píng)論
0/150
提交評(píng)論