python核心编程(第二版)参考答案(自制)--第六章·序列:字符串、列表和元组(Part1)
2014-07-14 21:44
435 查看
###最近自学python,使用的教材是python核心编程(第二版)。自己做了练习题的答案,不管正确与否,算是给自己的一种约束和督促吧。
--------------------------------------------------------
6-1:*字符串。string模块中是否有一种字符串方法或者函数可以帮我鉴定下一
4000
个字符串是否是另一个大字符串的一部分?
答:1.成员操作符"in","not
in":布尔值判断
2.string.find(str):返回索引值,若无则返回-1
。(string.rfind(str)同理)
3.string.index(str):返回索引值,若无则报一个异常。(string.rindex(str)同理)
--------------------------------------------------------
6-2:*字符串标识符。修改例6-1的idcheck.py脚本,使之可以检测长度为1的标识符,并且可以识别Python关键字。对后一个要求,你可以使用keyword模块(特别是keyword,kelist)来辅助。
--------------------------------------------------------
6-3:*排序。a)输入一串数字、并从大到小排列之。b)跟a一样,不过要用字典序从大到小排序。
--------------------------------------------------------
6-4:*算术。更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去。你的代码应该可以算出一个平均分,见练习2-9和联系5-3
略
--------------------------------------------------------
6-5:*字符串。
(a)更新你在练习2-7里面的方案,使之可以每次向前向后都显示一个字符串和一个字符。
(b)通过扫面来判断两个字符串是否匹配(不能使用比较操作cmp()内建函数)附加:在你的方案里加入大小写区分
(c)判断一个字符串是否重现(后面跟前面一致)。附加:在处理除了严格的回文之外,加入对例如控制符号和空格的支持
(d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串。
--------------------------------------------------------
6-6:*字符串。创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格
--------------------------------------------------------
6-7:*调试。看一下在例6.5中给出的代码(buggy.py)
(a)研究这段代码并描述这段代码想做什么。在所有的(#)处填写你的注释。
(b)这个程序有一个很大的问题,比如输入6、12、20、30等它会死掉,实际上它不能处理任何的偶数,找出原因。
(c)修正(b)中提出的问题。
答:a)形成一个1~某自然数的序列,剔除序列中该自然数的因数。b)每次del之后,所有元素的坐标改变,下次判断时坐标偏移量出错,无法判断所有的元素。
--------------------------------------------------------
6-8:*列表。给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”。附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”。本练习中的值假定在0~1000。
方法1:按照数值大小判断形成英文格式。
方法2:先形成所有英文的列表,再查询。
--------------------------------------------------------
6-9:*转换。为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数。总时间不变,并且要求小时尽可能大。
6-10:*字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出。
--------------------------------------------------------
6-1:*字符串。string模块中是否有一种字符串方法或者函数可以帮我鉴定下一
4000
个字符串是否是另一个大字符串的一部分?
答:1.成员操作符"in","not
in":布尔值判断
2.string.find(str):返回索引值,若无则返回-1
。(string.rfind(str)同理)
3.string.index(str):返回索引值,若无则报一个异常。(string.rindex(str)同理)
--------------------------------------------------------
6-2:*字符串标识符。修改例6-1的idcheck.py脚本,使之可以检测长度为1的标识符,并且可以识别Python关键字。对后一个要求,你可以使用keyword模块(特别是keyword,kelist)来辅助。
import string import keyword alphas=string.letters+'_' nums=string.digits print 'Welcome to the Identifier Checker V1.0' myInput=raw_input('Indentifier to test? ') if myInput in keyword.kwlist: print '''Invalid:symbols must not be keyword inside Python''' else: if len(myInput)>=1: if myInput[0] not in alphas: print '''Invalid:first symbol must be alphabetic''' else: for otherChar in myInput[1:]:##if len(myInput)==1,will not enter this for loop if otherChar not in alphas+nums: print '''Invalid:remaining symbols must be alphanumeric''' break print 'okay as an Indentifier'
--------------------------------------------------------
6-3:*排序。a)输入一串数字、并从大到小排列之。b)跟a一样,不过要用字典序从大到小排序。
def compare_numbers(number_list): """all elements in number_list must represent a number""" for index in range(len(number_list)):##how to change list elements type without for loop??? if '.' in str(number_list[index]): number_list[index]=float(number_list[index]) else: number_list[index]=int(number_list[index]) number_list.sort(reverse = True) print number_list def lexicographical_order(number_list): """all elements in number_list must represent a number""" for index in range(len(number_list)): number_list[index]=str(number_list[index]) number_list.sort(reverse = True) for index in range(len(number_list)): if '.' in str(number_list[index]): number_list[index]=float(number_list[index]) else: number_list[index]=int(number_list[index]) print number_list compare_numbers([12,1,314,53,24,90,1.9]) lexicographical_order([12,1,314,53,24,90,1.9])
--------------------------------------------------------
6-4:*算术。更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去。你的代码应该可以算出一个平均分,见练习2-9和联系5-3
略
--------------------------------------------------------
6-5:*字符串。
(a)更新你在练习2-7里面的方案,使之可以每次向前向后都显示一个字符串和一个字符。
(b)通过扫面来判断两个字符串是否匹配(不能使用比较操作cmp()内建函数)附加:在你的方案里加入大小写区分
(c)判断一个字符串是否重现(后面跟前面一致)。附加:在处理除了严格的回文之外,加入对例如控制符号和空格的支持
(d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串。
def E_a(str_display): print str_display[0:2], for x in range(len(str_display)-1): print str_display[x:x+3], print '\n', def E_b(str1,str2): same=True if len(str1)==len(str2): for x in xrange(len(str1)): if str1[x]!=str2[x]: same=False break if same: print "(%s,%s)" %(str1,str2),"They are matched!" else: print "(%s,%s)" %(str1,str2),"Error:They are not same!" else: print "(%s,%s)" %(str1,str2),"Error:the lenghths are not same!" def E_c(str_test): str_rev=str_test[::-1] for x in xrange(len(str_test)): if str_rev[x]!=str_test[x]: print repr(str_test),"is not palindrome!" return 0 print repr(str_test),"is palindrome!" return 0 def E_d(str_ori): str_rev=str_ori[::-1] str_pali=str_ori+str_ori[::-1] print 'New palindrome string is',repr(str_pali) E_a('abcdefg') E_b('abc','abc') E_b('abc','abcd') E_b('aBc','abc') E_b('abc','abd') E_c('abcder') E_c('abcba') E_d('123abc')
--------------------------------------------------------
6-6:*字符串。创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格
def astring(str1): if len(str1)==1 or(str1[0]!=' 'and str1[-1]!=' '): return repr(str1) elif str1[0]==' ': return astring(str1[1:]) elif str1[-1]==' ': return astring(str1[:len(str1)-1]) print astring(' ab d ')
--------------------------------------------------------
6-7:*调试。看一下在例6.5中给出的代码(buggy.py)
(a)研究这段代码并描述这段代码想做什么。在所有的(#)处填写你的注释。
(b)这个程序有一个很大的问题,比如输入6、12、20、30等它会死掉,实际上它不能处理任何的偶数,找出原因。
(c)修正(b)中提出的问题。
答:a)形成一个1~某自然数的序列,剔除序列中该自然数的因数。b)每次del之后,所有元素的坐标改变,下次判断时坐标偏移量出错,无法判断所有的元素。
def Divisors(num_str): ##num_str=raw_input('Enter a number: ') num_num=int(num_str) # non_fac_list=range(1,num_num+1) # result=[] print "BEFORE:",repr(non_fac_list) i=0 while i<len(non_fac_list): ##if num_num % non_fac_list[i]==0: # if num_num % non_fac_list[i]!=0: ##del non_fac_list[i] # result.append(non_fac_list[i]) i=i+1 ##print "AFTER:",repr(non_fac_list) print "AFTER:",repr(result) Divisors('12') Divisors('15')
--------------------------------------------------------
6-8:*列表。给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”。附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”。本练习中的值假定在0~1000。
方法1:按照数值大小判断形成英文格式。
unit=['one','two','three','four','five','six','seven','eight','nine','zero'] tens_units = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'] tens = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'] def num2Eng(num): Eng_num='' if num>1000: print 'Input number must be 0~1000' return 0 if num==1000: print repr(num)+':one-thousand' else: num_hun,num_ten,num_unit=str(num).rjust(3,'0')[0:3] num_unit,num_ten,num_hun=int(num_unit),int(num_ten),int(num_hun) if num_hun==1: Eng_num=Eng_num+' one-hundred' elif (num_hun)>1: Eng_num=Eng_num+' '+unit[num_hun-1]+'-hundreds' if num_hun!=0 and (num_ten or num_unit): Eng_num=Eng_num+' and' if num_ten==0: Eng_num=Eng_num+' '+unit[num_unit-1] elif num_ten==1: Eng_num=Eng_num+' '+tens_units[num_unit] else: Eng_num=Eng_num+' '+tens[num_ten] if num_unit!=0: Eng_num=Eng_num+'-'+unit[num_unit-1] print repr(num)+':'+Eng_num num2Eng(12)
方法2:先形成所有英文的列表,再查询。
unit=['zero','one','two','three','four','five','six','seven','eight','nine'] tens_units = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'] tens = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'] def num2Eng_li(num): if num>1000 or num<0: print 'Input number must be 0~1000' return 0 Eng_list=[] Eng_list=Eng_list+unit+tens_units for x in xrange(8): Eng_list.append(tens[x]) for y in xrange(1,10): Eng_list.append(tens[x]+'-'+unit[y]) Eng_list=Eng_list*10 for x in xrange(200,1000): Eng_list[x]=unit[x/100]+'-hundreds and '+Eng_list[x] for x in xrange(200,1000,100): Eng_list[x]=unit[x/100]+'-hundreds' for x in xrange(100,200): Eng_list[x]=unit[x/100]+'-hundred and '+Eng_list[x] Eng_list[100]='one-hundred' Eng_list.append('one-thousand') print num,':',Eng_list[num] num2Eng_li(430)
--------------------------------------------------------
6-9:*转换。为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数。总时间不变,并且要求小时尽可能大。
def minute2hour(minute): hours=minute/60 mins=minute-hours*60 print minute,'minutes =',hours,'hours and',mins,'minutes' minute2hour(163)
6-10:*字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出。
import string def U_L_rev(str1): str2='' for x in xrange(len(str1)): if str1[x] in string.uppercase: str2=str2+string.lowercase[string.uppercase.find(str1[x])] elif str1[x] in string.lowercase: str2=str2+string.uppercase[string.lowercase.find(str1[x])] else: str2=str2+str1[x] print str1,":",str2 U_L_rev('Mr,Ed')
相关文章推荐
- python核心编程(第二版)参考答案(自制)--第六章·序列:字符串、列表和元组(Part2)
- 《Python核心编程》第六章:序列、字符串、列表和元组
- 《Python核心编程》(第二版) 第6章 序列:字符串、列表和元组(字符串篇)
- 《Python核心编程》(第二版) 第6章 序列:字符串、列表和元组(列表和元组篇)
- 《python核心编程》序列:字符串、列表和元组Python: Attribute Error - 'NoneType' object has no attribute
- 第六章:序列--字符串、列表和元组
- Python学习笔记《Python核心编程》第6章 序列:字符串、列表、元组
- python核心编程四——序列:字符串,列表,元组
- python核心编程(第二版)参考答案(自制)--第五章·数字
- python核心编程(六)— 序列:字符串、列表、元组
- python核心编程(第二版)参考答案(自制)--第八章·条件和循环
- 《Python核心编程》第二版第160页第六章练习 续四 -Python核心编程答案-自己做的-
- python 序列:字符串、列表和元组
- 序列:字符串,列表,元组,字典
- 《Python核心编程》第二版第162页第六章练习 续六 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第160页第六章练习 续一 -Python核心编程答案-自己做的-
- Python数据类型——序列(字符串,列表,元组)
- python--序列的基本概念和操作(序列:列表、元组、字符串)
- 序列(字符串,列表,元组)和字典常用方法
- 《Python核心编程》第二版第六章练习题答案-第六部分