网络知识 娱乐 Python计算机二级编程题真题及考点总结(上篇)

Python计算机二级编程题真题及考点总结(上篇)

文章目录

  • 一、前言
  • 二、考纲/考试方式
  • 三、编程题详解
    • 3.1 基本操作题-真题
    • 3.2 基本操作题-考点总结
      • 3.2.1 考点一:基本输入输出函数
      • 3.2.2 考点二、三:程序的控制结构和数据类型
      • 3.2.3 考点四:Python计算生态
      • 3.2.4 考点五:Python文件操作
    • 3.3 简单应用题与综合应用题
  • 四、小结

声明:例题均来源于网络,仅供学习参考,若涉侵权请联系删除
附下篇链接: Python计算机二级编程题真题及考点总结【纯干货】(下篇).

一、前言

       相较于各类Python基础教程和二级经验分享类文章,个人认为如果只是想要考取计算机二级证书的话,最快且有效的方法应是在明晰考纲的前提下有针对性的进行学习,达到以最短时间考取证书的目的。
       因此除真题外,本篇重点在于总结Python二级考试中的编程题(占60分)的考查内容及知识点总结,让Python小白能在一周内掌握绝大多数编程题的解题方法,顺利考取证书,为未来应聘岗位添砖加瓦!
非计算机技术专业的工科狗一枚~

二、考纲/考试方式

       在教育部考试中心每年发布的参考教材计算机等级考试官网(最新考纲链接)上可以查到考查范围。顺便提一下考纲中的大部分内容都十分基础,可以给初学者用来入门Python,如果有小伙伴刚好想要入门这门语言的话,顺带考个证书会是个不错的选择~下面详细介绍一下考试题型和考试环境:

  • 考试题型:单选题40分、操作题60分;
  • 其中单选题有10分是公共基础题,涉及计算机基础、数据结构与算法等,该部分可以参考:二级公共基础考点整理。另外30分则是Python基础相关的题目,因此如果有小伙伴已经临近考试且还未看过公共基础部分的内容(相对较多),个人建议可以放弃这10分(随缘),重点突破Python!
  • 操作题一共有六大题,包括3道基本操作题(各5分)、2道简单应用题(分别10、15分)和一道综合应用题(20分)
  • 考试环境:win7系统,python3.5.2及以上的IDLE开发环境下,由于Python自带的IDLE缺少自动补全一些关键字等功能,故不建议备考时使用诸如Pycharm等其他IDE进行编程练习,关于IDLE的使用可以看Python IDLE入门了解。

三、编程题详解

       因篇幅限制,本文将先针对基本操作题进行总结与讲解,剩余的2道简单应用题和一道综合应用题将在下篇中进行详细介绍。例题均来源于网络某真题模拟软件(实践证明考试时确实遇到不少原题!!!),故相信本次总结也大概率能涉及大部分考试题目

3.1 基本操作题-真题

       基本操作题这部分内容考查范围较广,基本涵盖了整个考纲当中各大章节的知识,需要一定的积累(刷题),一共3道题各5分,题目只需要考生补充部分代码即可,问题的描述如下:“考生文件夹存在一个文件PY101.py,请写代码替换横线,不修改其他代码,实现以下功能:xxx问题”。
       以下为摘自近10套真题试卷的题目及答案(题目仅供学习参考,请勿商用!):

  • 例1:键盘输入字符串s,按要求把s输出到屏幕,格式要求:宽度为30个字符,星号字符*填充,居中对齐。如果输入字符串超过30位,则全部输出。
// 考生文件初始代码
s = input("请输入一个字符串:")
print("{______}".format(s))

// 参考答案
s = input("请输入一个字符串:")
print("{:*^30}".format(s))
  • 例2:根据斐波那契数列的定义,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2),输出不大于50的序列元素。例如:屏幕输出实例为:0.1.1.2.3…(略)
// 考生文件初始代码
a, b = 0, 1
while ______:
   print(a, end=',')
   a, b = ______

// 参考答案
a, b = 0, 1
while a <= 50:
   print(a, end=',')
   a, b = b, a+b
  • 例3:键盘输入一句话,用jieba分词后,将切分的词组按照在原话中逆序输出到屏幕上,词组中间没有空格。示例如下:   输入:我爱老师   输出:老师爱我
// 考生文件初始代码
import jieba
txt = input("请输入一段中文文本:")
______
for i in ls[::-1]:
   ______

// 参考答案
import jieba
txt = input("请输入一段中文文本:")
ls = jieba.lcut(txt)
for i in ls[::-1]:
   print(i,end="")
  • 例4:键盘输入正整数n,把n输出到屏幕,格式要求:宽度为30个字符,@填充,右对齐,带千位分隔符。若输入正整数超30位,则真实长度输出。例:键盘输入正整数n为5201314,屏幕输出@@@@@@@@@@@@@@@@@@@@@5,201,314
// 考生文件初始代码
n = eval(input("请输入正整数:"))
print("{______}".format(n))

// 参考答案
n = eval(input("请输入正整数:"))
print("{0:@>30,}".format(n))
  • 例5:a、b是两列表变量,列表a为[11,3.8]已给定,键盘输入列表b,计算a中元素与b中对应元素乘积的累加和。例:键盘输入列表b为[4.,5.2],则屏幕输出计算结果为75
// 考生文件初始代码
a = [11,3,8]
b =  eval(input()) #例如:[4,5,2]
______
for i in ______:
   s += a[i]*b[i]
print(s)

// 参考答案
a = [11, 3, 8]
b = eval(input())
s = 0
for i in range(3):
   s += a[i] * b[i]
print(s)
  • 例6:以255为随机数种子,随机生成5个在1(含)到50(含)之间的随机整数,每个随机数后跟随一个空格进行分隔,屏幕输出这5个随机数。
// 考生文件初始代码
import random
______
for i in range(______):
   print(______, end=" ")

// 参考答案
import random
random.seed(255)
for i in range(5):
   print(random.randint(1, 50), end=" ")
  • 例7:从键盘输入一个1~26之间的数字,对应于英文大写字母表中的索引,在屏幕上显示输出对应的英文字母。示例如下:请输入一个数字:1 输出大写字母:A
// 考生文件初始代码
s = eval(input("请输入一个数字:"))
ls = [0]
for i in range(65,91):
   ls.append(chr(_____))
print("输出大写字母:{}".format(_____))

// 参考答案
s = eval(input("请输入一个数字:"))
ls = [0]
for i in range(65,91):
   ls.append(chr(i))
print("输出大写字母:{}".format(ls[s]))
  • 例8:从键盘输入一个有十进制的数字保存在变量s中,转换为二进制数输出显示在屏幕上,示例如下:请输入一个十进制数:25 转换成二进制数是:11001
// 考生文件初始代码
s = input("请输入一个十进制数:")
num = _____
print("转换成二进制数是:{_____}".format(_____))

// 参考答案
s = input("请输入一个十进制数:")
num = int(s)
print("转换成二进制数是:{:b}".format(num))
  • 例9:从键盘输入一个中文字符串变量s,内部包含中文逗号和句号。计算字符串s中的中文词语数。示例如下: 请输入一个中文字符串,包含标点符号:问君能有几多愁?恰似一江春水向东流。中文词语数:9
// 考生文件初始代码
import _____
s = input("请输入一个中文字符串,包含标点符号:")
m =_____
print("中文词语数:{}".format(_____))

// 参考答案
import jieba
s = input("请输入一个中文字符串,包含标点符号:")
m = jieba.lcut(s)
print("中文词语数:{}".format(len(m)))
  • 例10:请将列表lis内的重复元素删除,并输出。例如:若列表为[2,8,3,6,5,3,8],输出为[8,2,3,5,6]
// 考生文件初始代码
lis = [2,8,3,6,5,3,8]
new_lis = _____
print(new_lis)

// 参考答案
lis = [2,8,3,6,5,3,8]
new_lis = list(set(lis))
print(new_lis)
  • 例11:输入一个水果名,判断它是否在列表lis中,并输出判断结果。例如:输入:猕猴桃 输出:猕猴桃在列表lis中
// 考生文件初始代码
fruit = input('输入水果:')
lis = ['苹果','哈密瓜','橘子','猕猴桃','杨梅','西瓜']
if _____:
   _____
