当前位置:首页 >> 电子/电路 >>

PYTHON核心编程第二版第8章习题答案


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)C (b)D (c)B 8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i 为步长, 从 f 计数 到 t , 包括 f 和 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 += i 8-3.range()。如果我们需要生成下面的这些列表,分别需要在 range()内建函数中提供哪些参 数? (a)[0,1,2,3,4,5,6,7,8,9] (b)[3,6,9,12,15,18] (c)[-20,200,420,640,860] 答案: (a)range(0,10) (b)range(3,19,3) (c)range(-20,861,220)

8–4. 素数. 我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个 素数. 请把相关代码转换为一个返回值为布尔值的函数, 函数名为 isprime() . 如果输入的是 一个素数, 那么返回 True , 否则返回 False . 答案: def isprime(num1): count = num1 / 2 while count > 1: if num1 % count == 0: return False count -= 1 else: return True num1 = int(raw_input('Enter a number: ')) print isprime(num1) 8–5. 约数.。完成一个名为 getfactors() 的函数。它接受一个整数作为参数, 返回它所有约 数的列表, 包括 1 和它本身。 答案: def getfactors(num): L = [] for i in range(1,num+1): if num % i == 0: L.append(i) return L num = int(raw_input('Enter a number: ')) print getfactors(num) 方法二: def getfactors(num): factors=[] count=num/2 while count>=1: if num%count==0: factors.append(count) count-=1 factors.append(num) return factors print getfactors(20) 8–6. 素因子分解。 以刚才练习中的 isprime() 和 getfactors() 函数为基础编写一个函数, 它

接受一个整数作为参数, 返回该整数所有素数因子的列表. 这个过程叫做求素因子分解, 它 输出的所有因子之积应该是原来的数字. 注意列表里可能有重复的元素. 例如输入 20 , 返 回结果应该是 [2, 2, 5] 。 答案: def isprime(num1): count = num1 / 2 while count > 1: if num1 % count == 0: return False count -= 1 else: return True def prime_factors(num): L = [] if isprime(num): L = [1,num] else: count = num / 2 prime = 2 while prime <= count: if num % prime == 0: L.append(prime) num /= prime else: prime += 1 return L num = int(raw_input('Enter a number: ')) print prime_factors(num) 8–7. 全数。完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身. 例如: 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 == 0: L.append(i) print L

if sum(L) == num: return 1 else: return 0 num = int(raw_input('Enter a number: ')) print isperfect(num) Method two: def isprime(num1): count = num1 / 2 while count > 1: if num1 % count == 0: return False count -= 1 else: return True def getfactors(num): factors = [] count = num / 2 while count >= 1: if num % count == 0: factors.append(count) count -= 1 return factors def isperfect(num): L = [] if isprime(num): return 0 else: if sum(getfactors(num)) == num: return 1 else: return 0 num = int(raw_input('Enter a number: ')) print isperfect(num) 8–8. 阶乘。一个数的阶乘被定义为从 1 到该数字所有数字的乘积。N 的阶乘简写为 N! 。 写一个函数,指定 N, 返回 N! 的值。 def factorial(num): if num == 0 or num == 1: return 1

else: product = 1 for i in range(1,num + 1): product *= i return product num = int(raw_input('Enter a number: ')) print factorial(num) 8–9. 斐波那契数列。斐波那契数列形如 1,1,2,3,5,8,13,21,等等。也就是说,下一个值是序 列中前两个值之和。写一个函数,给定 N,返回第 N 个斐波那契数字。例如,第一个斐波那 契数字是 1,第 6 个是 8。 答案: def fibonacci(num): if num == 0: return 0 if num == 1: return 1 else: total = fibonacci(num-1) + fibonacci(num-2) return total for i in range(12): print fibonacci(i) 8-10.文本处理。统计一句话中的元音,辅音及单词(以空格分割)的个数。忽略元音和辅音的 特殊情况,如"h","y","qu"等。附加题:便携处理这些特殊情况的代码。 答案: 来自 http://blog.csdn.net/czd327917086/article/details/6691435 def counteng(string): words = len(string.split()) string = string.upper() yuans = fus = 0 for i in string: n = ord(i) if n in xrange(65,91): if n in [65,69,73,79,85]: yuans += 1 else: fus += 1 return [yuans,fus,words] string = raw_input('Enter a string: ') print counteng(string) 8–11. 文本处理。要求输入一个姓名列表,输入格式是“Last Name, First Name,” 即 姓, 逗号, 名. 编写程序处理输入, 如果用户输入错误, 比如“First Name Last Name,” , 请纠正

