声明:例题均来源于网络,仅供学习参考,若涉侵权请联系删除
附上篇链接:Python计算机二级编程题真题及考点总结【纯干货】(上篇).
一、前言
? ? ? ?首先再次强调一下,Python二级的编程题包括:基本操作题、简单应用题与综合应用题三大类,上篇内容主要包括基本操作题真题+考点总结,本篇接着上一篇继续采用真题+总结的形式,先列举考试真题模拟软件中若干简单应用题与综合应用题的真题,再针对相应考点进行总结(尽可能只总结考点内容,减少记忆量)。
二、编程题详解
2.1 简单应用题
? ? ? ?总体而言,该类题型的难度介于基本操作题和综合应用题之间,考题内容也有迹可循,只要掌握一定的Python基础,就基本能够拿下所有分数(10+15)分。下面列举若干份考试真题供小伙伴们练习,后面会再针对遇到的重要知识点进行总结,巩固加深对考点的记忆~
2.1.1 简单应用题-真题
- 例1:使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个边长为100的三角形,效果如下图所示。
// 考生文件初始代码
import turtle
for i in range(_____):
turtle.seth(_____)
________(100)
// 参考答案
import turtle
for i in range(3):
turtle.seth(i*120)
turtle.fd(100)
- 例2:输入一组水果名称并以空格分隔。示例如下:
? ? ? ? 苹果? 芒果? 草莓? 芒果? 苹果? 草莓? 芒果? 香蕉? 芒果? 草莓 ? ? ? ? 统计各类型数量,按数量多到少的顺序输出类型及对应数量,以英文冒号分隔,每类型一行。输出结果保存在考生文件夹下,命名为“PY202.txt”。输出参考如下: 芒果:4 草莓:3 苹果:2 香蕉:1
// 考生文件初始代码
fo = open("PY202.txt","w")
txt = input("请输入类型序列: ")
...
d = {}
....
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in ls:
fo.write("{}:{}\n".format(k[0], k[1]))
fo.close()
// 参考答案
fo = open("PY202.txt","w")
txt = input("请输入类型序列: ")
fruits = txt.split(" ")
d = {}
for fruit in fruits:
d[fruit] = d.get(fruit,0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in ls:
fo.write("{}:{}\n".format(k[0], k[1]))
fo.close()
- 例3:使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个正方形,边长为200像素,效果如下图所示。
// 考生文件初始代码
import turtle
d = 0
for i in range(_____):
turtle.fd(_____)
d = _____
turtle.seth(d)
// 参考答案
import turtle
d = 0
for i in range(4):
turtle.fd(200)
d = d + 90
turtle.seth(d)
- 例4:键盘输入课程名称及考分,信息间采用空格分隔,每个课程一行,空行回车结束录入,示例格式如下:
数学? 98 语文? 89 英语? 94 物理? 74 科学? 87 ? ? ? ? 屏幕输出得分最高的课程及成绩,得分最低的课程及成绩,以及平均分(保留2位小数),输出保存在考生文件夹下,命名为“PY202.txt ”。格式如下: ? ? ? ? 最高分课程是数学98,最低分课程是物理74.平均分是88.40
// 考生文件初始代码
#请在...处使用一行或多行代码替换
#请在______处使用一行代码替换
fo = open("PY202.txt","w")
data = input("请输入课程名及对应的成绩:") # 课程名 考分
...
while data:
...
data = input("请输入课程名及对应的成绩:")
...
fo.write("最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}".format(______))
fo.close()
// 参考答案
fo = open("PY202.txt","w")
data = input("请输入课程名及对应的成绩:") # 课程名 考分
score_dict = {}
while data:
course, score = data.split(' ')
score_dict[course] = eval(score)
data = input("请输入课程名及对应的成绩:")
course_list = sorted(list(score_dict.values()))
max_score, min_score = course_list[-1], course_list[0]
aver_score = sum(course_list) / len(course_list)
max_course, min_course = '', ''
for item in score_dict.items():
if item[1] == max_score:
max_course = item[0]
if item[1] == min_score:
min_course = item[0]
fo.write("最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}".format(
max_course, max_score, min_course, min_score, aver_score))
fo.close()
- 例5:使用turtle库的turtle.fd()函数和turtle.left()函数绘制一个边长为200的太阳花,效果如下图所示。
// 考生文件初始代码
import turtle
turtle.color(_____,______)
turtle._____
for i in range(36):
turtle.fd(_____)
turtle.left(_____)
turtle.end_fill()
// 参考答案
import turtle
turtle.color("red","yellow")
turtle.begin_fill()
for i in range(36):
turtle.fd(200)
turtle.left(170)
turtle.end_fill()
- 例6:编写程序,实现将列表ls =[51,33,54,56,67.88,431,111,141,72,45,2.,78,13,15,5,69]中的素数去除,并输出去除素数后列表的元素个数,结果保存在考生文件夹下,命名为“PY202.txt”。请结合程序整体框架,补充横线处代码。
// 考生文件初始代码
fo = open("PY202.txt","w")
def prime(num):
......#可以是多行代码
ls = [51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]
lis = []
for i in ls:
if prime(i) == False:
______#一行代码
fo.write(">>>{},列表长度为{}".format(_____,______))
fo.close()
// 参考答案
fo = open("PY202.txt","w")
def prime(num):
for i in range(2,num):
if num%i == 0:
return False
return True
ls = [51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]
lis = []
for i in ls:
if prime(i) == False:
lis.append(i)
fo.write(">>>{},列表长度为{}".format(lis,len(lis)))
fo.close()
- 例7:使用turtle库的turtle.color()函数和turtle.circle()函数绘制一个黄底黑边的圆形,半径为50。效果如下图。
// 考生文件初始代码
import turtle
turtle.color('black','yellow')
turtle._____
turtle.circle(_____)
turtle._____
// 参考答案
import turtle
turtle.color('black','yellow')
turtle.begin_fill()
turtle.circle(50)
turtle.end_fill()
- 例8:闰年分为普通闰年和世纪闰年。普通闰年是指能被4整除但不能被100整除的年份,世纪闰年是指能被400整除的年份。请编写一个函数,能够实现以下功能:输入一个年份,能够判断这个年份是否为闰年,并且能打印在屏幕上。
例如:输入1900,输出为1900年不是闰年。输入2004,输出为2004年是闰年。输入、2000,输出为2000年是间年。
// 考生文件初始代码
#请在...处使用一行或多行代码替换
def judge_year(year):
...
year = eval(input("请输入年份:"))
...
// 参考答案
def judge_year(year):
if (year%4 == 0 and year%100 != 0) or year % 400 == 0 :
print(year,"年是闰年")
else:
print(year,"年不是闰年")
year = eval(input("请输入年份:"))
judge_year(year)
- 例9:使用turtle库的turtle.circle()函数、turtle.seth()函数绘制一个四瓣花图形,效果如下图所示。
// 考生文件初始代码
import turtle
for i in range(_____):
turtle.seth(_____)
turtle.circle(50,90)
turtle.seth(_____)
turtle.circle(50,90)
turtle._____
// 参考答案
import turtle
for i in range(4):
turtle.seth(90*(i+1))
turtle.circle(50,90)
turtle.seth(-90+i*90)
turtle.circle(50,90)
turtle.hideturtle()
- 例10:使用Python的异常处理结构编写对数计算,要求底数大于0且不等于1,真数大于0,且输入的必须为实数,否则抛出对应的异常。
// 考生文件初始代码
#请在...处使用一行或多行代码替换
#请在___处使用一行代码替换
_____
try:
a = eval(input('请输入底数:'))
b = eval(input('请输入真数:'))
c = _____
except ValueError:
...
except ZeroDivisionError:
print('底数不能为1')
except NameError:
print('输入必须为实数')
else:
print(c)
// 参考答案
import math
try:
a = eval(input('请输入底数:'))
b = eval(input('请输入真数:'))
c = math.log(b, a)
except ValueError:
if a <= 0 and b > 0:
print('底数小于等于0')
elif b <= 0 and a >0:
print('真数小于等于0')
elif a <= 0 and b <= 0:
print('真数和底数都小于等于0')
except ZeroDivisionError:
print('底数不能为1')
except NameError:
print('输入必须为实数')
else:
print(c)
- 例11:使用循环输出由星号*组成的实心菱形图案。
// 考生文件初始代码
#请在...处使用一行或多行代码替换
for i in range(0,4):
...
for i in range(0,4):
...
// 参考答案
for i in range(0,4):
for y in range(0,4-i):
print(" ",end="")
print('* ' * i)
for i in range(0,4):
for x in range(0,i):
print(" ", end="")
print('* ' * (4-i))
- 例12:使用turtle库的fd()函数和right()函数绘制一个边长为100像素的正六边形,再用circle()函数绘制半径为60像素的红色圆内接正六边形。效果图如下图所示。
// 考生文件初始代码
from turtle import *
pensize(5)
for i in range(6):
fd(_____)
right(_____)
color("red")
circle(60,_____)
// 参考答案
from turtle import *
pensize(5)
for i in range(6):
fd(100)
right(60)
color("red")
circle(60,steps=6)
2.1.2 简单应用题-考点总结
考点一:turtle库绘图
? ? ? ?从上面给出的6套真题可以看出,简单应用题部分的第一题有极大概率为使用turtle库函数绘制某一特定图像,下面对二级考试中出现频率较高的一些函数进行总结(未提到的其他turtle函数可以不去记忆,感兴趣可以看一下这篇文章Python绘图Turtle库详解),同样建议要自己在IDLE上面写一下代码感受各个函数的功能加深印象~ ? ? ? ?另外提一下,如果代码最开始有from turtle import *代码,则后面可以使用turtle中的各个函数(如:例12),需要进一步了解的可以自行去搜索学习。
考点二:数据类型处理相关
? ? ? ?该部分内容属于Python基础重点知识,下面脑图中列出的是在编程题当中出现频率极大的一些函数,在备考时间有限的前提下需要先掌握好以下这些内容~
2.2 综合应用题
? ? ? ?纵观刷过的十余套考试真题,综合应用题作为分值最高的一道题(20分),对初学编程的小白来说往往具有一定的难度,其涉及的考点也十分宽泛。但只要基础扎实,能够形成一定的解题思路,还是很有机会能够完成该题拿到分数。最后我总结了这部分的一个必考考点:文件操作~(注意!!!虽然相较于其他编程题难度较大,但是这20分一般至少会分成2-3小问,小伙伴们在尽可能的前提下应争取多拿些分数(????)ノ""")
- 例13:给出文件"论语.txt",其内容采用逐句“原文"与逐句“注释"相结合,通过【原文】标记《论语》原文内容,通过【注释】标记《论语》注释内容,具体文件格式参考“论语.txt"文件(该题原本有输出示例文件,此处不给出,可直接参看代码)。
? ? ? ?问题1(10分):在PY301-1.py文件中修改代码,提取“论语.txt"文件中的原文内容,输出保存到考生文件夹下,文件名为“论语-原文.txt”。具体要求:仅保留“论语.txt"文件中所有【原文】标签下面的内容,不保留标签,并去掉每行行首空格及行尾空格,无空行。原文小括号及内部数字是源文件中注释项的标记,请保留。 ? ? ? ?问题2(10分):在PY301-2.py文件中修改代码,对“论语-原文.txt′或“论语.txt"文件进一步提纯,去掉每行文字中所有小括号及内部数字,保存为“论语-提纯原文.txt"文件。
"论语.txt"文件部分示例如下:
【原文】
子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”
【注释】
(1)子:中国古代对于有地位、有学问的男子的尊称,有时也泛称男子。《论语》书中“子曰”的子,都是指孔子而言。
(2)学:孔子在这里所讲的“学”,主要是指学习西周的礼、乐、诗、书等传统文化典籍。
(3)时习:在周秦时代,“时”字用作副词,意为“在一定的时候”或者“在适当的时候”。但朱熹在《论语集注》一书中把“时”解释为“时常”。“习”,指演习礼、乐;复习诗、书。也含有温习、实习、练习的意思。
(4)说:音yuè,同悦,愉快、高兴的意思。
(5)有朋:一本作“友朋”。旧注说,“同门曰朋”,即同在一位老师门下学习的叫朋,也就是志同道合的人。
(6)乐:与说有所区别。旧注说,悦在内心,乐则见于外。
(7)人不知:此句不完整,没有说出人不知道什么。缺少宾语。一般而言,知,是了解的意思。人不知,是说别人不了解自己。
(8)愠:音yùn,恼怒,怨恨。
(9)君子:《论语》书中的君子,有时指有德者,有时指有位者。此处指孔子理想中具有高尚人格的人。
// 考生文件初始代码 PY301-1
fi = open("论语.txt", ______)
fo = open("论语-原文.txt", ______)
...
for line in fi:
...
fo.write(line.lstrip())
...
// 考生文件初始代码 PY301-2
fi = open("论语-原文.txt", ______)
fo = open("论语-提纯原文.txt", ______)
for line in fi:
...
line=line.replace(______)
...
// 参考答案PY301-1
fi = open("论语.txt", "r")
fo = open("论语-原文.txt", "w")
flag = False
for line in fi:
if "【" in line:
flag = False
if "【原文】" in line:
flag = True
continue
if flag == True:
fo.write(line.lstrip())
fi.close()
fo.close()
// 参考答案PY301-2
fi = open("论语-原文.txt", 'r')
fo = open("论语-提纯原文.txt", 'w')
for line in fi:
for i in range(1,23):
line = line.replace("({})".format(i),"")
fo.write(line)
fi.close()
fo.close()
- 例14:score.csv文件中存储了某学生在一季度同一学科的月考成绩,求每一门学科在三个月中的平均成绩,将结果输出在考生文件夹“avg-score.txt”下。参考格式:
语文:90.67 数学:88.00 英语:85.67 物理:67.33 科学:81.00
// 考生文件初始代码
fi = open("score.csv","r")
fo = open("avg-score.txt","w")
ls = []
x = []
sum = 0
...
fi.close()
fo.close()
// 参考答案
fi = open("score.csv","r")
fo = open("avg-score.txt","w")
ls = []
x = []
sum = 0
for row in fi:
ls.append(row.strip("\n").split(","))
for line in ls[1:]:
for i in line[1:]:
sum = int(i) +sum
avg = sum/3
x.append(avg)
sum = 0
fo.write("语文:{:.2f}\n数学:{:.2f}\n英语:{:.2f}\n物理:{:.2f}\n科学:{:.2f}".format(x[0],x[1],x[2],x[3],x[4]))
fi.close()
fo.close()
- 例15:设计一个猜字母的程序,程序随机给出26个小写字母中的一个,答题者输入猜测的字母,若输入的不是26个小写字母之一,让用户重新输入;若字母在答案之前或之后,程序给出相应正确提示,若答错5 (含)次,则答题失败并退出游戏;若回答正确,程序输出回答次数并退出游戏。
// 考生文件初始代码
import _____
letter_list = ['a', 'b', 'c', 'd', 'e', 'f','g',
'h', 'i', 'j', 'k', 'l','m', 'n',
'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z']
letter = letter_list[random._____(0, 25)]
count = 0
while True:
...
// 参考答案
import random
letter_list = ['a', 'b', 'c', 'd', 'e', 'f','g',
'h', 'i', 'j', 'k', 'l','m', 'n',
'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z']
letter = letter_list[random.randint(0, 25)]
count = 0
while True:
letter_input = input('请输入26个小写英文字母中的任一个:')
count +=1
if letter_input not in letter_list:
print('请重新输入字母')
else:
if count > 5:
print('猜测超过5次,答题失败')
break
else:
if letter_input == letter:
print('恭喜你答对了,总共猜了{}次'.format(count))
break
elif letter_input > letter:
print('你输入的字母排在该字母之后')
elif letter_input < letter:
print('你输入的字母排在该字母之前')
else:
print('未知错误')
- 例16:考生文件夹下的文件data.txt是教育部中国大学MOOC平台的某个HTML页面源文件,里面包含了我国参与MOOC建设的一批大学或机构列表。
? ? 问题1:请编写程序,从data.txt中提取大学或机构名称列表,将结果写入文件univ.txt,每行一个大学或机构名称,按照大学或机构在data.txt出现的先后顺序输出,样例如下: … 北京理工大学 … 北京师范大学 … 提示:所有大学名称在data.txt文件中以alt="北京理工大学"形式存在。在考生文件夹下给出了程序框架文件PY301-1.py,补充代码完成程序(10分) 以下给出了data.txt文件中的某个关键元素文本(编写代码的关键): < a class=“u-usity f-fl” href=“https://www.icourse163.org/university/PKU” target=“blank"> < img class="" id="" src="%E5%A4%A7%E5%AD%A6%E5%88%97%E8%A1%A8%E4%B8%AD%E5%9B%BD%E5%A4%A7%E5%AD%A6MOOC(%E6%85%95%E8%AF%BE)_files/370D4ADD98FE6993DE1970DB0060ACCA.png” alt=“北京大学” width=“164” height=“60”> < /a> ? ?问题2:请编写程序,从univ. txt文件中提取大学名称,大学名称以出现大学或学院”字样为参考,但不包括“大学生”等字样,将所有大学名称在屏幕上输出,大学各行之间没有空行,最后给出名称中包含“大学和学院的名称数量,同时包含“大学”和“学院”的名称以结尾的词作为其类型。样例如下(样例中数量不是真实结果) : … 北京理工大学 … 长沙师范学院 … 包含大学的名称数量是10 包含学院的名称数量是10 在考生文件夹下给出了程序框架文件PY301-2.py,补充代码完成程序(10分)
// 考生文件初始代码PY301-1.py
____________ # 此处可多行
f = open("univ.txt", "w")
____________ # 此处可多行
f.close()
// 考生文件初始代码PY301-2.py
f = open("univ.txt", "r")
n = 0 # 包含大学的名称数量
____________ # 此处可多行
f.close()
print("包含大学的名称数量是{}".format(n))
// 参考答案PY301-1.py
fi = open("data.txt", "r") # 此处可多行
f = open("univ.txt", "w")
L = [] # 此处可多行
lines = fi.readlines()
for line in lines:
if 'alt=' in line:
begin = line.find('alt=')
end = line.find('"', begin + 5)
L.append(line[begin + 5:end])
for i in L:
f.write(i + '\n')
fi.close()
f.close()
// 参考答案PY301-2.py
f = open("univ.txt", "r")
n = 0 # 包含大学的名称数量
m = 0 # 此处可多行
L = []
lines = f.readlines()
for line in lines:
line=line.strip('\n')
if "学院" in line and '大学'in line and '大学生' not in line:
L.append(line)
if line[-2:]=="学院":
m += 1
else:
n+=1
continue
if "学院" in line:
L.append(line)
m += 1
if "大学" in line and "大学生" not in line:
L.append(line)
n += 1
for i in L:
print(i)
f.close()
print("包含大学的名称数量是{}".format(n))
print("包含学院的名称数量是{}".format(m))
考点三:文件操作
? ? ? ?文件操作的知识点是综合题必考考点,相信各位小伙伴从上面的这些例题中已经可以发现,综合应用题一般都会给出某.txt或.csv文件,然后要求读取文件并对读取文本(注意:一般都是文本)进行相应的处理后,最后输出结果文件。因此,可以认为这道题虽然考点涉及面较广,但是题目都是围绕文件处理展开,下面对部分重点考点进行总结: ? ? ? ?另外,这部由于与文本(字符串)处理密切相关,故而关于字符串的知识点需要大家重点掌握,这边再强调一下两个关于字符串的重点函数:str.split()和str.strip() 。
三、编程题考点汇总【精华】
? ? ? ?划重点!!!下图为个人总结的所有编程题考点脑图供各位小伙伴学习参考,里面应该说基本涵盖了三类编程题的所有重要考点,如果能熟练掌握,编程题部分拿到50分左右基本不成问题!!因上传图片大小限制若需要高清图片的小伙伴可以随时滴滴我(^_?)☆~
四、小结
? ? ? ?有关于本篇文章的相关问题或者有Python二级题目不理解的小伙伴可以随时评论or私信我,看到后我都会逐一回复哒q(≧▽≦q)? ? ? ?PS:今年考完Python二级后才逐渐用Python做毕设、接小项目,文中有不足的地方还请各位大佬批评指正! 码字不易,欢迎一键三连(〃‘▽’〃)
|