全国计算机等级考试二级教程-Python语言程序设计(2018年版)课后习题参考答案汇总_第1页
全国计算机等级考试二级教程-Python语言程序设计(2018年版)课后习题参考答案汇总_第2页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

全国计算机等级考试⼆级教程——Python语⾔程序设计(2018年版)课后习题参考答案汇总如标题所⽰,由于嵩天⽼师的那本书的课后习题的⼤题部分缺少答案,于是下⾯的代码是⾃⼰在看书期间尝试练习的结果,仅供同学参考。另外推荐MOOC上嵩天⽼师关于。祝学习愉快。#第2章第2题sen=input("print("\n".join(sen))#在print函数中,“\n”的转义效果就很明显#把⼀个字符串拆分成由字符组成的列表【不能变成集合,因为集合的话会⾃动去重】的话是不是直接list()list1=list(sen)#第2章第3题#这道题涉及到把字符转换为有效的可以计算的值#没有那么复杂,eval可以⾃动识别try:equ=eval(input("请输⼊⼀个合法的算式:"))#如果不是算式,可以检验其是否合法吗?except:print("输⼊的公式不合法,请重新输⼊,如1+3")equ=eval(input("请输⼊⼀个合法的算式:"))print(equ)#第2章第4题equ=eval(input("请输⼊⼀个⼩数:"))#print("您输⼊的⼩数的整数部分是:{}".format(round(equ)))#这个保留的是四舍五⼊的整数值,还不太准确。#print("您输⼊的⼩数的整数部分是:{:d}".format(equ))list1=str(equ).split(".")print(list1[0])#第25题n=eval(input("请输⼊整数N:"))#请输⼊整数N:8sum=0foriinrange(1,n+1):globalsumsum=print("1到N的求和结果:{}".format(sum))#1到N的求和结果:36#第3章第1题输⼊该整数百位及以上的数字num=eval(input("请输⼊⼀个整数:"))print("该整数百位及以上的数字是:{}".format(num//100))#第3章第2题string=input("请输⼊⼀个字符串(以空格分隔):")str=string.split("")#变成了⼀个listprint("\n".join(str))#注意斜杠的⽅向#第3章第3题这道题相对⽐较复杂不过不能我们或许可以定义⼀个字典week={"1":","2":"","3":"","4":"","5":"","6":"","7":""}dayinput((1-7):")print("今天是:{}".format(week.get(day)))#第3章第4题判断回⽂数涉及到⼀个将数字反向排列的⽅法(之前好像有遇到过)defnew=list(get)new=list(get)new.reverse()rev="".join(new)ifrev==get:print("输⼊的这个数是回⽂数。")else:print("输⼊的这个数不是回⽂数。")#将字符串反转是Python中常常考察的题了getinput(请输⼊⼀个数(⽤于判断是否为回⽂数reverse(get)#第3章第5题num=eval(input("请输⼊⼀个⼗进制的整数:"))print("其⼆进制的形式为:{:b}".format(num))print("其⼋进制的形式为:{:o}".format(num))print("其⼗六进制的形式为:{:X}".format(num))#第4章第1题判断是否为闰年#闰年的判断标准是4100整除(2)能够被四百整除?#判断条件有点复杂,给它两次机会。year=eval(input("请输⼊⼀个年份:"))defyeardeside(year):ifyear%400==0:print("该年份为闰年。")else:ifyear%4==0andyear%100!=0:#python这边条件之间使⽤的参数是,andorprint("该年份为闰年。")else:print("该年份不为闰年。")yeardeside(year)#ftyear为⽤户输⼊的数值。#第4章第2题计算两个整数之间的最⼤公约数和最⼩公倍数#最⼤公约数的计算⽅法:辗转相除法#最⼩公倍数的计算⽅法:两个数的乘积除以最⼤公约数#涉及到取余两个数之中较⼩的那⼀个再除涉及到判断的情况直到最后余零这时的被除数就是最⼤公约数a=eval(input("请输⼊⼀个较⼤的数:"))b=eval(input("请输⼊⼀个较⼩的数:"))cbbb的值在循环的过程中会发⽣改变daaa的值在循环的过程中会发⽣改变whilea%b!=0:r=a%ba=bb=rprint("这两个数的最⼤公约数是:{}".format(b))print("这两个数的最⼩公倍数是:{}".format((d*c)/b))#除法产⽣的结果为浮点数#第4章第3题统计不同字符的个数,包括中英⽂字符,数字,空格和其他字符的个数#我感觉这题有点复杂,拿到要⼀个字符⼀个字符的判断嘛#不⽤,我看到的⽹上的解决思路是这样的,以输⼊的那个序列为基准,在⾥⾯则在原来的基础上加⼀,不在⾥⾯,则以⾃⼰为第⼀个。#res相当于是定义了⼀个字典,按照键去取值,默认值为0,存在则取出相应的值(两种解决思路)#能不能按照值的⼤⼩进⾏排序输出sen=input("请输⼊⼀⾏字符:")defcount(sen):res={}#定义⼀个空的字典集res={}#定义⼀个空的字典集foriinsen:sen中的元素res[i]=res.get(i,0)+1(⾃然⽽然会想到的事情)itemslist(res.items()把没有顺序的字典转换为有顺序的列表items.sort(keylambdax:x[1],reverse=True)排序returnitems缩进注意count(sen)#iinrange(10):word,countitems[i返回列表第⼀个元素,为⼀个键值对的元组print(word,count输出的格式可适当调整。⼀⾏⼀⾏输出#第4章第4题#主要考察异常处理的处理⽅式try:num=eval(input("请输⼊⼀个整数:"))except:print("输⼊错误!请输⼊⼀个整数。")continue#结束本次循环,继续下⼀次循环#第4章第5题#⽺车门游戏#random库对于这个随机事件进⾏预测#预测参赛者改变选择和坚持选择获胜的概率#主持⼈开启另⼀扇门,露出门后⼭⽺,更不更换(即⾃⼰所指的是汽车还是⼭⽺之间赌fromrandomimport*random库,随机⽣成⼀组数(这组数的性质由不同的函数所决定)arandint(1,3)⽤户随机指出另⼀扇门#1,23为车ifa3:rate=1/3print("不改变选择获胜的概率为{}".format(rate))else:rate=2/3print("改变选择获胜的概率为{}".format(rate))#这道题实际上就是通过多次抽样得到胜利的次数,⽽概率就是从抽样这个过程中找到规律fromrandomimport*x=randint(5000,10000)#抽样的次数change=0nochange=0foriinrange(1,x+1):a=randrange(1,4)#汽车所在的位置b=randrange(1,4)#⽤户选的位置ifa==b:nochange=nochange+1#不改变计数为1,只有不改变才能获胜else:change=change+1#改变计数为1,改变才能获胜print("不更改选择得到汽车的概率为{}".format(nochange/x))print("更改选择得到汽车的概率为{}".format(change/x))#第52truefalsedefintprocess(num):#判断整数类型,异常判断if(type(num)==type(1)):foriinrange(2,num):ifnum%i0如果存在可以整除的其余项⽬,则不予考虑returnFalseelse:i==num-1i==num-1returnTrueelse:print("输⼊的参数不为整数!重新输⼊!")#第5章第3题统计传⼊字符串中的字母,数字,空格以及其他字符的个数defcount(str):res={}foriinres[i]=res.get(i,0)+1items=list(res.items())items.sort(key=lambdax:x[1],reverse=True)#排序returnitems#缩进注意#第5章第4题打印200以内的所有素数#素数:除了1和它本⾝再没有其他因⼦的数defsushu(num):a=[1]foriinrange(1,num+1):forjinrange(2,i):ifi%j0如果存在可以整除的其余项⽬,则不予考虑breakelse:ifj==i-1:#遍历到最后的,还是没有遇到整除的a.append(i)#print("{0}以内的素数为:{1}".format(num,"".join(str(a))))#str(a)这⾥我的还是很不准确#这也就是上次出错的地⽅#似曾相识,我是如何解决的呢?#⾸先把列表中的元素⼀点点取出来,然后转换为字符串,然后再⽤join拼接ls2=[str(i)foriina]#这⼀句代码特别重要,把数列中的数值全部转换为字符串b="".join(ls2)print(b)#第55#第31b#第42b#第n位数是第n-2次循环的b#所以最⼤到第n-2次循环,n-2+1=n-1deffacci(n):a=1b=1foriinrange(1,n-1):c=bb=a=creturnb#第6章第1题:英⽂字符频率统计(就是可能⼀⼤段序列中有各种字符,仅仅是统计英⽂字符出现频率的统计)#这让我想到了⽤perl语⾔处理碱基序列这块(还是很神奇的啊)#它这个是在特定的范围内去统计频率#=abc~Z,valuegetkeyvalue加⼀。defEngCount(str):va={"a":0,"b":0,"c":0,"d":0,"e":0,"f":0,"g":0,"h":0,"i":0,"j":0,"k":0,"l":0,"m":0,"n":0,"o":0,"p":0,"q":0,"r":0,"s":0,"t":0,"u":0,"v":0,"w":0,"x":0,"y":0,"z":0}ls=list(str)foriinls:ifva.get(i,"*")=="*":#这个判断语句有问题#后来修正了看出了问题所在breakbreakelse:va[i]=va.get(i)+1items=list(va.items())items.sort(key=lambdax:x[1],reverse=True)#排序returnitems#在逐个遍历的过程中EngCount("xshaxvhasvchasvhbxsabhsv")#第6章第2题统计中⽂字符出现的频率(想把⼤叔的诗作弄下来,然后去统计字频,那⼀定很有趣)importosos.chdir("E:\\S-code\\Pythoncode")#设定新的⼯作⽬录,test.txt⽂件要存放在这个⼯作⽬录下os.getcwd()#查看现在的⼯作⽬录'E:\\S-code\\Pythoncode'#显⽰的是我们最新设定的,就代表设定成功f=open("pose.txt","rt")#test.txt为⽂件名,rt为读取⽂件的⽅式sf.readlines(读取⽂件,输出结果为⼀个列表poseforlineins:ls=list(line)foriinls:ifiin",。、":breakelse:pose[i]=pose.get(i,0)+1items=list(pose.items())items.sort(key=lambdax:x[1],reverse=True)foriinrange(1,11):word,count=items[i]print("{0:<10}{1:>5}".format(word,count))f.close()#这⾥虽然能够对出现的中⽂字符,但是如果能够出现常⽤的词语的搭配就更好了#词云importjiebaf=open("pose.txt","r")txt=f.read()f.close()words=jieba.lcut(txt)counts={}forwordinwords:iflen(word)==1:continueelse:counts[word]=counts.get(word,0)+1items=list(counts.items())items.sort(key=lambdax:x[1],reverse=True)foriinrange(1,11):word,count=items[i]print("{0:<10}{1:>5}".format(word,count))#第6章第3题随机密码的⽣成importrandomcodelist=["A","a","B","b","C","c","D","d","E","e",1,2,3,4,5,6,7,8,9,0]foriinrange(1,11):secret=random.sample(codelist,8)#把列表变成字符串new=[str(i)foriinsectet]#这⼀句代码特别重要,把数列中的数值全部转换为字符串print("{}".format("".join(new)))#第6章第4题重复元素判定defrep(ls):#逐个的遍历列表各元素(这⾥就涉及到算法了)#在我印象中,算法是什么呢,就是解决问题的⽅法,⽽这种解决问题的⽅法可以通过不同的语⾔来实现#算法具体解决的是怎么做的问题,就像解⼀道数学题有不同的思路foriinrange(0,len(ls)):#这⾥的嵌套循环是值得借鉴的forjinrange(i+1,len(ls)):ifls[i]==ls[j]:print("糟糕!有重复值!")breakelse:continuea=[1,2,3,1,1,5,3,5,4,6]rep(a)#第6章第5题利⽤集合的⽆重复性改编这道程序defrep(ls):#在命名变量的时候,不要和语⾔本⾝的关键字重复,要不然程序会傻傻分不清#逐个的遍历列表各元素(这⾥就涉及到算法了)#在我印象中,算法是什么呢,就是解决问题的⽅法,⽽这种解决问题的⽅法可以通过不同的语⾔来实现#算法具体解决的是怎么做的问题,就像解⼀道数学题有不同的思路a=set(ls)#转为集合blist(a集合再转换为列表ifbls:print("安全!⽆重复值!")else:print("糟糕!有重复值!")a=[1,2,3,2]rep(a)#第7章第1题统计该字符在⽂件中出现的次数#发现定义⼀个函数真的要⽅便很多,到时候直接调⽤就⾏importosos.chdir("E:\\S-code\\Pythoncode")defcharcount(ch):word={ch:0}#定义⼀个字典,默认值为零f=open("diary.txt","rt")p=f.readlines()foriinp:#读取每⼀⾏,存放在⼀个列表之中forjini:#再对每⼀⾏的字符串进⾏分解成字符ifj==ch:word[ch]=word.get(ch,0)+1count=word.get(ch,0)charcount("我")#第7章第2题⼤写字母转⼩写⼩写字母转⼤写(好⽆聊的要求,估计是看看我们熟不熟悉这部分操作吧)#这个函数也是逐个遍历,逐个操作处理的过程#通过做这道题学会了⽂件另存为的操作,怎样写⼊⼀个新的⽂件中importosos.chdir("E:\\S-code\\Pythoncode")f=open("englishText.txt","r+")w=open("new.txt","a+")p=f.readlines()#每⾏被存储为列表foriinp:#读取每⼀⾏,存放在⼀个列表之中forjini:#再对每⼀⾏的字符串进⾏分解成字符ifj.islower():#

温馨提示

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

最新文档

评论

0/150

提交评论