这些错误, 并通知用户. 同时你还需要记录输入错误次数. 当用户输入结束后, 给列表排序, 然后以“姓 , 名" 的顺序显示. 输入输出示例(你不需要完全按照这里里例子完成): % nametrack.py Enter total number of names: 5 Please enter name 0: Smith, Joe Please enter name 1: Mary Wong >> Wrong format... should be Last, First. >> You have done this 1 time(s) already. Fixing input... Please enter name 2: Hamilton, Gerald Please enter name 3: Royce, Linda Please 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: Hamilton, Gerald Royce, Linda Salem, Winston Smith, Joe Wong, Mary 答案: nums = int(raw_input('Enter total number of names: ')) print 'Enter name (lastname,firstname)' i=1 error = 0 names = [] while i <= nums: name = raw_input('Enter name %d: ' %i) symbol = name.strip().split(',') if len(symbol) == 2: print names.append(symbol[1]+','+symbol[0]) i += 1 else: print "The format is not correct, and You've been wrong %d times." %error error += 1 if error == 3: print "Too many times you're wrong" break for i in names: print i

12. (整型)位操作. 编写一个程序,用户给出起始和结束数字后给出一个下面这样的表格,分别

显示出两个数字间所有整型的十进制,二进制,八进制和十六进制表示.如果字符是可打印的 ASCII 字符,也要把它打印出来,如果没有一个是可打印字符,就省略掉 ASCII 那一 栏的表头.请 参考下面的输入输出格式: 输出示例 1 -----------------------输入起始值:9 输入结束值:18 DEC BIN OCT ----------------------------------------9 01001 11 10 01010 12 11 01011 13 12 01100 14 13 01101 15 14 01110 16 15 01111 17 16 10000 20 17 10001 21 18 10010 22 输出示例 2 -----------------------输入起始值:26 输入结束值:41 DEC BIN OCT HEX ----------------------------------------------------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 101000 50 28 41 101001 51 29 #coding:utf-8 start1 = int(raw_input('\t 输入起始值:'.decode('utf-8').encode('gbk')))

HEX 9 a b c d e f 10 11 12

ASCII

! " # $ % & ' ( )

end1 = int(raw_input('\t 输入结束值:'.decode('utf-8').encode('gbk'))) title = 'DEC\tBIN\tOCT\tHEX' for i in range(start1,end1): if i >=32 and i <= 126: title = u'十进制\t 二进制\t\t 八进制\t 十六进制\tASCII' break print title for i in range(start1,end1): if i >=32 and i <= 126: print '%d\t%07d\t\t%o\t%x\t\t%s' %(i,int(bin(i)[2:]),i,i,chr(i)) else: print '%d\t%07d\t%o\t%x' %(i,int(bin(i)[2:]),i,i) 8-13. 程序执行性能.在 8.6.2 节里,我们介绍了两种基本的迭代序列方法:1)通过序列项,以及 2)通过序列索引遍历.该小节的末尾我们指出后一种方法在序列很长的时候性能不佳(在我的 系统下,性能差了将近两倍[83%])你认为它的原因是什么? 答案:通过序列索引遍历,首先创建一个索引列表,然后遍历索引,再然后列表通过索引取 值,多了好几个步骤 答案取自:http://juven.blog.51cto.com/749867/984490/ 测试代码: import timeit nameList = ['Walter', 'Nicole', 'Steven', 'Henry', 'Walter', 'Nicole', 'Steven', 'Henry'] nameList *= 1000000 def inter_direct(): for eachName in nameList: #print eachName, "Lim" i = eachName def inter_index(): for nameIndex in range(len(nameList)): #print nameList[nameIndex], "Lim" #使用 print 的结果不准的 i = nameList[nameIndex] if __name__ == '__main__': t_index = timeit.Timer("inter_index()", "from __main__ import inter_index") t_direct = timeit.Timer("inter_direct()", "from __main__ import inter_direct") print t_direct.timeit(10) print t_index.timeit(10) 得到的时间,第二种比较慢,一次执行结果 结果如同教材说的, 注意,不要 print,因为 print 消耗的时间是非常大的 第一种 eachName 直接设置成 nameList 中一个元素,直接遍历 nameList

