核心編程第二版第六章習題

6–1. 字符串.string 模塊中是否有一種字符串方法或者函數能夠幫我鑑定一下一個字符串
是不是另外一個大字符串的一部分?app

成員關係操做符in函數

obj in seq測試

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

(a)code

num=raw_input(">>")
lisnum=list(num)
list.sort(lisnum)
print lisnum

 

(b)沒看懂orm

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

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)three

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")

 

6–15.轉換
(a)給出兩個可識別格式的日期,好比 MM/DD/YY 或者 DD/MM/YY 格式,計算出兩個日期間的天
數.
(b)給出一我的的生日,計算今後人出生到如今的天數,包括全部的閏月.
(c)仍是上面的例子,計算出到此人下次過生日還有多少天.

(a)

def days():
    year_month_day1=raw_input("enter day1(MM/DD/YY):")
    year_month_day2=raw_input("enter day2(MM/DD/YY):")
    date1=year_month_day1.split('/')
    date2=year_month_day2.split('/')
    month_days=[31,28,31,30,31,30,31,31,30,31,30,31]
    #計算第一個日期在一年中的天數
    year1=int(date1[2])
    year2=int(date2[2])
    days1=0
    if int(date1[2])%4==0:
        month_days[3]=29
        yeardays1=366
    else:
        yeardays1=365     
    for i,j in enumerate(month_days):
        #k=i+1
        #datee=date1[0]
        if i+1==int(date1[0]):
            days1=sum(month_days[:i])+int(date1[1])
    print days1
    #計算第二個日期在一年中的天數
    days2=0
    if int(date2[2])%4==0:
        month_days[3]=29
    for i,j in enumerate(month_days):
        #k=i+1
        #datee=date1[0]
        if i+1==int(date2[0]):
            days2=sum(month_days[:i])+int(date2[1])
    print days2 
    
    #根據同年和不一樣年的狀況獲取兩個日期之間的天數
    if date1[2]==date2[2]:
        days=days2-days1
    else:
        lis=[]
        for i in range(year1+1,year2):
            if i%4==0:
                lis.append(366)
            else:
                lis.append(365)
        days=yeardays1-days1+sum(lis)+days2
    print days        
           
days()

 (b)

import datetime
def days():
    month_days=[31,28,31,30,31,30,31,31,30,31,30,31]
    birthday=raw_input("enter your birthday(MM/DD/YY):")
    birthday=birthday.split('/')
    #獲取當前時間的年月日
    i=datetime.datetime.now()
    year=i.year
    month=i.month
    day=i.day
    #計算第一個日期在一年中的天數
    year1=int(birthday[2])
    days1=0
    if int(birthday[2])%4==0:
        month_days[3]=29
        yeardays1=366
    else:
        yeardays1=365     
    for i,j in enumerate(month_days):
           ##k=i+1
           ##datee=date1[0]
        if i+1==int(birthday[0]):
            days1=sum(month_days[:i])+int(birthday[1])
    print days1 
    #計算當前時間在一年中天數
    days2=0
    if int(year)%4==0:
        month_days[3]=29
    for i,j in enumerate(month_days):
        if i+1==int(month):
            days2=sum(month_days[:i])+int(day)
    print days2  
    #計算兩個日期之間的天數
    lis=[]
    for i in range(int(birthday[2])+1,year):
        if i%4==0:
            lis.append(366)
        else:
            lis.append(365)  
            
    days=yeardays1-days1+sum(lis)+days2
    print days    
days()
相關文章
相關標籤/搜索