python核心编程第二版第7章习题答案.docx_第1页
python核心编程第二版第7章习题答案.docx_第2页
python核心编程第二版第7章习题答案.docx_第3页
python核心编程第二版第7章习题答案.docx_第4页
python核心编程第二版第7章习题答案.docx_第5页
已阅读5页,还剩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 , line 1, in hash(1,2)TypeError: unhashable type: list hash(1:2,)Traceback (most recent call last): File , line 1, in hash(1:2,)TypeError: unhashable type: dict hash(set(abc)Traceback (most recent call last): File , line 1, in 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 , line 1, in 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,dict1ia 1b 2c 3 (c)dict1 = a:3,b:1,c:2,d:4print dict1dict1value = dict1.values()dict1value.sort()for i in dict1value:for key in dict1.keys():if i = dict1key:print i,key7-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 75. userpw2.py。下面的问题和例题7.1 中管理名字-密码的键值对数据的程序有关。(a)修改那个脚本,使它能记录用户上次的登录日期和时间(用time 模块),并与用户密码一起保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都应有提示,在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登录在时间上相差不超过4 个小时,则通知该用户: “You already logged in at: .”(b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名字和他们的密码的清单。(c) 口令目前没有加密。请添加一段对口令加密的代码(请参考crypt, rotor, 或其它加密模块)(d) 为程序添加图形界面,例如,用Tkinter 写。(e) 要求用户名不区分大小写。(f) 加强对用户名的限制,不允许符号和空白符。(g)合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登录,询问该用户是否是新用户,如果回答是肯定的,就创建该帐户。否则,按照老用户的方式登录。答案:略/birdzb/article/details/483257517-6. 列表和字典。创建一个简单的股票证券投资数据系统。其中应至少包含四项数据:股市行情显示器符号,所持有的股票,购买价格及当前价位 - 你可以随意添加其他数据项,比如收益率,52 周最高指数、最低指数,等等。用户每次输入各列的数据构成一个输出行。每行数据构成一个列表。还有一个总列表,包括了所有行的数据。数据输入完毕后,提示用户选择一列数据项进行排序。把该数据项抽取出来作为字典的键,字典的值就是该键对应行的值的列表。提醒读者:被选择用来排序的数据项必须是非重复的键,否则就会丢失数据,因为字典不允许一个键有多个值。你还可以选择其他计算输出,比如,盈亏比率,目前证券资产价值等。答案:略。以后补7-7. 颠倒字典中的键和值。用一个字典做输入,输出另一个字典,用前者的键做值,前者的值做键。dict1 = a:3,b:1,c:2,d:4print dict1dict2 = for key in dict1.keys():dict2.update(.fromkeys(str(dict1key),key)print dict27-8. 人力资源。创建一个简单的雇员姓名和编号的程序。让用户输入一组雇员姓名和编号。你的程序可以提供按照姓名排序输出的功能,雇员姓名显示在前面,后面是对应的雇员编号。附加题:添加一项功能,按照雇员编号的顺序输出数据。#coding:utf-8dict1 = dict2 = while True:name = raw_input(name: )if name = q:breaknumber = int(raw_input(number: )dict1name = numberdict2number = namedef name_output():print -* 21print name, numberfor key in sorted(dict1.keys():print %10s %10d %(key,dict1key)print -* 21def number_output():print -* 21print number, namefor key in sorted(dict2.keys():print %10d %10s %(key,dict2key)print -* 21def showmenu():prompt = -Menu:(N)ame sort(S)ort number(Q)uit-Enter choice: done = Truewhile done:chosen = Truewhile chosen:try:choice = raw_input(prompt).strip()0.lower()except (EOFError,KeyboardInterrupt):choice = qprint nYou picked: %s % choiceif choice not in nsq:print invalid option, try againelse:chosen = Falseif choice = q:breakif 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).答案:不会710. 加密。(a) 用上一个练习的思路编写一个rot13翻译器。rot13是一个古老而又简单的加密方法,它把字母表中的每个字母用其后的第13 个字母来代替。字母表中前半部分字母将被映射到后半部分,而后半部分字母将被映射到前半部分,大小写保持不变。举例来说,a将被替换为n,X将被替换为K; 数字和符号不进行翻译。(b)在你的解决方案的基础上加一个应用程序,让它提示用户输入准备加密的字符串(这个算法同时也可以对加密后的字符串进行解密),如下所示:% rot13.pyEnter 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.pyEnter 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.答案:不会+17-11.定义。什么组成字典中合法的键?举例说明字典中合法的键和非法的键。答案:字典中的键必须是可哈希的,像列表和字典这样的可变类型,由于他们不是可哈希的,所以不能作为键。7-12. 定义。 (a)在数学上,什么是集合? (b)在 Python 中,关于集合类型的定义是什么?答案:(a)数学上,把set称作由不同的元素组成的集合,集合的成员通常被称作集合元素。(b)Python中,集合对象是一组无序排列的可哈希的值。713. 随机数。修改练习5-17 的代码:使用random 模块中的randint()或randrange()方法生成一个随机数集合:从0 到9(包括9)中随机选择,生成1 到10 个随机数。这些数字组成集合A(A 可以是可变集合,也可以不是)。同理,按此方法生成集合B。每次新生成集合A 和B 后,显示结果 A | B 和 A & B答案:import randomabc = 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 Aprint Bprint A | Bprint A & B7-14. 用户验证。修改前面的练习,要求用户输入A|B和A&B的结果,并告诉用户的答案是否正确,而不是将A|B和A&B的结果直接显示出来。如果用户回答错误,允许他修改解决方案,然后重新验证用户输入的答案。如果用户三次提交的答案均不正确,程序将显示正确结果。附加题:运用你关于集合的知识,创建某个集合的潜在子集,并询问用户此潜在子集是否真是该集合的子集,要求和主程序一样有显示更正和答案的功能。答案:import randomabc = xyz = answer1 = for i in range(random.randint(1,10):abc.append(random.randint(0,9)A = set(abc)

温馨提示

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

评论

0/150

提交评论