第二种是生成了一个索引列表“range(len(nameList))”,然后遍历索引,再通过索引查找元 素。很明显,这里遍历索引列表等同上面的遍历 nameList,这里多了一个生成索引列表和通 过索引查找元素两个操作。


相关文章:
PYTHON核心编程第二版第8章习题答案.pdf
PYTHON核心编程第二版第8章习题答案 - 8-1.条件语句。请看下边的代码:
python核心编程第二版第8章习题答案.doc
python核心编程第二版第8章习题答案_教育学_高等教育_教育专区。python核心编程第二版第8章习题答案 8-1.条件语句。请看下边的代码: # statement A if x > ...
PYTHON核心编程第二版课后题答案第八章.pdf
PYTHON核心编程第二版课后题答案第八章 - def loop(f, t, i
python核心编程第二版课后题答案第八章.doc
python核心编程第二版课后题答案第八章_工学_高等教育_教育专区。python核心编程第二版课后题答案第八章,转载,仅供参考 def loop(f, t, i): '''8-2 输入...
python核心编程第二版第9章习题答案.doc
python核心编程第二版第9章习题答案 - 91. 文件过滤. 显示一个文件
python核心编程第二版第9章习题答案.doc
python核心编程第二版第9章习题答案 - 91. 文件过滤. 显示一个文件
PYTHON核心编程第二版第2章习题答案.pdf
PYTHON核心编程第二版第2章习题答案 - 2-1.变量,print 和字符串
python核心编程第二版第7章习题答案.doc
python核心编程第二版第7章习题答案_教育学_高等教育_教育专区。pytho
python核心编程第二版第2章习题答案.doc
python核心编程第二版第2章习题答案_教育学_高等教育_教育专区。pytho
Python核心编程(第二版)-习题答案_图文.pdf
Python核心编程(第二版)-习题答案_计算机软件及应用_IT/计算机_专业资料。Python...python核心编程第二版第... 暂无评价 8页 1下载券 Python核心编程(第二版...
Python核心编程第二版-习题答案_图文.pdf
Python核心编程第二版-习题答案 - Chun_AppA.fm Page 1
Python 核心编程 第十三章习题答案.pdf
Python 核心编程 第十三章习题答案 - #!/usr/bin/env py
Python核心编程第三版课后习题解答(第四章).doc
Python核心编程第版课后习题解答(第四章)_计算机软件及应用_IT/计算机_专业...4-6.多线程网络聊天室 参考第二章中的习题解答。 4-8.线程池,一个生产者...
Python核心编程(中文第二版)带目录.txt
Python核心编程(中文第二版)带目录 - 符串的文 件名. 第 9-19 行
PYTHON核心编程(第二版)第十章习题答案.pdf
PYTHON核心编程(第二版)第十章习题答案_电子/电路_工程科技_专业资料。1
Python核心编程(第二版)第十章习题答案.doc
Python核心编程(第二版)第十章习题答案 - 10.1 引发异常。以下的哪个
python核心编程第二版第4章习题答案.doc
python核心编程第二版第4章习题答案 - 4-1.Python 对象。与所有
python核心编程第二版课后题答案第九章.doc
python核心编程第二版课后题答案第九章_理学_高等教育_教育专区。pytho
python核心编程第二版第3章习题答案.doc
python核心编程第二版第3章习题答案_理学_高等教育_教育专区。python
PYTHON核心编程第二版课后题答案第六章.pdf
PYTHON核心编程第二版课后题答案第六章 - def idcheck(): &
更多相关文章: