zoukankan      html  css  js  c++  java
  • python核心编程2 第六章 练习

    6-2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来辅助

     1 import string
     2 import keyword
     3 
     4 alphas = string.ascii_letters + '_'
     5 nums = string.digits
     6 aplpnums = alphas+nums
     7 
     8 print('Testees must be at least 1 chars long.')
     9 myInput = input('Identifier to test? ')
    10 
    11 if len(myInput) >= 1:
    12 
    13     if myInput[0] not in alphas:
    14         print('invalid: first symbol must be alphabetic')
    15 
    16     else:
    17         for otherChar in myInput[1:]:
    18 
    19             if otherChar not in aplpnums:
    20                 print('''invalid: remaining symbols must be alphanumeric''')
    21                 break
    22 
    23             else:
    24                 if myInput in keyword.kwlist:
    25                     print('invalid: symbol is reseved as keyword')
    26                 else:
    27                     print("okay as an identifier")

    6-3.排序

    (a) 输入一串数字,从大到小排列之.
    (b) 跟 a 一样,不过要用字典序从大到小排列

    1 nums = []
    2 numbers = input('输入数字: ')
    3 for i in numbers:
    4     nums.append(int(i))
    5 print(sorted(nums))

    6–4.算术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代
    码应该可以计算出一个平均分,见练习 2-9 和练习 5-3.

     1 def grade(fraction):
     2     fractions = [90, 80, 70, 60, 0]
     3     score = ['A', 'B', 'C', 'D', 'F']
     4     for i in range(len(fractions)):
     5         if fraction >= fractions[i]:
     6             return score[i]
     7 
     8 if __name__ == '__main__':
     9     fraction = int(input('输入成绩:'))
    10     print(grade(fraction))

    6–5.
    字符串
    (a)更新你在练习 2-7 里面的方案,使之可以每次向前向后都显示一个字符串的一个字符.
    (b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符或者 cmp()内建函数)。附加题:
    在你的方案里加入大小写区分.
    (c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对
    例如控制符号和空格的支持。
    (d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串.

     1 #(a)
     2 str = input("Str: ")
     3 for i in str:
     4     print(i)
     5 
     6 for i in str[::-1]:
     7     print(i)
     8 
     9 #(b)
    10 str1 = input('Str1: ').strip()
    11 str2 = input('Str2: ').strip()
    12 
    13 if str1 is str2:
    14     print('yes')
    15 else:
    16     print(None)
    17 
    18 #(c)
    19 def string(str):
    20     if len(str) % 2 != 0:
    21         return None
    22     else:
    23         if str[0] == str[-1]:
    24             return str
    25         else:
    26             return None
    27 
    28 if __name__ == '__main__':
    29     str = input('Str: ')
    30     print(string(str))
    31 
    32 #(d)
    33 def copy(str):
    34 
    35     str_copy = str[::-1]
    36     return str,str_copy
    37 
    38 str = input("Str: ")
    39 print(copy(str))

    6–6.字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的
    空格(如果使用 string.*strip()函数那本练习就没有意义了)

     1 str = input('Str: ')
     2 
     3 length = len(str)
     4 print(length)
     5 for i in range(0,length):
     6     if str[i] != ' ':
     7         str = str[i:]
     8         print(len(str))
     9         break
    10     else:
    11         pass
    12 
    13 for i in range(1, length+1):
    14     if str[-1] != ' ':
    15         str = str[:]
    16         print(len(str))
    17         break
    18     elif str[-i] != ' ':
    19         str = str[:-i+1]
    20         print(len(str))
    21         break
    22     else:
    23         pass
    24 
    25 print(str)

    6-8 列表。给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”。

    附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”。本练习中的值假定在0~1000。

    # 用列表过于头痛,最后放弃使用字典了

     1 numdict = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight',
     2            9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen',
     3            16: 'sixteen', 17:'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 30: 'thirty', 40: 'forty',
     4            50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety',100: 'one hundred', 200: 'two hundred',
     5            300: 'three hundred', 400: 'four hundred', 500: 'five hundred', 600: 'six hundred', 700: 'seven hundred',
     6            800: 'eight hundred', 900: 'nine hundred'}
     7 
     8 def twonum(number):
     9     if int(number) < 20:
    10         return numdict[int(number)]
    11 
    12     elif int(number) > 20 and int(number) % 10 !=0:
    13         ten = numdict[int(number[0])*10]
    14         one = numdict[int(number[1])]
    15         return "%s-%s" % (ten, one)
    16 
    17     return numdict[int(number)]
    18 
    19 def threenum(number):
    20     if int(number) % 100 != 0:
    21         hundred = numdict[int(number[0])*100]
    22 
    23         if int(number[1:]) < 20:
    24             return "%s-%s" % (hundred,numdict[int(number[1:])])
    25 
    26         elif int(number[1:]) > 20 and int(number[1:]) % 10 !=0:
    27             ten = numdict[int(number[1])*10]
    28             one = numdict[int(number[2])]
    29             return "%s-%s-%s" % (hundred, ten, one)
    30 
    31         return "%s-%s" % (hundred, numdict[int(number[1:])])
    32 
    33     return numdict[int(number)]
    34 
    35 if __name__ == '__main__':
    36     number = input("输入数字: ")
    37     if len(number) <= 2:
    38         print(twonum(number))
    39     else:
    40         print(threenum(number))

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

    1 def time(mins):
    2 
    3     hour = mins // 60
    4     minute = mins % 60
    5     return '%d:%d' % (hour,minute)
    6 
    7 if __name__ == '__main__':
    8     minutes = int(input("输入分钟数: "))
    9     print(time(minutes))

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

    1 def swapcase(str):
    2     return str.swapcase()
    3 
    4 if __name__ == '__main__':
    5     str = input("Str: ")
    6     print(swapcase(str))

    6-11 转换。
    (a)创建一个从整型到IP地址的转换,如下格式:www.xxx.yyy.zzz
    (b)更新你的程序,使之可以逆转换。

     1 def iptransfer(ipaddress):
     2     """输入整型转换成www.xxx.yyy.zzz格式"""
     3     transferedIP = []
     4     if len(ipaddress) != 12:
     5         return "输入有误"
     6     else:
     7         for i in range(len(ipaddress) // 3):
     8             transfer, ipaddress = ipaddress[:3], ipaddress[3:]
     9             transferedIP.append(transfer)
    10     return '.'.join(transferedIP)
    11 
    12 def ipreverse(ipaddress):
    13     if len(ipaddress) != 15:
    14         return "输入有误"
    15     else:
    16         ipaddress = list(ipaddress)
    17         for ch in ipaddress:
    18             if ch == '.':
    19                 ipaddress.remove(ch)
    20     return ''.join(ipaddress)
    21 
    22 if __name__ == '__main__':
    23     ip = input('输入IP: ')
    24     print(iptransfer(ip))
    25     print(ipreverse(ip))

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

     1 def findchr(string, char):
     2 
     3     for i in range(len(string)):
     4         if string[i] == char:
     5             return i
     6     return -1
     7 
     8 def rfindchr(string, char):
     9     for i in range(len(string)-1, -1, -1):
    10         if string[i] == char:
    11             return i
    12     return -1
    13 
    14 def subchr(string, origchar, newchar):
    15     stringlist = list(string)
    16     for i in range(len(string)):
    17         if stringlist[i] == origchar:
    18             stringlist[i] = newchar
    19             return ''.join(stringlist)
    20     return -1
    21 
    22 if __name__ == '__main__':
    23     string = input("String: ")
    24     char = input("Char: ")
    25     print(findchr(string, char))
    26     print(rfindchr(string, char))
    27     newchar = input("Newchar: ")
    28     print(subchr(string, char, newchar))

    6-14 随机数。设计一个“石头、剪子、布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则。你和你的对手,

    在同一时间做出特定的手势,必须是下面一种:石头、剪子、布。胜利者从下面的规则产生,这个规则本身是个悖论。

    (a)布包石头。(b)石头砸剪子。(c)剪子剪破布。在你的计算机版本中,用户输入他/她的选项,计算机找一个随机选项,

    然后由你的程序来决定一个胜利者或者平手。注意,最好的算法是尽量少使用if语句

     1 import random
     2 
     3 print('''
     4 0 石头
     5 1 剪刀
     6 2 布
     7 3 quit''')
     8 list = ['石头', '剪刀', '']
     9 while True:
    10     i = int(input('输入数字: '))
    11     if i == 3:
    12         break
    13     elif (i < 0 or i > 3):
    14         continue
    15     c = random.randint(0, 2)
    16     if i == c:
    17         print('我:', list[i], '电脑:', list[c])
    18         print('平手')
    19     elif i - c == 2 or i - c == -1:
    20         print('我:', list[i], '电脑:', list[c])
    21         print('')
    22     else:
    23         print('我:', list[i], '电脑:', list[c])
    24         print('')

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

     1 def myPop(pop):
     2 
     3     element = []
     4     element.append(pop[len(pop)-1])
     5     pop = pop[:(len(pop)-1)]
     6     return pop,element
     7 
     8 if __name__ == '__main__':
     9     pop = [1, 2, 3, 4, 5]
    10     print(myPop(pop))
  • 相关阅读:
    手势模型和Angular Material的实现
    拟物设计和Angular的实现
    深入探索AngularJS
    自己动手做Web框架—MVC+Front Controller
    学习《CSS选择器Level-4》不完全版
    【基础】固定列宽的表格及示例演示
    使用min-content实现容器宽度自适应于内部元素
    【基础】CSS实现多重边框的5种方式
    【图片版】学习CSS网格布局
    【基础】EM 还是 REM?这是一个问题!
  • 原文地址:https://www.cnblogs.com/QQ269075164/p/10367970.html
Copyright © 2011-2022 走看看