python核心编程第二版第8章习题答案_第1页
python核心编程第二版第8章习题答案_第2页
python核心编程第二版第8章习题答案_第3页
python核心编程第二版第8章习题答案_第4页
python核心编程第二版第8章习题答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、8-1.条件语句。请看下边的代码:# statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# statement Dpass# statement E(a)如果x<0,上面哪个语句(A,B,C,D,E)将被执行?(b)如果x=0,上面哪个语句将被执行?(c)如果x>0,上面哪个语句将被执行?答案:(a)C(b)D(c)B82. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和

2、 t . 例如, 如果输入的是 f = 2, t = 26, i = 4 , 程序将输出 2, 6, 10, 14, 18, 22, 26.答案:sm = raw_input('Enter three numbers: ')a,b,c = sm.split(' ')f = int(a)t = int(b)i = int(c)while f <= t:print f,f += i8-3.range()。如果我们需要生成下面的这些列表,分别需要在range()内建函数中提供哪些参数?(a)0,1,2,3,4,5,6,7,8,9(b)3,6,9,12,15,18

3、(c)-20,200,420,640,860答案:(a)range(0,10)(b)range(3,19,3)(c)range(-20,861,220)84. 素数. 我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个素数. 请把相关代码转换为一个返回值为布尔值的函数,函数名为 isprime() . 如果输入的是一个素数, 那么返回 True , 否则返回 False .答案:def isprime(num1):count = num1 / 2while count > 1:if num1 % count = 0:return Falsecount -= 1else:

