核心編程第二版第六章習題
6–1. 字符串.string 模塊中是否有一種字符串方法或者函數可以幫我鑒定一下一個字符串
是否是另一個大字符串的一部分?
成員關系操作符in
obj in seq
6–3. 排序
(a) 輸入一串數字,從大到小排列之.
(b) 跟 a 一樣,不過要用字典序從大到小排列之
(a)
num=raw_input(">>") lisnum=list(num) list.sort(lisnum) print lisnum
(b)沒看懂
6–4. 算術. 更新上一章裏面你的得分測試練習方案,把測試得分放到一個列表中去.你的代
碼應該可以計算出一個平均分,見練習 2-9 和練習 5-3.
num=[89,63,78,99,100] result=float(sum(num)) aver=result/len(num) print aver
6–5. 字符串
(a)更新你在練習 2-7 裏面的方案,使之可以每次向前向後都顯示一個字符串的一個字符.
(b)通過掃描來判斷兩個字符串是否匹配(不能使用比較操作符或者 cmp()內建函數)。附加題:
在你的方案裏加入大小寫區分.
(c)判斷一個字符串是否重現(後面跟前面的一致).附加題:在處理除了嚴格的回文之外,加入對
例如控制符號和空格的支持。
(d)接受一個字符,在其後面加一個反向的拷貝,構成一個回文字符串.
(b)
a="abc" b="abc" c="ABC" print a == b print a== c
(c)
a="abc" b=a[::-1] c=a+b print c
6–6. 字符串.創建一個 string.strip()的替代函數:接受一個字符串,去掉它前面和後面的
空格(如果使用 string.*strip()函數那本練習就沒有意義了)
a=" bbb v " def stripp(a): num=len(a) for i in range(num): if a[0]==" ": a=a[1:] else: return a a=stripp(a) b=a[::-1] c=stripp(b) c=c[::-1] print c
6–8. 列表.給出一個整數值,返回代表該值的英文,比如輸入 89 返回"eight-nine"。附加題:
能夠返回符合英文語法規則的形式,比如輸入“89”返回“eighty-nine”。本練習中的值限定在家 0
到 1,000.
unit=[‘zero‘,‘one‘,‘two‘,‘three‘,‘four‘,‘five‘,‘six‘,‘seven‘,‘eight‘,‘nine‘] ten_unit=[‘ten‘,‘eleven‘,‘twelve‘,‘thirteen‘,‘fourteen‘,‘fifteen‘,‘sixteen‘,‘seventeen‘,‘eighteen‘,‘nineteen‘] ten=[‘twenty‘,‘thirty‘,‘forty‘,‘fifty‘,‘sixty‘,‘seventy‘,‘eighty‘,‘ninety‘] num=raw_input(">>") def Num(num): if num==‘1000‘: print ‘one thousand‘ elif len(num)==1: return unit[int(num)] elif len(num)==2 and num[0]==‘1‘: return ten_unit[int(num[1])] elif len(num)==2: first=num[0] tennum=ten[int(first)-2] second=num[1] if second==‘0‘: enlishword=tennum else: unitnum=unit[int(second)] enlishword=tennum+‘-‘+unitnum return enlishword elif num==‘100‘: print ‘one hundred‘ elif len(num)==3 and num!=‘100‘: first=num[0] hundrednum=unit[int(first)] num=num[1:] num=Num(num) enlistword=hundrednum+‘ hundred ‘+‘and ‘+num print enlistword else: print "請輸入0-1000之間的數字" Num(num)
6–9. 轉換.為練習 5-13 寫一個姊妹函數, 接受分鐘數, 返回小時數和分鐘數. 總時間不
變,並且要求小時數盡可能大
def hour(minute): hourtime=minute/60 minutetime=minute%60 print "%d:%d"%(hourtime,minutetime) hour(1340)
6–10.字符串.寫一個函數,返回一個跟輸入字符串相似的字符串,要求字符串的大小寫反轉.
比如,輸入"Mr.Ed",應該返回"mR.eD"作為輸出
string="Hello World" string=string.swapcase() print string
6–11.轉換
(a)創建一個從整數到 IP 地址的轉換程序,如下格式: WWW.XXX.YYY.ZZZ.
(b)更新你的程序,使之可以逆轉換.
print ‘--------------(a)--------------‘ def format_ip(): num = raw_input(‘Enter ip number(12 integer)‘) w = num[0:3] x = num[3:6] y = num[6:9] z = num[9:12] tmp = [w,x,y,z] ip = ‘.‘.join(tmp) return ip if __name__ == ‘__main__‘: print format_ip() print ‘------------------(b)----------------‘ def ip_format(): ip=raw_input("enter ip:") num=ip.replace(‘.‘,‘‘) num=int(num) return num if __name__ == ‘__main__‘: print ip_format()
6–12.字符串
(a)創建一個名字為 findchr()的函數,函數聲明如下:
def findchr(string, char)
findchr()要在字符串 string 中查找字符 char,找到就返回該值的索引,否則返回-1.不能用
string.*find()或者 string.*index()函數和方法
(b)創建另一個叫 rfindchr()的函數,查找字符 char 最後一次出現的位置.它跟 findchr()工作
類似,不過它是從字符串的最後開始向前查找的.
(c)創建第三個函數,名字叫 subchr(),聲明如下:
def subchr(string, origchar, newchar)
subchr()跟 findchr()類似,不同的是,如果找到匹配的字符就用新的字符替換原先字符.返回
修改後的字符串.
(a)
def findchr(string,char): lis=[] for i,j in enumerate(string): if j==char: lis.append(i) if len(lis)!=0: print lis else: print -1 findchr("hello haimianbaobao",‘k‘)
(b)
def rfindchr(string,char): string=string[::-1] num=len(string)-1 if char in string: for i,j in enumerate(string): if j==char: print "最後一個字符串的索引為:",num-int(i) break else: print -1 rfindchr("hellohello","e")
(c)
def findchr(string,old,new): if old in string: lisstr=list(string) for i,j in enumerate(lisstr): if j == old: #lisstr[0]="p" lisstr[int(i)]=new string=‘‘.join(lisstr) print string else: print -1 findchr("hello haimianbaobao","h","p")
核心編程第二版第六章習題