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