当前位置:首页 >> 教育学 >>

python核心编程第二版第7章习题答案


7-1.字典方法。哪个字典方法可以用来把两个字典合并到一起。 答案:dict.update(dict2) 将字典 dict2 的键-值对添加到字典 dict 中 7-2.字典的键。 我们知道字典的值可以是任意的 Python 对象, 那字典的键又如何呢?请试着 将除数字和字符串意外的其他不同类型的对象作为字典的键, 看看哪些类型可以, 哪些不行。 对那些不能作为字典的键的对象类型,你认为是什么原因呢? 答案: 键必须是可哈希的。 所有不可变的类型都是可哈希的, 因此他们都可以作为字典的键。 一个要说明的问题是:值相等的数字表示相同的键。换句话说,整型数字 1 和浮点型 1.0 的 哈希值是相同的,即它们是相同的键。同时,也有一些可变对象(很少)是可哈希的,它们可 以作为字典的键,但很少见。 用元组做有效的键,必须要加限制:元组中只包括像数字和字符串这样的不可变参数,才可 以作为字典中有效的键。 内建函数 hash()可以判断某个对象是否可以做一个字典的键, 如果非可哈希类型作为参数传 递给 hash()方法,会产生 TypeError 错误,否则会产生 hash 值,整数。 >>> hash(1) 1 >>> hash('a') -468864544 >>> hash([1,2]) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> hash([1,2]) TypeError: unhashable type: 'list' >>> hash({1:2,}) Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> hash({1:2,}) TypeError: unhashable type: 'dict' >>> hash(set('abc')) Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> hash(set('abc')) TypeError: unhashable type: 'set' >>> hash(('abc')) -1600925533 >>> hash(1.0) 1 >>> hash(frozenset('abc')) -114069471 >>> hash(((1,3,9)))

1140186820 >>> hash(((1,3,9),(1,2))) 340745663 >>> hash(((1,3,'9'),(1,2))) 1944127872 >>> hash(((1,3,'9'),[1,2],(1,2))) Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> hash(((1,3,'9'),[1,2],(1,2))) TypeError: unhashable type: 'list' >>> 7-3.字典和列表的方法。 (a)创建一个字典,并把这个字典中的键按照字母顺序显示出来。 (b)现在根据已经按照字母顺序排列好的键,显示出这个字典中的键和值。 (c)同(b), 但这次是根据已按照字母顺序排序好的字典的值, 显示出这个字典中的键和值 (注 意: 对字典和哈希表来说, 这样做一般没什么实际意义, 因为大多数访问和排序 (如果需要) 都是基于字典的键,这里只把它作为一个练习)。 答案: (a) >>> dict1 = {'a':1,'b':2,'c':3} >>> >>> sorted(dict1.keys()) ['a', 'b', 'c'] >>> (b) >>> dict1 = {'a':1,'b':2,'c':3} >>> for i in sorted(dict1.keys()): print i,dict1[i]

a1 b2 c3 >>> (c) dict1 = {'a':3,'b':1,'c':2,'d':4} print dict1 dict1value = dict1.values() dict1value.sort() for i in dict1value:

