Chapter~7 映射和集合類型

7-1 字典方法。哪一個字典方法能夠用來把兩個字典合併到一塊兒?node

7-2 字典的鍵。咱們知道字典的值能夠是任意的Python對象,那字典的鍵又如何呢?請試着將除數字和字符串之外的其餘不一樣類型的對象做爲字典的鍵,看一看哪些類型能夠,哪些不行?對那些不能做爲字典的鍵的類型,你認爲是什麼緣由呢?python

字典的鍵通常都爲不可變類型算法

元組能夠,列表不行,列表爲不可哈希對象dom

7-3 字典和列表的方法。函數

(a)建立一個字典,並把這個字典中的鍵按照剪切字母順序顯示出來。加密

(b)如今根據已按照字母順序排序好的鍵,顯示出這個字典中的鍵和值。spa

(c)同(b),但此次是根據已按照字母順序排序好的字典的值,顯示出這個字典中的鍵和值(注意:對字典和哈希表來講,這樣作通常沒什麼實際意義,由於大多數訪問和排序(若是須要)都是基於字典的鍵,這裏只把它做爲一個練習)翻譯

(a)對象

(b)排序

(c)

7-4 創建字典。給定兩個長度相同的列表,好比說,列表[1,2,3,...]和['abc','def','ghi,...],用這兩個列表的全部數據組成一個字典,像這樣:{1:‘abc’,2:'def',3:'ghi',...}

7-5 userpw2.py。下面的問題和例題7.1中管理名字-密碼的鍵值對數據的程序有關。

(a)修改那個腳本,使它能記錄用戶上次的登陸日期和時間(用time模塊),並與用戶密碼一塊兒保存起來。程序的界面有要求用戶輸入用戶名和密碼的提示。不管用戶名是否成功登陸,都應有提示,在用戶名登陸成功後,應更新相應用戶的上次登陸時間戳。若是本次登陸與上次登陸在時間上相差不超過4個小時,則通知該用戶:‘You already logged in at:<last_login_timestamp>.’

(b)添加一個‘管理’菜單,其中有如下兩項:(1)刪除一個用戶(2)顯示系統中全部用戶名字和他們的密碼的清單.

(c)口令目前沒有加密。請添加一段對口令加密的代碼

(d)爲程序添加圖形界面,例如,用Tkinter寫。

(e)要求用戶名不區分大小寫。

(f)增強對用戶名的限制不容許出現符號和空白符。

(g)合併‘新用戶’和‘老用戶’兩個選項

7-6 列表和字典。建立一個簡單的股票證券投資數據系統。其中應至少包含4項數據:股市行情顯示器符號、所持有的股票、購買價格及當前價位——你能夠隨意添加其餘數據項,好比收益率,52周最高指數、最低指數,etc。

7-7 顛倒字典中的鍵和值。用一個字典作輸入輸出另外一個字典,用前者的鍵作值,前者的值作鍵。

7-8 人力資源。建立一個簡單的僱員姓名和編號的程序,讓用戶輸入一組僱員姓名和編號。你的程序可提供按照姓名排序輸出的功能,僱員姓名顯示在前面,後面是對應的僱員編號。附加題:添加一項功能,按照僱員編號的順序輸出數據。

7-9 翻譯。

(a)編寫一個字符翻譯程序(功能相似於Unix的tr命令)。咱們將這個函數叫作tr(),它有三個字符串作參數:源字符串、目的字符串、基本字符串語法定義以下:

    def tr(srcstr, dststr, string)

srcstr的內容是你打算‘翻譯’的字符集合,dsrstr是翻譯後獲得的字符集合,而string是你打算進行翻譯操做的字符串。舉例來講,若是srcstr == ‘abc’,dststr == ‘mno’,string == ‘abcdef’,那麼tr()的輸出將是‘mnodef’。注意到這裏len(srcstr) == len(dststr)。

在這個練習中,你可使用內建函數chr()和ord(),但它們並不必定是解決這個問題所必不可少的函數。

(b)在這個函數裏增長一個標誌參數,來處理不區分大小寫的翻譯問題。

(c)修改你的程序,使它可以處理刪除字符的操做。字符串srcstr中不可以映射到字符串dststr中字符的多餘字符都將被過濾掉。換句話說,這些字符沒有映射到dststr字符串中的任何字符所以就從函數返回的字符裏被過濾掉了。舉例來講:若是srcstr==‘abcdef’,dststr==‘mno’,string ==‘abcdefghi’,那麼tr()將輸出‘mnoghi’.注意這裏len(srcstr)>=len(dststr)。

7–10. 加密。
(a) 用上一個練習的思路編寫一個"rot13"翻譯器。"rot13"是一個古老而又簡單的加密方法,它把字母表中的每一個字母用其後的第13 個字母來代替。字母表中前半部分字母將被映射到後半部分,然後半部分字母將被映射到前半部分,大小寫保持不變。舉例來講,'a'將被替換爲'n','X' 將被替換爲'K'; 數字和符號不進行翻譯。
(b)在你的解決方案的基礎上加一個應用程序,讓它提示用戶輸入準備加密的字符串(這個算法同時也能夠對加密後的字符串進行解密),以下所示:
% rot13.py
Enter 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.py
Enter 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 sentence.].

7-11定義。什麼組成字典中合法的鍵?舉例說明字典中合法的鍵和非法的鍵。

大多數python對象

非法的鍵:字典和列表

合法的鍵:數字、字符串

7-12定義。(a)在數學上,什麼是集合?

(b)在Python中關於集合類型的定義是什麼?

(a)由不一樣元素組成的集合

(b)集合對象是一組是無序排列的可哈希的值

7–13. 隨機數。

修改練習5-17 的代碼:使用random 模塊中的randint()或randrange()方法生成一個隨機數集合:

從0 到9(包括9)中隨機選擇,生成1 到10 個隨機數。這些數字組成集合A(A 能夠是可變集合,

也能夠不是)。同理,按此方法生成集合B。每次新生成集合A 和B 後,顯示結果 A | B 和 A & B

7-14用戶驗證。修改前面的練習,要求用戶輸入A|B和A&B的結果,並告訴用戶的答案是否正確,而不是將A|B和A&B的結果直接顯示出來。若是用戶回答 錯誤,容許他修改解決方案,而後從新驗證用戶輸入的答案。若是用戶三次提交的答案均不正確,程序將顯示正確結果。附加題:運用你關於集合的知識,建立某個 集合的潛在子集,並詢問用戶此潛在子集是否真是該集合的子集,要求和主程序同樣有顯示更正和答案的功能。

7–15. 編寫計算器。這個練習取材於http://math.hws.edu/ 在線免費Java 教材中的練習12.2。編寫

一個程序容許用戶選擇兩個集合:A 和B, 及運算操做符。例如,in, not in, &, |, ^, <,<=, >, >=, ==,

!=, 等. (你本身定義集合的輸入語法,它們並不必定要像Java 示例中那樣用方括號括住。)解析

輸入的字符串,按照用戶選擇的運算進行操做。你寫的程序代碼應該比Java 版本的該程序更簡

潔。

相關文章
相關標籤/搜索