4、return Truenum1 = int(raw_input('Enter a number: ')print isprime(num1)85. 约数.。完成一个名为 getfactors() 的函数。它接受一个整数作为参数, 返回它所有约数的列表, 包括 1 和它本身。答案:def getfactors(num):L = for i in range(1,num+1):if num % i = 0:L.append(i)return Lnum = int(raw_input('Enter a number: ')print getfactors(num)方法

5、二:def getfactors(num): factors= count=num/2 while count>=1: if num%count=0: factors.append(count) count-=1 factors.append(num) return factorsprint getfactors(20)86. 素因子分解。以刚才练习中的 isprime() 和 getfactors() 函数为基础编写一个函数, 它接受一个整数作为参数, 返回该整数所有素数因子的列表. 这个过程叫做求素因子分解, 它输出的所有因子之积应该是原来的数字. 注意列表里可能有重复的元素. 例如

6、输入 20 , 返回结果应该是 2, 2, 5 。答案:def isprime(num1):count = num1 / 2while count > 1:if num1 % count = 0:return Falsecount -= 1else:return Truedef prime_factors(num):L = if isprime(num):L = 1,numelse:count = num / 2prime = 2while prime <= count:if num % prime = 0:L.append(prime)num /= primeelse:prime

7、 += 1return Lnum = int(raw_input('Enter a number: ')print prime_factors(num)87. 全数。完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身. 例如: 6的约数是 1, 2, 3, 因为 1 + 2 + 3 = 6 , 所以 6 被认为是一个完全数. 编写一个名为 isperfect()的函数, 它接受一个整数作为参数, 如果这个数字是完全数, 返回 1 ; 否则返回 0 .答案:def isperfect(num):L = for i in range(1,num):if num % i

8、 = 0:L.append(i)print Lif sum(L) = num:return 1else:return 0num = int(raw_input('Enter a number: ')print isperfect(num)Method two:def isprime(num1):count = num1 / 2while count > 1:if num1 % count = 0:return Falsecount -= 1else:return Truedef getfactors(num):factors = count = num / 2while

9、count >= 1:if num % count = 0:factors.append(count)count -= 1return factorsdef isperfect(num):L = if isprime(num):return 0else:if sum(getfactors(num) = num:return 1else:return 0num = int(raw_input('Enter a number: ')print isperfect(num)88. 阶乘。一个数的阶乘被定义为从 1 到该数字所有数字的乘积。N 的阶乘简写为 N! 。写一个函数,指

10、定N, 返回 N! 的值。def factorial(num):if num = 0 or num = 1:return 1else:product = 1for i in range(1,num + 1):product *= ireturn productnum = int(raw_input('Enter a number: ')print factorial(num)89. 斐波那契数列。斐波那契数列形如1,1,2,3,5,8,13,21,等等。也就是说,下一个值是序列中前两个值之和。写一个函数,给定N,返回第N个斐波那契数字。例如,第一个斐波那契数字是1,第6个是8。

11、答案:def fibonacci(num):if num = 0:return 0if num = 1:return 1else:total = fibonacci(num-1) + fibonacci(num-2)return totalfor i in range(12):print fibonacci(i)8-10.文本处理。统计一句话中的元音,辅音及单词(以空格分割)的个数。忽略元音和辅音的特殊情况,如"h","y","qu"等。附加题:便携处理这些特殊情况的代码。答案:来自def counteng(string):words

12、 = len(string.split()string = string.upper()yuans = fus = 0for i in string:n = ord(i)if n in xrange(65,91):if n in 65,69,73,79,85:yuans += 1else:fus += 1return yuans,fus,wordsstring = raw_input('Enter a string: ')print counteng(string)811. 文本处理。要求输入一个姓名列表,输入格式是“Last Name, First Name,” 即 姓,逗号

13、, 名. 编写程序处理输入, 如果用户输入错误, 比如“First Name Last Name,” , 请纠正这些错误, 并通知用户. 同时你还需要记录输入错误次数. 当用户输入结束后, 给列表排序, 然后以“姓 , 名" 的顺序显示.输入输出示例(你不需要完全按照这里里例子完成):% nametrack.pyEnter total number of names: 5Please enter name 0: Smith, JoePlease enter name 1: Mary Wong>> Wrong format. should be Last, First.&g

14、t;> You have done this 1 time(s) already. Fixing input. Please enter name 2: Hamilton,GeraldPlease enter name 3: Royce, LindaPlease enter name 4: Winston Salem>> Wrong format. should be Last, First.>> You have done this 2 time(s) already. Fixing input.The sorted list (by last name) is

15、:Hamilton, GeraldRoyce, LindaSalem, WinstonSmith, JoeWong, Mary答案:nums = int(raw_input('Enter total number of names: ')print 'Enter name (lastname,firstname)'i = 1error = 0names = while i <= nums:name = raw_input('Enter name %d: ' %i)symbol = name.strip().split(','

16、)if len(symbol) = 2:print names.append(symbol1+','+symbol0)i += 1else:print "The format is not correct, and You've been wrong %d times." %errorerror += 1if error = 3:print "Too many times you're wrong"breakfor i in names:print i12. (整型)位操作. 编写一个程序,用户给出起始和结束数字后给出一个

17、下面这样的表格,分别显示出两个数字间所有整型的十进制,二进制,八进制和十六进制表示.如果字符是可打印的ASCII字符,也要把它打印出来,如果没有一个是可打印字符,就省略掉ASCII那一 栏的表头.请参考下面的输入输出格式: 输出示例1 - 输入起始值:9 输入结束值:18 DEC BIN OCT HEX - 9 01001 11 9 10 01010 12 a 11 01011 13 b 12 01100 14 c 13 01101 15 d 14 01110 16 e 15 01111 17 f 16 10000 20 10 17 10001 21 11 18 10010 22 12 输出示

18、例2 - 输入起始值:26 输入结束值:41 DEC BIN OCT HEX ASCII - 26 011010 32 1a 27 011011 33 1b 28 011100 34 1c 29 011101 35 1d 30 011110 36 1e 31 011111 37 1f 32 100000 40 20 33 100001 41 21 ! 34 100010 42 22 " 35 100011 43 23 # 36 100100 44 24 $ 37 100101 45 25 % 38 100110 46 26 & 39 100111 47 27 ' 40

19、 101000 50 28 ( 41 101001 51 29 ) #coding:utf-8start1 = int(raw_input('t输入起始值:'.decode('utf-8').encode('gbk')end1 = int(raw_input('t输入结束值:'.decode('utf-8').encode('gbk')title = 'DECtBINtOCTtHEX'for i in range(start1,end1):if i >=32 and i <

20、;= 126:title = u'十进制t二进制tt八进制t十六进制tASCII'breakprint titlefor i in range(start1,end1):if i >=32 and i <= 126:print '%dt%07dtt%ot%xtt%s' %(i,int(bin(i)2:),i,i,chr(i)else:print '%dt%07dt%ot%x' %(i,int(bin(i)2:),i,i)8-13. 程序执行性能.在8.6.2节里,我们介绍了两种基本的迭代序列方法:1)通过序列项,以及 2)通过序列索引

21、遍历.该小节的末尾我们指出后一种方法在序列很长的时候性能不佳(在我的系统下,性能差了将近两倍83%)你认为它的原因是什么?答案:通过序列索引遍历,首先创建一个索引列表,然后遍历索引,再然后列表通过索引取值,多了好几个步骤答案取自:测试代码:import timeitnameList = 'Walter', 'Nicole', 'Steven', 'Henry', 'Walter', 'Nicole', 'Steven', 'Henry'nameList *= 1000000de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论