您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > python核心编程第二版课后题答案第七章
deforderdict(mydict):'''7-3(a)创建一个字典,并把字典中的键按照字母顺序显示出来'''#题目说了只要把键按照字母顺序显示出来,并没有说要把值也显示出来printsorted(mydict)deforderdict2(mydict):'''7-3(b)现在根据排好的键,显示出这个字典的键和值'''keys=sorted(mydict)foriinkeys:print'%s:%s'%(i,mydict[i]),deforderdict3(mydict):'''7-3(c)这次按照值排序输出'''#这里我们采用了sorted的key技巧fork,vinsorted(mydict.items(),key=lambdax:x[1]):print'%s:%s'%(k,v),defmergedict(list1,list2):'''7-4给定两个长度相同的列表,建立一个字典例如[1,2,3,4,5]['a','b','c','d']生成[1:'a',2:'b',3:'c',4:'d']'''r={}lens=len(list1)foriinxrange(lens):r.setdefault(list1[i],list2[i])returnr#7.5在单独的文件里#7.6在单独的文件里defchangedict(mydict):'''7.7将输入的字典的键和值互换示例:mydict={1:'a',2:'b'}changedict(mydict)printmydict'''#这里假设输入的值都是可以作为字典的键的,并且要注意,值不能有重复,否则会产生数据丢失#考虑,是直接修改引用,还是不修改引用返回值?#产生同值怎么办?#如果是返回值,那么这道题目太简单了,所以我这里使用返回引用#返回引用的话就是修改引用#如果使用引用就不能使用items迭代,因为在循环items的时候,你是无法修改键的#所以我这里使用了keysforiinmydict.keys():temp=mydict[i]delmydict[i]mydict[temp]=idefhr():'''7.8输入雇员和编号,对雇员进行排序输出,对编号进行排序输出'''db={}#uid是不能重复的,但是名字是有可能重复的,所以我这里不打算用键值互换法whileTrue:employee=raw_input('请输入雇员名[输入q退出]:')ifemployee=='q':breakemployee.decode('gbk')whileTrue:uid=int(raw_input('请输入编号:'))ifuidindb:print'编号已经存在!'continuebreakdb[uid]=employeewhileTrue:order=raw_input('你想按名字(N)还是按编号(I)排序(N/I/Q退出):').lower()[0]ifordernotin'niq':print'输入的指令错误!'continueiforder=='q':breakiforder=='n':#知识点,这里用到了sorted中的key参数#key返回一个lambda,所谓lambdabda就是一个小函数,#类似匿名函数##def(x):#returnx[1]##那么x又是什么呢?x就是db.items返回的第一项,x[0]就是字典的键,x[1]就是字典的值#所以表示按照db.items()中字典的值部分排序#此外sorted里还有一个是cmp,cmp表示比较,比较的对象是当前项和下一项#例如cmp=lambdax,y:cmp(x[1],y[1]),#类似匿名函数##def(x,y):#returncmp(x[1],y[1])##这里的x[1]其实就是第一项中的值部分,y[1]就是第二行中的值部分,#你也可以不用lamdba,只需要返回小于0,0和大于0的3个数字钟的一种表示排序fork,vinsorted(db.items(),key=lambdax:x[1]):printk,velse:fork,vinsorted(db.items()):printk,vdeftr(srcstr,dststr,string,sensitive=True):'''7-9(abc)翻译,将字符串中的srcstr替换为dststr'''#如果sensitive=True表示区分大小写,如果为False表示不区分大小写#如果是不区分大小写,那么怎么做呢?一种方式是使用ord()chr()一个一个去解析#还有一个办法就是将所有的字符都转成小写,然后找到index后替代lens=len(srcstr)src,dst,stri=srcstr,dststr,string#如果不区分大小写的话,那么就用src,dst,stri来保存小写字符串ifnotsensitive:src,dst,stri=srcstr.lower(),dststr.lower(),string.lower()#构思,找到dststr,然后将它替换即可#我这里借用了以前6-12的思路whileTrue:index=stri.find(src)ifindex-1:string=string[0:index]+dststr+string[index+lens:]#如果不区分大小写的话,则stri为小写组ifnotsensitive:stri=stri[0:index]+dst+stri[index+lens:]#如果区分大小写,那么stri就是stringelse:stri=stringelse:breakreturnstringdefrot13(string):'''7-10rot13加密,就是将26个字母的前13个字母和后13个字母互换,比如a就是n'''#要解密只要再次调用rot13即可#我们知道A是65,那么65+13=78,那么就是N,那么N就是A#分析#A....M(65-77)是+13#N....Z(78-90)是-13#a....M(97-109)是+13#n....z(110-122)是-13new=''foriinstring:if65=ord(i)=77or97=ord(i)=109:new+=chr(ord(i)+13)elif78=ord(i)=90or110=ord(i)=122:new+=chr(ord(i)-13)else:new+=ireturnnewdefranset():'''7-13随机数,用random中的randint或者randrange生成一个随机数集合从0-9中随机选择1到10个随机数,然后组成一个集合,同理生成B,然后显示A|B和A&B'''importrandom#先生成A吧Alist,Blist,Amax,Bmax=[],[],random.randint(2,10),random.randint(2,10)foriinxrange(1,Amax):whileTrue:ran=random.randint(0,9)ifraninAlist:continueAlist.append(ran)breakforiinxrange(1,Bmax):whileTrue:ran=random.randint(0,9)ifraninBlist:continueBlist.append(ran)breakA,B=set(Alist),set(Blist)printA|BprintA&Bdefyanzheng():'''7-14修改7-13,要求用户输入A|B和A&B结果,如果回答错误,要求重新输入,如果3次错误则显示正确答案。'''importrandom#初始化Alist,Blist,Amax,Bmax=[],[],random.randint(2,10),random.randint(2,10)foriinxrange(1,Amax):whileTrue:ran=random.randint(0,9)ifraninAlist:continueAlist.append(ran)breakforiinxrange(1,Bmax):whileTrue:ran=random.randint(0,9)ifraninBlist:continueBlist.append(ran)breakA,B=set(Alist),set(Blist)printAprintBloop=3AorB,AandB=A|B,A&B#A|B,用户验证whileloop:#aorb是一个字符列表aorb=raw_input('请输入A|B[用,分割数字]:').split(',')aorb2=[]#转成数字列表foriinaorb:try:aorb2.append(int(i.strip()))except:continueifset(aorb2)==AorB:print'回答正确!'breakprint'回答错误!'loop-=1ifnotloop:printAorBloop=3#A&B,用户验证whileloop:#aandb是一个字符列表aandb=raw_input('请输入A&B[用,分割数字]:').split(',')aandb2=[]#转成数字列表foriinaandb:try:aandb2.append(int(i.strip()))except:continueifset(aandb2)==AandB:print'回答正确!'breakprint'回答错误!'loop-=1ifnotloop:printAandBdefcomputerset():'''7-15输入两个集合,和运算符,显示结果'''#aorb是一个字符列表A=set(raw_input('请输入A集合[用,分割]:').split(','))B=set(raw_input('请输入B集合[用,分割]:').split(','))whileTrue:op=raw_input('请输入操作符[in,notin,&,|,^,,=,,=,==,!=中的一个]:').strip()ifopnotin['in','notin','&','|','^','','=','','=','==','!=']:continuebreakifop=='in':print'AinBis%s'%(AinB)elifop=='notin':print'AnotinBis%s'%(AnotinB)elifop=='&':print'A&Bis%s'%(A&B)elifop=='|':print'A|Bis%s'%(A|B)elifop=='^':print'A^Bis%s'%(A^B)elifop=='':print'ABis%s'%(AB)elifop=='':print'ABis%s'%(AB)elifop=='=':print'A=Bis%s'%(A=B)elifop=='=':print'A=Bis%s'%(A=B)elifop=='==':print'A==Bis%s'%(A==B)elifop=='!=':print'A!=Bis%s'%(A!=B)
本文标题:python核心编程第二版课后题答案第七章
链接地址:https://www.777doc.com/doc-4210882 .html