Python计算机二级编程题真题及考点总结【纯干货】(下篇)


声明:例题均来源于网络,仅供学习参考,若涉侵权请联系删除

附上篇链接: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做毕设、接小项目,文中有不足的地方还请各位大佬批评指正(〃‘▽’〃)!

猜你喜欢

转载自blog.csdn.net/weixin_44636369/article/details/119986676
今日推荐