zoukankan      html  css  js  c++  java
  • 核心编程第二版第六章习题

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

    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()
  • 相关阅读:
    vi命令文件编辑
    Linux vi/vim编辑器常用命令与用法总结
    常用vi编辑器命令行
    在AspNetMvc中使用日志面板. Logdashboard 1.1beta
    Abp中使用可视化的日志面板
    使用logdashboard进行可视化的日志追踪
    可视化面板LogDashboard使用log4net源
    LogDashboard 1.0.4 版本发布
    什么是LogDashboard?
    使用logdashboard查看可视化日志
  • 原文地址:https://www.cnblogs.com/sunyucui/p/6980861.html
Copyright © 2011-2022 走看看