else:
   _____

// 参考答案
fruit = input('输入水果:')
lis = ['苹果','哈密瓜','橘子','猕猴桃','杨梅','西瓜']
if fruit in lis:
   print(fruit + '在列表lis中')
else:
   print(fruit + '不在列表lis中')
  • 例12:编写一个函数,使之能够实现字符串的反转。将字符串"goodstudy"输入到函数中,运行并输出结果。
// 考生文件初始代码
def str_change(str) :
   return _____
str = input("输入字符串:")
print(str_change(_____))

// 参考答案
def str_change(str) :
   return str[::-1]
str = input("输入字符串:")
print(str_change(str))
  • 例13:循环获得用户输入,直至用户输入Y或者y字符退出程序。
// 考生文件初始代码
while _____:
   s = input("请输入信息:")
   if _____:
       break

// 参考答案
while True:
   s = input("请输入信息:")
   if s == "y" or s == "Y":
       break
  • 例14:使用calendar模块,从键盘输入年份,输出,当年的日历。
// 考生文件初始代码
import calendar
year = _____(input("请输入年份:"))
table = _____(year)
print(table)

// 参考答案
import calendar
year = int(input("请输入年份:"))
table = calendar.calendar(year)
print(table)
  • 例15:输入下面的绕口令,将其中出现的字符“兵”,全部替换为“将”,输出替换后的字符串。
    八百标兵奔北坡,炮兵并排北边跑,炮兵怕把标兵碰,标兵怕碰炮兵炮。八了百了标了兵了奔了北了坡,把了标了兵了碰,标了兵了怕了碰了炮了兵了炮。
// 考生文件初始代码
s = input("请输入绕口令:")
print(s._____("兵","将"))

// 参考答案
s = input("请输入绕口令:")
print(s.replace("兵","将"))
  • 例16:读取考生文件夹下的“poem.txt"的内容,去除空行和注释行后,以行为单位进行排序,并将结果输出到屏幕上。输出结果为:
    A Grain of Sand
    And a heaven in a wild flower,
    And eternity in an hour.
    Hold infinity in the palm of your hand,
    To see a world in a grain of sand,
// 考生文件夹中的poem.txt
#Title
A Grain of Sand
#William Blake
To see a world in a grain of sand,
And a heaven in a wild flower,
Hold infinity in the palm of your hand,
And eternity in an hour.
// 考生文件初始代码
_____
result = []
for line in _____:
   _____
   if len(line) != 0 and line[0] != "#":
       _____
result._____
for line in result:
   print(line)
f.close()

// 参考答案
f = open("poem.txt","r")
result = []
for line in f.readlines():
   line = line.strip()
   if len(line) != 0 and line[0] != "#":
       result.append(line)
result.sort()
for line in result:
   print(line)
f.close()
  • 例17:请在屏幕上输出以下杨辉三角形:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    1 6 15 20 15 6 1
    1 7 21 35 35 21 7 1
// 考生文件初始代码
a = []
for i in range(8):
   a.append([])
   for j in range(8):
       a[i].append(0)
for i in range(8):
   a[i][0] = 1
   _____
for i in range(2,8):
   for j in range(1,i):
       a[i][j] = _____
for i in range(8):
   for j in range(i+1):
       print("{:3d}".format(a[i][j]),end=" ")
   print()

// 参考答案
a = []
for i in range(8):
   a.append([])
   for j in range(8):
       a[i].append(0)
for i in range(8):
   a[i][0] = 1
   a[i][i] = 1
for i in range(2,8):
   for j in range(1,i):
       a[i][j] = a[i-1][j-1] + a[i-1][j]
for i in range(8):
   for j in range(i+1):
       print("{:3d}".format(a[i][j]),end=" ")
   print()
  • 例18:在一组单词中,查找出所有长度最长的单词,如果给定的一组单词是: “cad”“VB’” “Python” “MATLAB” "hello " "world"则输出结果为:
    the longest words are:
                         Python
                         MATLAB
