全国计算机等级考试⼆级教程——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])
#第2章第5题
n=eval(input("请输⼊整数N:"))
#请输⼊整数N:8
sum=0
for i in range(1,n+1):
global sum
sum = sum+i
print("1到N的求和结果:{}".format(sum))
#1到N的求和结果:36
#第3章第1题输⼊该整数百位及以上的数字
num = eval(input("请输⼊⼀个整数:"))
print("该整数百位及以上的数字是:{}".format(num//100))
#第3章第2题
string=input("请输⼊⼀个字符串(以空格分隔):")
str = string.split(" ")#变成了⼀个list
print("\n".join(str)) #注意斜杠的⽅向
#第3章第3题这道题相对⽐较复杂不过不能我们或许可以定义⼀个字典
week = {"1":"星期⼀","2":"星期⼆","3":"星期三","4":"星期四","5":"星期五","6":"星期六","7":"星期⽇"}
day = input("请输⼊数字(1-7):")
print("今天是:{}".(day)))
#第3章第4题判断回⽂数涉及到⼀个将数字反向排列的⽅法(之前好像有遇到过)
def reverse(get):
new = list(get)
new = list(get)
rev = "".join(new)
if rev == get:
print("输⼊的这个数是回⽂数。")
else:
print("输⼊的这个数不是回⽂数。")
#将字符串反转是Python中常常考察的题了
get = input("请输⼊⼀个数(⽤于判断是否为回⽂数):")
reverse(get)
#第3章第5题
num = eval(input("请输⼊⼀个⼗进制的整数:"))
print("其⼆进制的形式为:{:b}".format(num))
print("其⼋进制的形式为:{:o}".format(num))
print("其⼗六进制的形式为:{:X}".format(num))
#第4章第1题判断是否为闰年
#闰年的判断标准是(1)被4整除但不能被100整除(2)能够被四百整除?
#判断条件有点复杂,给它两次机会。
year = eval(input("请输⼊⼀个年份:"))
def yeardeside(year):
if year%400==0:
print("该年份为闰年。")
else:
if year%4==0 and year%100!=0: #python这边条件之间使⽤的参数是,and or
python基础代码练习
print("该年份为闰年。")
else:
print("该年份不为闰年。")
yeardeside(year) #此year为⽤户输⼊的数值。
#第4章第2题计算两个整数之间的最⼤公约数和最⼩公倍数
#最⼤公约数的计算⽅法:辗转相除法
#最⼩公倍数的计算⽅法:两个数的乘积除以最⼤公约数
#涉及到取余两个数之中较⼩的那⼀个再除涉及到判断的情况直到最后余零这时的被除数就是最⼤公约数
a = eval(input("请输⼊⼀个较⼤的数:"))
b = eval(input("请输⼊⼀个较⼩的数:"))
c = b #保留b的值,因为b的值在循环的过程中会发⽣改变
d = a #保留a的值,因为a的值在循环的过程中会发⽣改变
while a%b !=0:
r = a%b
a = b
b = r
print("这两个数的最⼤公约数是:{}".format(b))
print("这两个数的最⼩公倍数是:{}".format((d*c)/b)) #除法产⽣的结果为浮点数
#第4章第3题统计不同字符的个数,包括中英⽂字符,数字,空格和其他字符的个数
#我感觉这题有点复杂,拿到要⼀个字符⼀个字符的判断嘛
#不⽤,我看到的⽹上的解决思路是这样的,以输⼊的那个序列为基准,在⾥⾯则在原来的基础上加⼀,不在⾥⾯,则以⾃⼰为第⼀个。#res 相当于是定义了⼀个字典,按照键去取值,默认值为0,存在则取出相应的值(两种解决思路)
#能不能按照值的⼤⼩进⾏排序输出
sen = input("请输⼊⼀⾏字符:")
def count(sen):
res = {} #定义⼀个空的字典集
res = {} #定义⼀个空的字典集
for i in sen: #逐个遍历sen中的元素
res[i]=(i,0)+1
#对单词的统计值进⾏由⾼到低的排序(⾃然⽽然会想到的事情)
items = list(res.items()) #把没有顺序的字典转换为有顺序的列表
items.sort(key = lambda x:x[1],reverse=True) #排序
return items  #缩进注意
count(sen)
#书上这块输⼊列表数量最多的前⼗个,也值得我去学习,这串代码。
for i in range(10):
word,count = items[i] #返回列表第⼀个元素,为⼀个键值对的元组
print(word,count) #输出的格式可适当调整。⼀⾏⼀⾏输出
#第4章第4题 #主要考察异常处理的处理⽅式
try:
num = eval(input("请输⼊⼀个整数:"))
except:
print("输⼊错误!请输⼊⼀个整数。")
continue #结束本次循环,继续下⼀次循环
#第4章第5题 #⽺车门游戏
#使⽤random库对于这个随机事件进⾏预测
#预测参赛者改变选择和坚持选择获胜的概率
#主持⼈开启另⼀扇门,露出门后⼭⽺,更不更换(即⾃⼰所指的是汽车还是⼭⽺之间赌
from random import * #引⼊random库,随机⽣成⼀组数(这组数的性质由不同的函数所决定)a = randint(1,3) #⽤户随机指出另⼀扇门  #固定设定1,2为⽺ 3为车
if a == 3:
rate = 1/3
print("不改变选择获胜的概率为{}".format(rate))
else:
信息化系统架构师
rate = 2/3
print("改变选择获胜的概率为{}".format(rate))
#这道题实际上就是通过多次抽样得到胜利的次数,⽽概率就是从抽样这个过程中到规律from random import *
x=randint(5000,10000) #抽样的次数
change=0
nochange=0
for i in range(1,x+1):
a=randrange(1,4) #汽车所在的位置
b=randrange(1,4)  #⽤户选的位置
if a==b:
nochange=nochange+1  #不改变计数为1,只有不改变才能获胜
asp经典源码
else:
change=change+1 #改变计数为1,改变才能获胜
print("不更改选择得到汽车的概率为{}".format(nochange/x))
print("更改选择得到汽车的概率为{}".format(change/x))
#第5章第2题整数异常处理质数为true,否为false
def intprocess(num):
#判断整数类型,异常判断
if(type(num) == type(1)):
for i in range(2,num):
if num%i == 0: #如果存在可以整除的其余项⽬,则不予考虑
return False
else:
i == num-1
i == num-1
return True
else:
print("输⼊的参数不为整数!重新输⼊!")
#第5章第3题统计传⼊字符串中的字母,数字,空格以及其他字符的个数
def count(str):
res = {}
for i in str:
res[i]=(i,0)+1
items = list(res.items())
items.sort(key = lambda x:x[1],reverse=True) #排序
return items  #缩进注意
#第5章第4题打印200以内的所有素数
#素数:除了1和它本⾝再没有其他因⼦的数
def sushu(num):
a = [1]
for i in range(1,num+1):
for j in range(2,i):
if i%j == 0 :  #如果存在可以整除的其余项⽬,则不予考虑
break
else:
if j == i-1: #遍历到最后的,还是没有遇到整除的
a.append(i)
#print("{0}以内的素数为:{1}".format(num," ".join(str(a))))
#str(a)这⾥我的还是很不准确
#这也就是上次出错的地⽅ #似曾相识,我是如何解决的呢?
#⾸先把列表中的元素⼀点点取出来,然后转换为字符串,然后再⽤join拼接
ls2 = [str(i) for i in a] #这⼀句代码特别重要,把数列中的数值全部转换为字符串
b = " ".join(ls2)
print(b)
#第5章第5题斐波那契数列
#第3位数是第1次循环的b
#第4位数是第2次循环的b
#第n位数是第n-2次循环的b
#所以最⼤到第n-2次循环,n-2+1=n-1
def facci(n):
a = 1
b = 1
for i in range(1,n-1):
c = b
b = a+b
a = c
return b
#第6章第1题:英⽂字符频率统计(就是可能⼀⼤段序列中有各种字符,仅仅是统计英⽂字符出现频率的统计)
#这让我想到了⽤perl语⾔处理碱基序列这块(还是很神奇的啊)
#它这个是在特定的范围内去统计频率
#⾸先定义⼀个字典,key =abc~Z,value初始化为零。如果getkey能够到,则value加⼀。
def EngCount(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)
for i in ls:php手机版一键安装>做网站大概多少钱
(i,"*") == "*": #这个判断语句有问题 #后来修正了看出了问题所在
break
break
else:
va[i]=va.get(i)+1
items = list(va.items())
items.sort(key = lambda x:x[1],reverse=True) #排序
return items
#在逐个遍历的过程中
EngCount("xshaxvhasvchasvhbxsabhsv")
#第6章第2题统计中⽂字符出现的频率(想把⼤叔的诗作弄下来,然后去统计字频,那⼀定很有趣)
import os
os.chdir("E:\\S-code\\Pythoncode")  #设定新的⼯作⽬录,⽂件要存放在这个⼯作⽬录下os.getcwd() #查看现在的⼯作⽬录
'E:\\S-code\\Pythoncode' #显⽰的是我们最新设定的,就代表设定成功
f = open("","rt") #为⽂件名,rt为读取⽂件的⽅式
s = f.readlines() #读取⽂件,输出结果为⼀个列表
pose = {}
for line in s:
ls = list(line)
for i in ls:
if i in ",。、":
break
else:
pose[i]= (i,0)+1
items = list(pose.items())
items.sort(key = lambda x:x[1],reverse=True)
for i in range(1,11):
word,count = items[i]
print("{0:<10}{1:>5}".format(word,count))
f.close()
#这⾥虽然能够对出现的中⽂字符,但是如果能够出现常⽤的词语的搭配就更好了
#词云
import jieba
f = open("","r")strife
txt = f.read()
f.close()
words = jieba.lcut(txt)
counts={}
for word in words:
if len(word)==1:
continue
else:
counts[word]=(word,0)+1
items = list(counts.items())
items.sort(key = lambda x:x[1],reverse=True)
for i in range(1,11):
word,count = items[i]
print("{0:<10}{1:>5}".format(word,count))
#第6章第3题随机密码的⽣成
import random
codelist = ["A","a","B","b","C","c","D","d","E","e",1,2,3,4,5,6,7,8,9,0]
for i in range(1,11):
secret = random.sample(codelist,8)
#把列表变成字符串
new =[str(i) for i in sectet] #这⼀句代码特别重要,把数列中的数值全部转换为字符串
print("{}".format("".join(new)))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。