本部落格列出的答案不是來自官方資源,是我自己做的練習,可能有誤。
8-11.文本處理。要求輸入一個姓名列表,輸入格式是“Last Name, First Name”即姓逗號名。編寫程式處理輸入,如果使用者輸入錯誤,比如“Last Name First Name,”,請糾正這些錯誤,並通知使用者。同時你還需要記錄輸入錯誤次數。當使用者輸入結束後,給列表排序,然後以“姓,名”的順序顯示。
輸入輸出樣本(你不需要完全按照這裡的例子完成):
% nametrack.py
Enter total number of names: 5
Please enter name 0: Smith, Joe
Please enter name 1: Marry Wong
>> Wrong format ... should be Last, First.
>> You have done this 1 time(s) already, Fixing input ...
Please enter name 2: Hamilton, Gerald
Please enter name 3: Royce, Linda
Please enter name 4: Winston Salem
>> Wrong format ... should be Last, First.
>> You have done this 2 time(s) already, Fixing input ...
The sorted list(by last name) is:
Hamilton, Gerald
Royce, Linda
Salem, Winston
Smith, Joe
Wong, Marry
【答案】
代碼如下:
def fixing(name): name_temp = name.split() return name_temp[-1] + ", " + name_temp[-2]def verify(name): if "," in name: return True else: return False total_number = int(raw_input("Enter total number of names: "))name_list = []error_times = 0notice1 = "Please enter name "noticea = "Wrong format ... should be Last, First."notice2 = "You have done this "notice3 = " time(s) already, Fixing input ..."for i in range(total_number): name = raw_input(notice1 + str(i) + ": ") if verify(name): name_list.append(name) else: error_times += 1 print noticea print notice2 + str(error_times) + notice3 name_list.append(fixing(name))print "\n The sorted list(by last name) is:"name_list.sort()for i in range(len(name_list)): print name_list[i]
8-12.(整型)位操作。編寫一個程式,使用者給出起始和結束數字後給出一個下面這樣的表格,分別顯示出兩個數字間所有整型的十進位,二進位,八進位和十六進位表示。如果字元是可列印的ASCII字元,也要把它列印出來,如果沒有一個是可列印字元,就省略掉ASCII那一欄的表頭。請參考下面的輸出格式:
輸出樣本1
------------
輸入起始值:9
輸入結束值:18
DEC BIN OCT HEX
----------------------------
9 01001 11 9
10 01010 12 a
11 01011 13 b
12 01100 14 c
13 01101 15 d
14 01110 16 e
15 01111 17 f
16 10000 20 10
17 10001 21 11
18 10010 22 12
輸出樣本2
------------
輸入起始值:26
輸入結束值:41
DEC BIN OCT HEX ASCII
-------------------------------------
26 011010 32 1a
27 011011 33 1b
28 011100 34 1c
29 011101 35 1d
30 011110 36 1e
31 011111 37 1f
32 100000 40 20
34 100010 42 22 "
35 100011 43 23 #
36 100100 44 24 $
37 100101 45 25 %
38 100110 46 26 &
39 100111 47 27 '
40 101000 50 28 (
41 101001 51 29 )
【答案】
一個不完善的代碼如下:
def to_bin(i): a = str(bin(i)) return a[0] + a[2:] def to_oct(i): a = str(oct(i)) return a[1:]def to_hex(i): a = str(hex(i)) return a[2:]begin_number = int(raw_input("Please input the begin number: ... "))end_number = int(raw_input("Please input the ending number ... "))print "The beginning number is: ", begin_numberprint "The ending number is: ", end_numberprint "DEC", "\tBIN", "\tOCT", "\tHEX"print "--------------------------------"i = begin_numberwhile i <= end_number: print i, "\t", to_bin(i), "\t", to_oct(i), "\t", to_hex(i) i += 1
【執行結果】
Please input the begin number: ... 9Please input the ending number ... 18The beginning number is: 9The ending number is: 18DEC BIN OCT HEX--------------------------------9 01001 11 910 01010 12 a11 01011 13 b12 01100 14 c13 01101 15 d14 01110 16 e15 01111 17 f16 010000 20 1017 010001 21 1118 010010 22 12
【未完】
這裡僅僅部分實現了程式的要求。相比原題,還有一定差距,目前感覺有點難度,暫時押後。
【參考】
python 常用轉換函式
http://blog.chinaunix.net/space.php?uid=16362696&do=blog&id=2746671
8-13.程式執行效能。在8.5.2節裡,我們介紹了兩種基本的迭代序列方法:(1)通過序列項,以及(2)通過序列索引遍曆。該小節的末尾我們指出後一種方法在序列很長的時候效能不佳(在我的系統下,效能相差了將近兩倍[83%])你認為它的原因是什嗎?
【注】這裡的“在8.5.2節裡”,應該是指8.6.2節,書的第195頁。
【未完】感覺是這樣,但具體怎麼科學的解釋,目前感覺有點難度,暫時押後。