《Python程序設計》習題與答案 - 下載本文

x = x[:result.start(0)]+'i'+x[result.end(0)-1:] else:

break print(x)

4.3 有一段英文文本,其中有單詞連續重復了2次,編寫程序檢查重復的單詞并只保留一個。例如文本內容為“This is is a desk.”,程序輸出為“This is a desk.”

答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。

1)方法一

import re

x = 'This is a a desk.'

pattern = re.compile(r'\\b(\\w+)(\\s+\\1){1,}\\b') matchResult = pattern.search(x)

x = pattern.sub(matchResult.group(1),x) print(x) 2)方法二

x = 'This is a a desk.'

pattern = re.compile(r'(?P\\b\\w+\\b)\\s(?P=f)') matchResult = pattern.search(x)

x = x.replace(matchResult.group(0),matchResult.group(1))

4.4 簡單解釋Python的字符串駐留機制。 答:

Python支持字符串駐留機制,即:對于短字符串,將其賦值給多個不同的對象時,內存中只有一個副本,多個對象共享該副本。這一點不適用于長字符串,即長字符串不遵守駐留機制,下面的代碼演示了短字符串和長字符串在這方面的區別。 >>> a = '1234' >>> b = '1234' >>> id(a) == id(b) True

>>> a = '1234'*50 >>> b = '1234'*50 >>> id(a) == id(b) False

4.5 編寫程序,用戶輸入一段英文,然后輸出這段英文中所有長度為3個字母的單詞。 答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。

import re

x = input('Please input a string:')

pattern = re.compile(r'\\b[a-zA-Z]{3}\\b') print(pattern.findall(x))

第5章 函數設計與使用

5.1 運行5.3.1小節最后的示例代碼,查看結果并分析原因。

答:原因是對于函數的默認值參數只會被處理一次,下次再調用函數并且不為默認值參數賦值時會繼續使用上一次的結果,對于列表這樣的結構,如果調用函數時為默認值參數的列表插入或刪除了元素,將會得到保留,從而影響下一次調用。

5.2 編寫函數,判斷一個整數是否為素數,并編寫主程序調用該函數。

答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。 import math def IsPrime(v):

n = int(math.sqrt(v)+1) for i in range(2,n): if v%i==0: return 'No' else:

return 'Yes' print(IsPrime(37)) print(IsPrime(60)) print(IsPrime(113))

5.3 編寫函數,接收一個字符串,分別統計大寫字母、小寫字母、數字、其他字符的個數,并以元組的形式返回結果。

答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。

def demo(v):

capital = little = digit = other =0 for i in v:

if 'A'<=i<='Z': capital+=1 elif 'a'<=i<='z': little+=1 elif '0'<=i<='9': digit+=1 else:

other+=1

return (capital,little,digit,other) x = 'capital = little = digit = other =0'

print(demo(x))

5.4 在Python程序中,局部變量會隱藏同名的全局變量嗎?請編寫代碼進行驗證。 答案:會。 >>> def demo(): a=3 print a >>> a=5 >>> demo() 3 >>> a 5

5.5 編寫函數,可以接收任意多個整數并輸出其中的最大值和所有整數之和。 答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。 def demo(*v): print(v)

print(max(v)) print(sum(v)) demo(1,2,3) demo(1,2,3,4) demo(1,2,3,4,5)

5.6 編寫函數,模擬內置函數sum()。

答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。 def Sum(v): s = 0 for i in v: s += i return s x = [1,2,3,4,5] print(Sum(x)) x = (1,2,3,4,5) print(Sum(x))

5.7 編寫函數,模擬內置函數sorted()。

答:這里給出Python 3.4.2代碼,如果使用Python 2.7.8的話只需要修改其中的print()函數為print語句即可。 def Sorted(v): t = v[::] r = [] while t:

tt = min(t) r.append(tt) t.remove(tt) return r

x = [1,3,5,2,1,0,9,7] print(x)

print(Sorted(x))





陕西福彩快乐十分玩法