《Python核心編程》第二版第308頁第十一章練習 續一 -Python核心編程答案-自己做的-

來源:互聯網
上載者:User

本部落格列出的答案不是來自官方資源,是我自己做的練習,如果有疑問或者錯誤,歡迎討論。
原書(英文版)作者的blog
http://wescpy.blogspot.ca/

11-7.
用map()進行函數式編程。給定一對同一大小的列表,如[1, 2, 3, ...]和['abc', 'def', 'ghi', ...],將兩個列表歸併為一個由每個列表元素組成的元組的單一列表,以使我們的結果看起來像這樣:{[(1, 'abc'), (2, 'def'), (3, 'ghi'), ...}。(雖然這問題在本質上和第6章的一個問題類似,那時兩個解沒有直接的聯絡)然後建立用zip內建函數建立另一個解。
【答案】
代碼如下:

>>> listA = [1, 2, 3, 4]>>> listB = ['abc', 'def', 'ghi', 'jkl']>>> map(None, listA, listB)[(1, 'abc'), (2, 'def'), (3, 'ghi'), (4, 'jkl')]>>> zip(listA, listB)[(1, 'abc'), (2, 'def'), (3, 'ghi'), (4, 'jkl')]>>>

 

11-8.
用filter()進行函數式編程,使用練習5-4你給出的代碼來決定閏年。更新你的代碼以便使它成為一個函數,如果你還沒有那麼做的話。然後寫一段代碼來給出一個年份的列表並返回一個只有閏年的列表。然後將它轉化為用列表解析。

【答案】

代碼如下:

from random import randint def leapYear(year):    a4 = year % 4    a100 = year % 100    a400 = year % 400    if (a4 == 0 and a100 != 0) or a400 == 0:         return True yearList = []for eachYear in range(20):    yearList.append(randint(1000, 2051))print filter(leapYear, yearList)# From www.cnblogs.com/balian/

 

11-9.
用reduce()進行函數式編程。複習11.7.2部分,闡述如何用reduce()計算數字集合的總和。修改它並建立一個叫average()的函數來計算每個數字集合的簡單的平均值。

【答案】

根據第293頁的例子,利用函數reduce()計算數字集合(列表List)的總和,可這樣做:

reduce( (lambda x, y; x+y), List )

計算平均數代碼如下:

>>> def average(List):...     return reduce((lambda x,y: x+y), List)/float(len(List))...>>> List = range(101)>>> print average(List)50.0

 

11-10.
用filter()進行函數式編程。在unix檔案系統中,在每個檔案夾或者目錄中都有兩個特別的檔案:"."表示現在的目錄,".."表示父目錄。給出上面的知識,看一下os.listdir()函數的文檔並描述這段代碼做了什麼:

files = filter(lambda x: x and x[0] != '.', os.listdir(folder))

【答案】

手頭沒有unix系統,但在linux上面試了一下,但十分沒有把握。假設folder是檔案夾路徑字串‘/tmp’,os.listdir(folder)能列出檔案夾/tmp的所有檔案夾和檔案。但題目所示的代碼將把特別檔案"."和".."從os.listdir的輸出資料行表中過濾掉。等有了unix再試一下,我的想法可能不對。

 

11-11.

用map()進行函數式編程。寫一個使用檔案名稱以及通過除去每行中所有排頭和最尾的空白來“清潔”檔案。在原始檔案中讀取然後寫入一個新的檔案,建立一個新的或者覆蓋掉已存在的。給你的使用者一個選擇來決定執行哪一個。將你的解轉換成使用列表解析。

【注】附英文版題目的原文:

Functional Programming with map(). Write a program that takes a filename and “cleans” the file by removing all leading and trailing whitespace from each line. Read in the original file and write out a new one, either creating a new file or overwriting the existing one. Give your user the option to pick which of the two to perform. Convert your solution to using list comprehensions.

【答案】

代碼如下:

#-*- encoding: utf-8 -*-def CustomerChoice():    "本函數讓使用者選擇是建立新檔案還是覆蓋舊檔案。"    while True:        print 'Please select: '        print "To create a new 'clean' file, please input 'N'.  "        print "To overwrite the existing file, please input 'O'.   "        Input = raw_input('Your choice is:...  ')        if Input == 'N':            return True            break        elif Input == 'O':            return False            break        else:            print "Error input, try again.   "            def LineProcess(eachLine):    eachLine = eachLine[0:-1]    beginCharacter = eachLine[0]    endCharacter = eachLine[len(eachLine)-1]    while beginCharacter == ' ':        eachLine = eachLine[1:]        beginCharacter = eachLine[0]    while endCharacter == ' ':        eachLine = eachLine[:-1]        endCharacter = eachLine[len(eachLine)-1]    return eachLinetextFile = open('d:\sample_11_11.txt', 'r')newLines = map(LineProcess, textFile)print newLinestextFile.close()customerInput = CustomerChoice()if customerInput:   #建立一個新的乾淨檔案    newFile = open(r'd:\newclean.txt', 'w')    for eachline in newLines:        newFile.write(eachline + '\n')    newFile.close()else:   #覆蓋原來的檔案    overwriteFile = open('d:\sample_11_11.txt', 'w')    for eachline in newLines:        overwriteFile.write(eachline + '\n')    overwriteFile.close()

 

【注】這裡假設有一個名為sample_11_11.txt的檔案在D盤的根目錄下。
sample_11_11.txt具體內容:

   abc   d  
  this is an sample.     
Let me try.   
  Hello world   .

  Hello world.  
Hi, man.  
【參考】

做這題我參考了下面連結:

http://bbs.chinaunix.net/thread-3605638-1-1.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.