for key in dict1.keys(): if i == dict1[key]: print i,key 7-4.建立字典。给定两个长度相同的列表,比如说,列表[1,2,3,...]和['abc', 'def', 'ghi', ...], 用这两个列表里的所有数据组成一个字典。像这样:{1:'abc', 2:'def', 3:'ghi', ...}。 答案: >>> dict(zip([5,3,2,8],['a','d','r','m'])) {8: 'm', 2: 'r', 3: 'd', 5: 'a'} >>> 7–5. userpw2.py。下面的问题和例题 7.1 中管理名字-密码的键值对数据的程序有关。 (a)修改那个脚本,使它能记录用户上次的登录日期和时间(用 time 模块),并与用户密码一 起保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都 应有提示,在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登 录在时间上相差不超过 4 个小时,则通知该用户: “You already logged in at: <last_ login_timestamp>.” (b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名 字和他们的密码的清单。 (c) 口令目前没有加密。请添加一段对口令加密的代码(请参考 crypt, rotor, 或其它加密模块) (d) 为程序添加图形界面,例如,用 Tkinter 写。 (e) 要求用户名不区分大小写。 (f) 加强对用户名的限制,不允许符号和空白符。 (g)合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登 录, 询问该用户是否是新用户,如果回答是肯定的,就创建该帐户。否则,按照老用户的方式登 录。 答案:略 http://blog.csdn.net/birdzb/article/details/48325751 7-6. 列表和字典。创建一个简单的股票证券投资数据系统。其中应至少包含四项数据:股 市行情显示器符号,所持有的股票,购买价格及当前价位 - 你可以随意添加其他数据项, 比如收益率,52 周最高指数、最低指数,等等。用户每次输入各列的数据构成一个输出行。 每行数据构成一个列表。还有一个总列表,包括了所有行的数据。数据输入完毕后,提示用 户选择一列数据项进行排序。 把该数据项抽取出来作为字典的键, 字典的值就是该键对应行 的值的列表。提醒读者:被选择用来排序的数据项必须是非重复的键,否则就会丢失数据, 因为字典不允许一个键有多个值。你还可以选择其他计算输出,比如,盈亏比率,目前证券 资产价值等。 答案:略。以后补 7-7. 颠倒字典中的键和值。用一个字典做输入,输出另一个字典,用前者的键做值,前者 的值做键。 dict1 = {'a':3,'b':1,'c':2,'d':4} print dict1

dict2 = {} for key in dict1.keys(): dict2.update({}.fromkeys(str(dict1[key]),key)) print dict2 7-8. 人力资源。创建一个简单的雇员姓名和编号的程序。让用户输入一组雇员姓名和编号。 你的程序可以提供按照姓名排序输出的功能, 雇员姓名显示在前面, 后面是对应的雇员编号。 附加题:添加一项功能,按照雇员编号的顺序输出数据。 #coding:utf-8 dict1 = {} dict2 = {} while True: name = raw_input('name: ') if name == 'q': break number = int(raw_input('number: ')) dict1[name] = number dict2[number] = name def name_output(): print '-'* 21 print ' name',' number' for key in sorted(dict1.keys()): print '%10s %10d' %(key,dict1[key]) print '-'* 21 def number_output(): print '-'* 21 print ' number',' name' for key in sorted(dict2.keys()): print '%10d %10s' %(key,dict2[key]) print '-'* 21 def showmenu(): prompt = """ --------------------Menu: (N)ame sort (S)ort number (Q)uit

--------------------Enter choice: """ done = True while done: chosen = True while chosen: try: choice = raw_input(prompt).strip()[0].lower() except (EOFError,KeyboardInterrupt): choice = 'q' print '\nYou picked: [%s]' % choice if choice not in 'nsq': print 'invalid option, try again' else: chosen = False if choice == 'q':break if choice == 'n':name_output() if choice == 's':number_output() if __name__ == '__main__': showmenu()

7-9. 翻译 (a) 编写一个字符翻译程序(功能类似于 Unix 中的 tr 命令)。我们将这个函数叫做 tr(),它有 三个字符串做参数: 源字符串、目的字符串、基本字符串,语法定义如下: def tr(srcstr, dststr, string) srcstr 的内容是你打算“翻译”的字符集合,dsrstr 是翻译后得到的字符集合,而 string 是 你打算进行翻译操作的字符串。 举例来说, 如果 srcstr == 'abc', dststr == 'mno', string =='abcdef', 那么 tr()的输出将是'mnodef'. 注意这里 len(srcstr) == len(dststr). 在这个练习里, 你可以使用内建函数 chr() 和 ord(), 但它们并不一定是解决这个问题所必不 可少的函数。 (b) 在这个函数里增加一个标志符参数,来处理不区分大小写的翻译问题。 (c)修改你的程序, 使它能够处理删除字符的操作。 字符串 srcstr 中不能够映射到字符串 dststr 中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到 dststr 字符串中的任何 字符,因此就从函数返回的字符里被过滤掉了。举例来说:如果 srcstr == 'abcdef', dststr == 'mno',string == 'abcdefghi', 那么 tr()将输出'mnoghi'. 注意这里 len(srcstr) >= len(dststr). 答案:不会 7–10. 加密。 (a) 用上一个练习的思路编写一个"rot13"翻译器。"rot13"是一个古老而又简单的加密方法,

它把字母表中的每个字母用其后的第 13 个字母来代替。 字母表中前半部分字母将被映射到 后半部分,而后半部分字母将被映射到前半部分,大小写保持不变。举例来说,'a'将被替换 为'n','X'将被替换为'K'; 数字和符号不进行翻译。 (b)在你的解决方案的基础上加一个应用程序,让它提示用户输入准备加密的字符串(这个算 法同时也可以对加密后的字符串进行解密),如下所示: % rot13.py Enter string to rot13: This is a short sentence. Your string to en/decrypt was: [Thisis a short sentence.]. The rot13 string is: [Guvf vf n fubeg fragrapr.]. % % rot13.py Enter string to rot13: Guvf vf n fubeg fragrapr. Your string to en/decrypt was: [Guvfvf n fubeg fragrapr.]. The rot13 string is: [This is a short sentence.]. 答案:不会+1 7-11.定义。什么组成字典中合法的键?举例说明字典中合法的键和非法的键。 答案: 字典中的键必须是可哈希的, 像列表和字典这样的可变类型, 由于他们不是可哈希的, 所以不能作为键。 7-12. 定义。 (a)在数学上,什么是集合? (b)在 Python 中,关于集合类型的定义是什么? 答案: (a)数学上,把 set 称作由不同的元素组成的集合,集合的成员通常被称作集合元素。 (b)Python 中,集合对象是一组无序排列的可哈希的值。 7–13. 随机数。 修改练习 5-17 的代码:使用 random 模块中的 randint()或 randrange()方法生成一个随机数 集合:从 0 到 9(包括 9)中随机选择,生成 1 到 10 个随机数。这些数字组成集合 A(A 可以 是可变集合,也可以不是)。同理,按此方法生成集合 B。每次新生成集合 A 和 B 后,显示 结果 A | B 和 A & B 答案: import random abc = [] xyz = [] for i in range(random.randint(1,10)): abc.append(random.randint(0,9)) A = set(abc) for i in range(random.randrange(1,10)): xyz.append(random.randrange(0,9))

B = set(xyz) print A print B print A | B print A & B 7-14. 用户验证。修改前面的练习,要求用户输入 A|B 和 A&B 的结果,并告诉用户的答案是 否正确,而不是将 A|B 和 A&B 的结果直接显示出来。如果用户回答错误,允许他修改解决 方案,然后重新验证用户输入的答案。如果用户三次提交的答案均不正确,程序将显示正确 结果。附加题:运用你关于集合的知识,创建某个集合的潜在子集,并询问用户此潜在子集 是否真是该集合的子集,要求和主程序一样有显示更正和答案的功能。 答案: import random abc = [] xyz = [] answer1 = [] for i in range(random.randint(1,10)): abc.append(random.randint(0,9)) A = set(abc) for i in range(random.randrange(1,10)): xyz.append(random.randrange(0,9)) B = set(xyz) print A print B for i in range(0,3): answer = raw_input('A|B = ') for j in answer.split(','): answer1.append(int(j)) C = set(answer1) if C == A | B: print 'You are right!' break elif i == 2: print 'Sorry,The correct answer is',A | B else: print 'Sorry,you are wrong.' 7–15. 编写计算器。

这个练习取材于 http://math.hws.edu/ 在线免费 Java 教材中的练习 12.2。编写一个程序允 许用户选择两个集合:A 和 B, 及运算操作符。 例如, in, not in, &, |, ^, <,<=, >, >=, ==, !=, 等. (你 自己定义集合的输入语法,它们并不一定要像 Java 示例中那样用方括号括住。)解析输入的 字符串, 按照用户选择的运算进行操作。你写的程序代码应该比 Java 版本的该程序更简洁。 答案:不会 注:本着资源共享原则,也为更好的学习交流,本文来自于网易博客 http://fangweiren843.blog.163.com/, 经作者同意, 首次上传在百度文库里, 供大家学习交流。


相关文章:
python核心编程第二版第7章习题答案.doc
python核心编程第二版第7章习题答案_教育学_高等教育_教育专区。python核心编程第二版第7章习题答案 7-1.字典方法。哪个字典方法可以用来把两个字典合并到一起。...
PYTHON核心编程第二版第2章习题答案.pdf
PYTHON核心编程第二版第2章习题答案 - 2-1.变量,print 和字符串
python核心编程第二版第9章习题答案.doc
python核心编程第二版第9章习题答案 - 91. 文件过滤. 显示一个文件
python核心编程第二版第8章习题答案.doc
python核心编程第二版第8章习题答案_教育学_高等教育_教育专区。pytho
python核心编程第二版第9章习题答案.doc
python核心编程第二版第9章习题答案 - 91. 文件过滤. 显示一个文件
PYTHON核心编程第二版第8章习题答案.pdf
PYTHON核心编程第二版第8章习题答案 - 8-1.条件语句。请看下边的代码:
python核心编程第二版课后题答案第七章7.5.doc
python核心编程第二版课后题答案第七章7.5 - db 必须建立在一个数据库
python核心编程第二版第4章习题答案.doc
python核心编程第二版第4章习题答案 - 4-1.Python 对象。与所有
Python核心编程(第二版)第十章习题答案.doc
Python核心编程(第二版)第十章习题答案 - 10.1 引发异常。以下的哪个
python核心编程第二版第2章习题答案.doc
python核心编程第二版第2章习题答案_教育学_高等教育_教育专区。pytho
python核心编程第二版课后题答案第八章.doc
python核心编程第二版课后题答案第八章_工学_高等教育_教育专区。python核心编程第二版课后题答案第八章,转载,仅供参考 def loop(f, t, i): '''8-2 输入...
PYTHON核心编程(第二版)第十章习题答案.pdf
PYTHON核心编程(第二版)第十章习题答案_电子/电路_工程科技_专业资料。1
python核心编程第二版课后题答案第六章.doc
python核心编程第二版课后题答案第六章_工学_高等教育_教育专区。python核心编程第二版课后题答案,转载,仅供参考 def idcheck(): '''6-2 修改 idcheck 使之...
python核心编程第二版课后题答案第十五章.doc
python核心编程第二版课后题答案第十五章_工学_高等教育_教育专区。python核心编程第二版课后题答案,转载,仅供参考 #15-1 识别下列字符串:“bat,”“bit,”“...
Python 核心编程 第十三章习题答案.pdf
Python 核心编程 第十三章习题答案 - #!/usr/bin/env py
Python核心编程第二版-习题答案_图文.pdf
Python核心编程第二版-习题答案 - Chun_AppA.fm Page 1
PYTHON核心编程第二版课后题答案第八章.pdf
PYTHON核心编程第二版课后题答案第八章 - def loop(f, t, i
python核心编程第二版第3章习题答案.doc
python核心编程第二版第3章习题答案_理学_高等教育_教育专区。python
Python核心第二版习题答案.pdf
Python核心第二版习题答案 - Pytho 核心编程第二版(第二,三,四,五
PYTHON核心编程第二版课后题答案第六章.pdf
PYTHON核心编程第二版课后题答案第六章 - def idcheck(): &
更多相关文章: