Python核心编程(第二版)第六章练习题

来源:互联网 发布:windows gcc搭建 编辑:程序博客网 时间:2024/06/06 02:12

6.22

6-1

字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分?

答:string.find()。如果包含则返回“0”否则返回“-1”


6-2

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

答:

# coding=utf-8import stringimport keywordstandard = "_" + string.lettersnumber = string.digitsnumberStandard = standard + numberstat = Truewhile stat:    identifier = raw_input("请输入你的标识符:")    if identifier[0] not in standard:        print "你输入不合法,开头必须为字母或者下划线"    elif identifier in keyword.kwlist:        print "不能是关键字"    else:        for i in identifier:            if i not in numberStandard:                print "含有非法字符"                break        else:            print "bingo"            stat = False

6-3

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

答(a):

# coding=utf-8numbers = raw_input("请输入你的数字")numbersList = list(numbers)numbersList.sort(reverse=True)print numbersList

答(b):

dict1 = {2: "a", 4: "b", 3: "d"}print dict1.items()dict2 = sorted(dict1.items(), key=lambda d: d[0])print dict2

6-4

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

答:

# coding=utf-8l = []sumScore = 0number = int(raw_input("你想输入几个分数?:"))for i in range(number):    score = raw_input("输入你的第%d个分数:" % i)    l.append(score)    sumScore += int(score)average = sumScore / float(number)print "平均数为:%f" % average

6-5

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

答(a):

s = raw_input("请输入你的字符串:")for i in s:    print i,printfor j in s[::-1]:    print j,

答(b):

astring = raw_input("输入字符串a:")bstring = raw_input("输入字符串b:")if len(astring) == len(bstring):    for i, j in zip(astring, bstring):        if i != j:            print "不匹配"            break    else:        print "bingo"else:    print "不匹配"

答(c):题目不是特别理解什么意思。按照自己的想法应该是判断前面的字符串和后面的字符串是否相等而已。那就写这样一个简单的小程序,理想情况下只有前面一个字符串和后面一个字符串来判断是否相等。

astring = raw_input("请输入你的字符串:")l = len(astring)if l % 2 == 0:    if astring[:l / 2] == astring[l / 2:]:        print "一个字符串"    else:        print "前后不是一个字符串"

答(d):

astring = raw_input("请输入你的字符串:")nstring = astring + astring[::-1]print nstring

6-6

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

答:

# coding=utf-8def new_strip(astring):    for i in range(len(astring)):        if astring[i] != " ":            break    for j in range(len(astring)):        if astring[-(j+1)] != " ":            break    return astring[i:-j]nstring=raw_input("your string:")print new_strip(nstring)print len(new_strip(nstring))

6-7

调试.看一下在例 6.5 中给出的代码(buggy.py)
(a)研究这段代码并描述这段代码想做什么.在所有的(#)处都要填写你的注释.
(b)这个程序有一个很大的问题,比如输入 6,12,20,30,等它会死掉,实际上它不能处理任何的偶数,找出原因.
(c)修正(b)中提出的问题.

答:略(没找到在哪里。。。。。)


6-8

列表.给出一个整数值,返回代表该值的英文,比如输入 89 返回”eight-nine”。附加题:能够返回符合英文语法规则的形式,比如输入“89”返回“eighty-nine”。本练习中的值限定在家 0
到 1,000.

答:

# coding=utf-8enumbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve',            'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'thirty',            'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']bnumbers = ['zero', 'ten', 'twenty', 'thirty',            'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety', 'hundred']snumber = raw_input("your number:")lsnumber = len(snumber)if lsnumber < 2:    print enumbers[int(snumber)]elif lsnumber == 2:    if int(snumber) < 21:        print enumbers[int(snumber)]    elif int(snumber[1]) == 0:        print bnumbers[int(snumber[0])]    else:        print "%s-%s" % (bnumbers[int(snumber[0])], enumbers[int(snumber[1])])elif lsnumber == 3:    if snumber[1] == "0" and snumber[2] == "0":        print enumbers[int(snumber[0])]+ " "+bnumbers[10]    elif snumber[1] == "0" and snumber[2] != "0":        print enumbers[int(snumber[0])] + " " + bnumbers[10] + " and "+ enumbers[int(snumber[2])]    elif snumber[1]!="0" and snumber[2]=="0":        print enumbers[int(snumber[0])]+ " "+bnumbers[10]+" and "+bnumbers[int(snumber[1])]    else:        print enumbers[int(snumber[0])] + " " + bnumbers[10] + " and "+bnumbers[int(snumber[1])]+"-"+enumbers[int(snumber[2])]
原创粉丝点击