《Python核心編程》第二版第209頁第八章練習 續三 -Python核心編程答案-自己做的-

來源:互聯網
上載者:User

本部落格列出的答案不是來自官方資源,是我自己做的練習,可能有誤。

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頁。
【未完】感覺是這樣,但具體怎麼科學的解釋,目前感覺有點難度,暫時押後。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.