// 考生文件初始代码
def proc(strings):                     
   m = 0
   lst = []
   for i in range(len(strings)):
       if len(strings[i]) _____ m:       
           m = len(strings[i])
   for i in range(len(strings)):
       if len(strings[i]) _____ m:       
           lst.append(strings[i])
   return _____       

strings = ['cad' ,'VB', 'Python', 'MATLAB', 'hello', 'world']
result = proc(strings)
print("the longest words are:")
for item in result:
   print("{: >25}".format(item))

// 参考答案
def proc(strings):                     
   m = 0
   lst = []
   for i in range(len(strings)):
       if len(strings[i]) > m:       
           m = len(strings[i])
   for i in range(len(strings)):
       if len(strings[i]) == m:       
           lst.append(strings[i])
   return lst       

strings = ['cad' ,'VB', 'Python', 'MATLAB', 'hello', 'world']
result = proc(strings)
print("the longest words are:")
for item in result:         
   print("{: >25}".format(item))
  • 例19:接收用户输入的一个小于20的正整数,在屏幕上逐行递增显示从01到该正整数,数字显示的宽度为2,不足位置补0,后面追加一个空格,然后显示’>'号,‘>’号的个数等于行首数字。例如: 输入:2
    输出:
    01>
    02>>
// 考生文件初始代码
n = input('请输入一个正整数:')
for i in range(____________):
   print('____________'.format(i, ____________))
// 参考答案
n = input('请输入一个正整数:')
for i in range(1,eval(n)+1):
   print('{:0>2} {}'.format(i, '>'*i))
  • 例20:让用户输入一串数字和字母混合的数据,然后统计其中数字和字母的个数,显示在屏幕上。例如: 输入:fda243fdw3 输出:数字个数:4,字母个数:6
// 考生文件初始代码
ns = input("请输入一串数据:")
dnum,dchr = ____________
for i in ns:
   if i.isnumeric():
       dnum += ____________
   elif i.isalpha():
       dchr += ____________
   else:
       pass
print('数字个数:{},字母个数:{}'.format(____________))

// 参考答案
ns = input("请输入一串数据:")
dnum,dchr = 0,0
for i in ns:
   if i.isnumeric():
       dnum += 1
   elif i.isalpha():
       dchr += 1
   else:
       pass
print('数字个数:{},字母个数:{}'.format(dnum,dchr))
  • 例21:将程序定义好的std列表里的姓名和成绩与已经定义好的模板拼成一段话,显示在屏幕上。例:亲爱的张三,你的考试成绩是英语90,数学87, Python语言95,总成绩272.特此通知…
// 考生文件初始代码
std = [['张三',90,87,95],['李四',83,80,87],['王五',73,57,55]]
modl = "亲爱的{}, 你的考试成绩是: 英语{}, 数学{}, Python语言{}, 总成绩{}.特此通知."

for st in std:
   cnt = ____________
   for i in range(____________):
       cnt += ____________
   print(modl.format(st[0],st[1],st[2],st[3],cnt))

// 参考答案
std = [['张三',90,87,95],['李四',83,80,87],['王五',73,57,55]]
modl = "亲爱的{}, 你的考试成绩是: 英语{}, 数学{}, Python语言{}, 总成绩{}.特此通知."

for st in std:
   cnt = 0
   for i in range(1,4):
       cnt += st[i]
   print(modl.format(st[0],st[1],st[2],st[3],cnt))
  • 例22:键盘输入正整数n,按要求把n输出到屏幕,格式要求:宽度为14个字符,数字中间对齐,不足部分用=填充。
    例如:键盘输入正整数n为1234,屏幕输出===== 1234 =====
// 考生文件初始代码
n = eval(input("请输入正整数:"))
print("{______}".format(n))

// 参考答案
n = eval(input("请输入正整数:"))
print("{:=^14}".format(n))
  • 例23:a和b是两个列表变量,列表a为[3,6,9]已给定,键盘输入列表b,将a列表的三个元素插入到b列表中对应的前三个元素的后面,并显示输出在屏幕上。
    例如:键盘输入列表b为[1,2,3],因此,屏幕输出计算结果为[1,3,2,6,3,9]
// 考生文件初始代码
a = [3,6,9]
b = eval(input()) #例如:[1,2,3]
j=1
for i in range(len(__(1)____)):
   b._____(2)_____
   j+= __(3)______
print(b)

// 参考答案
a = [3,6,9]
b = eval(input()) #例如:[1,2,3]
j=1
for i in range(len(a)):
   b.insert(j,a[i])
   j+= 2
print(b)
  • 例24:以100为随机数种子,随机生成3个在1(含)到9(含)之间的随机整数,计算这三个随机整数的立方和。
// 考生文件初始代码
import random
____________  # 此处可多行
s = 0  # 
____________  # 此处可多行
print(s)

// 参考答案
import random
random.seed(100)  # 此处可多行
s = 0  # 
for i in range(3):
   n = random.randint(1,9)  #此处可多行
   s += n**3 
print(s)

3.2 基本操作题-考点总结

       刷题后进行适当的总结对巩固知识点具有十分重要的意义,本部分内容将对包括以上真题(基本操作题)在内的十余套真题进行总结,凝练出一些在考试当中出现频率极高的考点。划重点!!下图为个人总结的编程题考点脑图–基本操作题部分供各位小伙伴学习参考,下篇会继续针对性的补充目前尚未总结到的内容。

3.2.1 考点一:基本输入输出函数

       该部分总结了在编程题当中遇到了几乎所有输入输出操作的相关函数及其使用方法,建议小伙伴的查看的同时能够自己打开IDLE敲下代码,实际体会一下使用这些函数的具体效果,有助于巩固记忆~

基本输入输出函数总结       

3.2.2 考点二、三:程序的控制结构和数据类型

       相信只要是学过其他语言的小伙伴对程序控制结构都比较熟悉,掌握起来也相对较简单,因此这边不做过多介绍。另外数据类型是学习Python的重中之重,如果有小伙伴看到这对Python常见的数据类型(字符串、列表、字典等)还不清楚的,需要去自行补充一下相关知识点,可以参考这篇文章学习Python基础(3)—八种数据类型.。
       下边两图仅针对小部分在基础编程题中出现的内容进行说明,下篇会针对这两个考点中一些比较常考的特殊知识点进行系统总结与补充~
程序的控制结构       
数据类型       

3.2.3 考点四:Python计算生态

       这部分也是二级当中考频很高的知识点,在选择题和后面的编程题中都会经常涉及,下图仅仅针对部分在基础编程题中出现的内容进行部分总结,后面在下篇当中会根据另外两类型的编程题中的常见考点进一步补充。
Python计算生态

       

3.2.4 考点五:Python文件操作

       由于这部分内容在最后的综合编程题当中出现频率极高,故放在下篇当中再介绍。

3.3 简单应用题与综合应用题

       总体而言,这两类题目的考试内容也是有迹可循的,这部分的总结将同样会以真题+总结的形式在下篇中逐步更新,敬请期待。下面随便挑了一份真题中的最后三道题目供大家学习参考:

  • 例25(简单应用题一):使用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)
  • 例26(简单应用题二):键盘输入一组水果名称并以空格分隔,共—行。示例格式如下:
            苹果  芒果  草莓  芒果  苹果  草莓  芒果  香蕉  芒果  草莓
            统计各类型的数量,从数量多到少的顺序输出类型及对应数量,以英文冒号分隔,每个类型一行。输出结果保存在考生文件夹下,命名为“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()
  • 例27(综合应用题):给出文件"论语.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()

四、小结

       总体而言,本篇文章初步总结概括了大部分在基础编程题当中出现频率较大的一些重要知识点,并以脑图的形式展现出来。但还有一大部分知识点依旧未涉及到,剩余内容会在下篇针对简单应用题与综合应用题的总结中继续完善,最终的目的是得到一份能够涵盖编程题部分所有考点的知识点总结脑图!!!最后放一张总结至目前为止的知识点总结脑图。
       有关于本篇文章的相关问题或者有Python二级题目不理解的小伙伴可以随时评论or私信我,看到后我都会逐一回复哒q(≧▽≦q)       PS:今年考完Python二级后才逐渐用Python做毕设、接小项目,目前也还是小白一枚,欢迎各位大佬批评指正!
基础编程题