python核心编程(第二版)参考答案(自制)--第八章·条件和循环
来源:互联网 发布:python idle命令行参数 编辑:程序博客网 时间:2024/05/22 04:32
###最近自学python,使用的教材是python核心编程(第二版)。自己做了练习题的答案,不管正确与否,算是给自己的一种约束和督促吧。
--------------------------------------------------------
8-1.*条件语句。请看下面的代码:
# statement A
if x > 0:
# statement B
pass
elif x < 0:
# statement C
pass
else:
# statement D
pass
# statement E
(a)如果x<0,上面哪个语句(A,B,C,D,E)将被执行?
(b)如果x=0,上面哪个语句将被执行?
(c)如果x>0,上面哪个语句将被执行?
【答】:(a)ACE,(b)ADE,(c)ABE
--------------------------------------------------------
f = raw_input("Please input start number ... ")t = raw_input("Please input end number ... ")i = raw_input("please input step number ... ")for x in xrange(int(f),int(t)+1,int(i)): print x,
--------------------------------------------------------
(a)[0,1,2,3,4,5,6,7,8,9]
(b)[3,6,9,12,15,18]
(c)[-20,200,420,640,860]
答:range(10)
range(3,19,3)
range(-20,861,220)
--------------------------------------------------------
def isprime(num): if num==1:return False count=num/2 while count>1: if num%count==0: return False count-=1 else: return True for eachNum in xrange(1,15): print eachNum,str(isprime(eachNum))
--------------------------------------------------------
8-5.*约数。完成一个名为getfactors()的函数。它接受一个整型作为参数,返回它所有约数的列表,包括1和它本身。
def getfactors(num): count=num/2 Factor_list=[] # while count>1: # if num%count==0: # Factor_list.append(count) # count-=1 Factor_list=[x for x in range(2,count+1) if num%x==0] if num==1:Factor_list.append(1) else:Factor_list.extend([1,num]) Factor_list.sort() return Factor_listfor eachNum in xrange(1,15): print eachNum,getfactors(eachNum)
--------------------------------------------------------
8-6.*素因子分解。以刚才练习中的isprime()和getfactors()函数为基础编写一个函数,它接受一个整型作为参数,返回该整型所有素数因子的列表。这个过程叫做求素因子分解,它输出的所有因子之积应该是原来的数字。注意列表里可能有重复的元素。例如输入20,返回的结果应该是[2,2,5]。
def isprime(num): if num==1:return False count=num/2 while count>1: if num%count==0: return False count-=1 else: return True def getfactors(num): count=num/2 Factor_list=[] while count>1: if isprime(count) and num%count==0: Factor_list.append(count) num=num/count count=num/2 else: count-=1 if num==1:Factor_list.append(1) else:Factor_list.append(num) Factor_list.sort() return Factor_listfor eachNum in xrange(1,26): print eachNum,getfactors(eachNum)
【注】:不修改getfacors()函数,而是用递归方法也可以结局这个问题
--------------------------------------------------------
8-7.*完全数。完全数被定义为这样的数字:它的约数(不包括它自己)之和为它本身。例如:6的约数是1,2,3,因为1+2+3=6,所以6被认为是一个完全数。编写一个名为isperfect()的函数,它接受一个整形作为参数,如果这个数字是完全数,返回1:否者返回0。
def getfactors(num): count=num/2 Factor_list=[] while count>1: if num%count==0: Factor_list.append(count) # num=num/count # count=num/2 count-=1 if num==1:Factor_list.append(1) else:Factor_list.extend([1,num]) Factor_list.sort() print num,Factor_list, return Factor_listdef isperfect(num): Factor_list=getfactors(num) Factor_list.remove(num) if num==sum(Factor_list): print "%s is perfect number!"%num return 1 else: print "%s NO!"%num return 0for eachNum in xrange(1,26): eachNum,isperfect(eachNum)
--------------------------------------------------------
8-8.*阶乘。一个数的阶乘被定义为从1到该数字所有数字的乘积。N的阶层简写为N!。N! = factorial(N) = 1*2*3* ... *(N-2)*(N-1)*N。所以4! = 1*2*3*4。写一个函数,指定N,返回N!的值。
def factorial(num): if num==0: return 1 else: return num*factorial(num-1)for eachNum in xrange(1,10): print eachNum,factorial(eachNum)
--------------------------------------------------------
8-9.*斐波那契数列。斐波那契数列形如1,1,2,3,5,8,13,21等等。也就是说,下一个值是序列中前两个值之和。写一个函数,给定N,返回第N个斐波那契数数字。例如,第1个斐波那契数字是1,第6个是8。
def Fibonacci(num): if num in [1,2]: return 1 else: return Fibonacci(num-1)+Fibonacci(num-2)for eachNum in xrange(1,10): print eachNum,Fibonacci(eachNum)
--------------------------------------------------------
8-10.*文本处理。统计一句话中元音,辅音以及单词(以空格分割)的个数。忽略元音和辅音的特殊情况,如“h”,“y”,“qu”等。附加题:编写处理这些特殊情况的代码。
【注】:没明白题目具体要求,以后补
--------------------------------------------------------
8-11.*文本处理。要求输入一个姓名列表,输入格式是“Last Name, First Name”即姓逗号名。编写程序处理输入,如果用户输入错误,比如“Last Name First Name,”,请纠正这些错误,并通知用户。同时你还需要记录输入错误次数。当用户输入结束后,给列表排序,然后以“姓,名”的顺序显示。
name_list=[]def show_list(): print "The sorted list (by last name) is:" for x in sorted(name_list): print "%s, %s"%(x[0],x[1]) def show_error(error_time): print """Wrong format...should be Last, First.You have done this %d time(s) already.Fixing input...""" %error_timedef input_name(): number=raw_input("Enter total number of names:") count_E=0 for x in xrange(int(number)): new_name=raw_input("Please enter name %s:"%x).strip().split(',') if (len(new_name)==1): new_name=new_name[0].split(' ')[::-1] count_E+=1 show_error(count_E) name_list.append(new_name) show_list() if __name__=='__main__': input_name()
--------------------------------------------------------
8-12.*(整型)位操作。编写一个程序,用户给出起始和结束数字后给出一个下面这样的表格,分别显示出两个数字间所有整型的十进制,二进制,八进制和十六进制表示。如果字符是可打印的ASCII字符,也要把它打印出来,如果没有一个是可打印字符,就省略掉ASCII那一栏的表头。
def print_string(begin_num,end_num): begin_num=min(begin_num,end_num) end_num=max(begin_num,end_num) if begin_num>127 or end_num<33: print "DEC\t\tBIN\t\tOCT\t\tHEX" print "-"*30 else: print "DEC\t\tBIN\t\tOCT\t\tHEX\t\tASCII" print "-"*40 for x in xrange(begin_num,end_num+1): if 32<x<127: print "%-8d%-8d%-8o%-8x%-8c"%(x,int(bin(x)[2:]),x,x,x) else: print "%-8d%-8d%-8o%-8x"%(x,int(bin(x)[2:]),x,x)print_string(27,41)
--------------------------------------------------------
8-12.*程序执行性能。在8.6.2节里,我们介绍了两种基本的迭代序列方法:(1)通过序列项,以及(2)通过序列索引遍历。该小节的末尾我们指出后一种方法在序列很长的时候性能不佳(在我的系统下,性能相差了将近两倍[83%])你认为它的原因是什么?
【答】:
对于直接迭代,迭代完成只需要遍历一次序列即可,每个元素都指向下一个元素。完成遍历的过程为:e0->e1->e2->e3....
而对于索引迭代,每次获得一个元素都需要从头迭代,所以完成迭代的过程为:e0, e0->e1, e0->e1->e2, e0->e1->e2-e3....
- python核心编程(第二版)参考答案(自制)--第八章·条件和循环
- python核心编程(第二版)参考答案(自制)--第七章·映像和集合类型
- python核心编程(第二版)参考答案(自制)--第五章·数字
- python核心编程(第二版)参考答案(自制)--第六章·序列:字符串、列表和元组(Part1)
- python核心编程(第二版)参考答案(自制)--第六章·序列:字符串、列表和元组(Part2)
- 《Python核心编程》第八章:条件和循环
- Python核心编程(第八章)--条件和循环
- python核心编程2参考答案(第二章)
- 《Python核心编程》(第二版) 第8章 条件和循环
- <Python核心编程>条件和循环(包括迭代器、生成器)
- python核心编程(八)— 条件和循环
- Python核心编程----条件和循环
- Python 核心编程(第二版)第八章 练习完整答案[转载]
- 《Python核心编程》第8章 条件和循环 练习
- Python核心编程---读书笔记:第8章 条件和循环
- 《python核心编程第二版》第八章练习解析
- <Python核心编程(第二版)>第八章练习题
- <python核心编程第二版第八章>习题补充
- 堆——神奇的优先队列(上)
- 在Eclipse中新建web工程访问MySQL出现 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- hadoop+hive+zookeeper+hbase全分布式环境配置
- 笔记70---volley
- Web之CSS
- python核心编程(第二版)参考答案(自制)--第八章·条件和循环
- 工作周报006
- TCP可靠传输机制
- flex与Java的交互方式及举例
- UVA 10917 Walk Through the Forest
- 位域
- uva 10160(回溯)
- OC 总结
- hadoop+hbase全分布式环境配置