zoukankan      html  css  js  c++  java
  • Python核心编程第二版 第六章课后练习

    注:我使用的python3.5。 其中range和xrange,input和raw_input已经合并

    6-4.算术。把测试得分放到一个列表中去,你的代码应该可以计算一个平均分。

    num = input("请输入成绩,成绩以空格分开")
    totalnum = 0
    numbers  = num.split(' ')
    numbers  = list(map(int, numbers))
    for num in numbers:
        totalnum += num
    print(totalnum//len(numbers))

    6-6.字符串。创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格

    def astring(str1):
        if len(str1) == 1 or (str1[0] != ' ' and str1[-1] != ' '):
            return str(str1)
        elif str1[0] == ' ':
            return astring(str1[1:])
        elif str1[-1] == ' ':
            return astring(str1[:-1])

    6-8:列表。给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”。附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”。本练习中的值假定在0~1000。

    方法1:按照数值大小判断形成英文格式

    def astring(str1):
        a = {'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine'}
        b = {'0':'ten','11':'eleven','12':'twelve','13':'thirteen','14':'fourteen','15':'fifteen','16':'sixteen','17':'seventeen','18':'eighteen','19':'nineteen'}
        c = {'2':'twenty','3':'thirty','4':'forty','5':'fifty','6':'sixty','7':'seventy','8':'eighty','9':'ninety'}
        if len(str1) == 1:
            return a[str1[0]]
        elif len(str1) == 2:
            if str1[0] == '1':
                return b[str1]
            elif str1[1] != '0':
                return c[str1[0]] + '-' + a[str1[1]]
            elif str1[1] == '0':
                return c[str1[0]]
        elif len(str1) == 3:
            if str1[1:] != '00':
                return a[str1[0]] + ' hundred and ' + astring(str1[1:])
            else:
                return a[str1[0]] + ' hundred'
        if str1 == '1000':
            return str('one thousand')
    
    def transform(num):
        ele = str(num)
        return astring(ele)

     6-9:转换。为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数。总时间不变,并且要求小时尽可能大。

    def h_m(minute):  
        hours=minute//60  
        mins=minute-hours*60  
        print (minute,'minutes =',hours,'hours and',mins,'minutes')

    6-10:字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出。

    def change_letter(str1):
        l = list(str1)
        for i in range(len(str1)):
            if l[i].isupper() == True:
                l[i] = l[i].lower()
            else:
                l[i] = l[i].upper()
        newS = ''.join(l)
        return newS

     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()类似,不同的是,如果找到匹配的字符就用新的字符替换原先字符。返回修改后的字符串。

    def findchr(string, char):
        for ele in range(len(string)):
            if string[ele] == char:
                return ele
        return -1
    def rfindchr(string, char):
        str1 = string[::-1]
        for ele in range(len(str1)):
            if str1[ele] == char:
                return ele
        return -1
    def subchr(string, origchar, newchar):
        l = list(string)
        for ele in range(len(string)):
            if l[ele] == origchar:
                l[ele] = newchar
        newstr = ''.join(l)
        return newstr

    6-14.随机数。设计一个“石头、剪子、布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则。你和你的对手,在同一时间做出特定的手势,必须是下面一种:石头、剪子、布。胜利者从下面的规则产生,这个规则本身是个悖论。

    (a)布包石头。

    (b)石头砸剪子。

    (c)剪子剪破布。在你的计算机版本中,用户输入他/她的选项,计算机找一个随机选项,然后由你的程序来决定一个胜利者或者平手。注意,最好的算法是尽量少使用if语句。

    import random
    
    
    def Rochambeau():
        pr = '''
        s(T)one
        (S)cissors
        (C)loth
        (Q)iut
        '''
        dict1 = {'t1':u'','s2':u'','c3':u'','t2':u'玩家赢','s3':u'玩家赢','c1':u'玩家赢','t3':u'电脑赢','s1':u'电脑赢','c2':u'电脑赢'}
        while True:
            ele = str(random.randint(1,3))
            try:
                choice = input(pr).strip()[0].lower()
            except(EOFError,KeyboardInterrupt,IndexError):
                choice = 'q'
            
            if choice == 'q':
                break
            
            res = choice + ele
            print(dict1[res])
    
    if __name__ == '__main__':
        Rochambeau()

     6-14.随机数。转换。
    (a)给出两个可识别格式的日期,比如MM/DD/YY或者DD/MM/YY格式。计算出两个日期之间的天数。
    (b)给出一个人的生日,计算此人从出生到现在的天数,包括所有的闰月。
    (c)还是上面的例子,计算出此人下次过生日还有多少天。

    MONTHDAYS=[31,28,31,30,31,30,31,31,30,31,30,31]  
    LMONTHDAYS=[31,29,31,30,31,30,31,31,30,31,30,31]
    def isLeapYear(year):
        if year%4 == 0 and year%100 != 0:
            return True
        if year%400 == 0:
            return True
        return False
     
    def Usedday(year,month,day):
            total = 0
            if month != 1:
                if isLeapYear(year) == True:
                    for m in range(month-1):
                        total = total + LMONTHDAYS[m]
                    total = total + day
                else:
                    for m in range(month-1):
                        total = total + MONTHDAYS[m]
                    total = total + day
            else:
                total = total + day
            return total
    
    def day2day(str1,str2):
        str1 = str1.split('/')
        str2 = str2.split('/')
        year1,year2 = int(str1[0]),int(str2[0])
        month1,month2 = int(str1[1]),int(str2[1])
        day1,day2 = int(str1[2]),int(str2[2])
        totalday = 0        
        if year2 - year1 > 1:
            for i in range(year1+1,year2-1):
                if isLeapYear(i) == True:
                    totalday = totalday + 366
                else:
                    totalday = totalday + 365
        ele1 = Usedday(year1,month1,day1)
        ele2 = Usedday(year2,month2,day2)
        if year2 - year1 == 0:
            return ele2 - ele1
        if isLeapYear(year1) == True:
            totalday = totalday + (366 - ele1) + ele2
        else:
            totalday = totalday + (365 - ele1) + ele2
        return totalday

     6-16.矩阵。处理矩阵M和N的加和乘操作。

    没看懂是什么意思

    6-17:方法。实现一个叫myPop()的函数,功能类似于列表的pop()方法,用一个列表作为输入,移除列表的最新一个元素,并返回它

    def myPop(list1):
        del(list1[-1])
        return list1

    6-19多列输出。有任意项的序列或者其他容器,把它们等距离分列显示。由调用者提供数据和输出格式。例如,如果你传入100个项并定义3列输出,按照需要的模式显示这些数据。这种情况下,应该是两列显示33个项,最后一列显示34个。你可以让用户来选者水平排序或者垂直排序

     略

  • 相关阅读:
    myEclipse环境下配置springMvc项目,进行简单的请求
    自记录:git如何上传文档到git@osc
    java UDP网路编程
    Dom解析xml源代码
    SAX解析XML文件实例代码
    javaFile循环列出指定目录下的所有文件(源代码)
    javaIO流实现读写txt文件
    Java类之间的关联关系(转载)
    Python基本语法
    Python3.4入门之ifelse错误解决方案
  • 原文地址:https://www.cnblogs.com/jiaoyang77/p/7464484.html
Copyright © 2011-2022 走看看