Python核心編程(第二版) 第六章習題答案


6–1.字符串.string 模塊中是否有一種字符串方法或者函數可以幫我鑒定一下一個字符串
是否是另一個大字符串的一部分?

答:有,string.find(str,beg,end)

6–2.字符串標識符.修改例 6-1 的 idcheck.py 腳本,使之可以檢測長度為一的標識符,並且
可以識別 Python 關鍵字,對后一個要求,你可以使用 keyword 模塊(特別是 keyword.kelist)來幫你.

 1 #!/usr/bin/python
 2 
 3 import string
 4 import keyword
 5 import sys
 6 
 7 Startwith=string.letters+'_'
 8 Othersymbol=string.letters+'_'+string.digits
 9 def CheckID(s):
10         if s[0] in Startwith:
11                 if len(s)==1:
12                         print "The ID is valid"
13                         if s in keyword.kwlist:
14                                 print "And the ID is a key word"
15                 else:
16                         for j in s[1:]:
17                                 if j not in Othersymbol:
18                                         print "The other symbol is invalid."
19                                         sys.exit()
20                         print "The ID is valid."
21                         if s in keyword.kwlist:
22                                 print "And the ID is a key word"
23         else:
24                 print "The startwith is invalid."
25 
26 
27 
28 
29 if __name__=="__main__":
30         sid=raw_input("Enter a string:")
31         CheckID(sid)

6–3.排序

(a) 輸入一串數字,從大到小排列之.
(b) 跟 a 一樣,不過要用字典序從大到小排列之.

 1 #!/usr/bin/python
 2 
 3 astring=raw_input("Enter a list of num:")
 4 alist=astring.split()
 5 print alist
 6 
 7 ilist=[]
 8 for s in alist:
 9         i=int(s)
10         ilist.append(i)
11 
12 print ilist
13 print sorted(ilist)
14 #print ilist.sort()
15 print sorted(alist)
16 #print alist.sort()

6–4.算術. 更新上一章里面你的得分測試練習方案,把測試得分放到一個列表中去.你的代
碼應該可以計算出一個平均分,見練習 2-9 和練習 5-3.

 1 !/usr/bin/python
 2 
 3 def value(num):
 4         if 90<=num<=100:
 5                 #print 'A'
 6                 return 'A'
 7         elif 80<=num<=89:
 8                 #print 'B'
 9                 return 'B'
10         elif 70<=num<=79:
11                 #print 'C'
12                 return 'C'
13         elif 60<=num<=69:
14                 #print 'D'
15                 return 'D'
16         elif num>=0 and num<60:
17                 #print 'F'
18                 return 'F'
19         else:
20                 print  "The num is invalid."
21 
22 
23 if __name__=="__main__":
24         vlist=[]
25         ilist=[56,34,78,90,62,81,100]
26         for i in ilist:
27                 vlist.append(value(i))
28         print vlist
29         print sorted(ilist)

6–5.
字符串
(a)更新你在練習 2-7 里面的方案,使之可以每次向前向后都顯示一個字符串的一個字符.
(b)通過掃描來判斷兩個字符串是否匹配(不能使用比較操作符或者 cmp()內建函數)。附加題:
在你的方案里加入大小寫區分.
(c)判斷一個字符串是否重現(后面跟前面的一致).附加題:在處理除了嚴格的回文之外,加入對
例如控制符號和空格的支持。
(d)接受一個字符,在其后面加一個反向的拷貝,構成一個回文字符串.

答:

c

 1 #!/usr/bin/python
 2 #encoding=utf-8
 3 #判斷一個字符串是否重現(后面跟前面的一致).
 4 #附加題:在處理除了嚴格的回文之外,加入對例如控制符號和空格的支持。
 5 import sys
 6 
 7 def palindorom(s):
 8         l=len(s)
 9         if l%2<>0:
10                 print "The string is not palindorom."
11         else:
12                 for i in (0,int((l-1)/2)):
13                         if s[i]==s[-(i+1)]:
14                                 pass
15                         else:
16                                 print "The string is not palindorom."
17                                 sys.exit()
18                 print "The string is a palindorom."
19 
20 if __name__=="__main__":
21         astring=raw_input("Enter a string:")
22         palindorom(astring)

d

 1 #!/usr/bin/python
 2 #encoding:utf-8
 3 #接受一個字符,在其后面加一個反向的拷貝,構成一個回文字符串.
 4 
 5 original=raw_input("Enter a string:").strip()
 6 length=len(original)
 7 palindorom=original
 8 for i in range(1,length+1):
 9         palindorom=palindorom+original[-i]
10 
11 print palindorom

6–6.字符串.創建一個 string.strip()的替代函數:接受一個字符串,去掉它前面和后面的
空格(如果使用 string.*strip()函數那本練習就沒有意義了)

 1 #!/usr/bin/python
 2 #encoding:utf-8
 3 #創建一個 string.strip()的替代函數:接受一個字符串,去掉它前面和后面的
 4 #空格(如果使用 string.*strip()函數那本練習就沒有意義了)
 5 
 6 original=raw_input("Enter a string:")
 7 length=len(original)
 8 print length
 9 for i in range(0,length):
10         if original[i]<>' ':
11                 lstrip=original[i:]
12                 print len(lstrip)
13                 break
14         else:
15                 pass
16 
17 
18 for i in range(1,length+1):
19         if lstrip[-1]<>' ':
20                 strip=lstrip
21                 break
22         elif lstrip[-i]<>' ':
23                 strip=lstrip[:-i+1]
24                 print len(strip)
25                 break
26         else:
27                 pass
28 
29 print strip

 6–7.調試.看一下在例 6.5 中給出的代碼(buggy.py)
(a)研究這段代碼並描述這段代碼想做什么.在所有的(#)處都要填寫你的注釋.
(b)這個程序有一個很大的問題,比如輸入 6,12,20,30,等它會死掉,實際上它不能處理任何的偶
數,找出原因.
(c)修正(b)中提出的問題.

 1 #!/usr/bin/python
 2 
 3 num_str=raw_input("Enter a number:")
 4 
 5 num_num=int(num_str)
 6 
 7 fac_list=range(1,num_num+1)
 8 
 9 print "BEFORE:",fac_list
10 i=0
11 while i<len(fac_list):
12         if num_num % (fac_list[i])==0:
13                 del fac_list[i]
14         else:
15                 i=i+1
16 
17 print "AFTER:",fac_list

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM