2023-05 Python五级真题
分数:100
题数:38
测试时长:60min
一、单选题(共25题,共50分)
1. 有列表L=['UK','china','lili',"张三"],print(L[-2])的结果是?( C)
A. UK
B. 'lili','张三'
C. lili
D. 'UK','china','lili'
答案解析:列表元素定位
2. 倒计时在日常生活中有广泛的应用。Python使用range可以实现倒序数。下面可以正确倒序输出15以内正整数的语句是?(D )
A. print(list(range(15, -1, 1)))
B. print(list(range(-1, 15, 1)))
C. print(list(range(15, 1, -1)))
D. print(list(range(15, 0, -1)))
答案解析:range(start, stop[, step])的高阶应用
3. 已知一个字符串s="iloveyou"。通过操作该字符串构造一个新的列表li=['i', 'oveyou']。以下哪个选项不能构造新列表li?(A )
A. li = s.split("l",0)
B. li = s.split("l",1)
C. li = s.split("l",2)
D. li = s.split("l",3)
答案解析:本题主要考察split()函数的用法。拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)。 其语法规则为:str.split(str="",num=string.count(str)) str:表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素 num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
4. 有如下程序,请问此程序的执行结果是?(D)
tup1 = (12,'bc',34,'cd')
tup1[1] = 23
print(tup1[3])
A. cd
B. 12
C. 34
D. 程序出现错误
答案解析:元组的元素不可修改。
5. 有如下python程序段,下列说法错误的是?(D )
s={1,2,3,4,5}
print(s)
s.clear()
print(s)
A. “{1,2}+{5,6}”是错误的语句
B. s数据类型是集合
C. 此程序段的作用是输出原始集合s和移除数据之后的集合s
D. s数据类型是字典
答案解析:集合的创建与相关操作。
6. 现有校园图书馆最近一周(周一至周日)借书信息采集数据列表: borrow = [502, 387, 612, 545, 702, 855, 962] ,当前需要打印输出周一至周五的数据信息,正确的操作是?(C )
A. print(borrow[1:n-2])
B. print(borrow[0:n-1])
C. print(borrow[:-2])
D. print(borrow[::-2])
答案解析:列表的切片操作,本题正确操作为print(borrow[:-2])。
7. 科技小组实践作品用到的传感器列表 sensor = ['shengyin', 'chaoshengbo', 'guangmin', 'huidu'] , 当前需要增加列表元素'hongwai',正确的操作是?( B)
A. sensor.insert('hongwai')
B. sensor.append('hongwai')
C. inset sensor['hongwai']
D. append sensor['hongwai']
答案解析:Python append()函数用于在列表末尾添加新的对象。
8. Python中字符串可以使用反斜线进行转义,实现某些难以用字符表示的效果。 下面可以实现水平制表(跳到下一个TAB位置)的转义字符是?( C)
A. \b
B. \n
C. \t
D. \r
答案解析:字符串的转义,\t可以实现水平制表(跳到下一个TAB位置)。
9. 现有字符串S = "No mountain is more high than one." ,现在需要计算并输出字符串中'o'在S出现的次数,正确的语句是?(D )
A. print(S.find('o',1))
B. print(S.index('o'))
C. print(S.index('o',0,len(S)))
D. print(S.count('o'))
答案解析:count函数用于统计字符串的某个字符出现的次数。
10. 下列程序的功能是?(B )
shu=10000
result=[a for a in range(1,shu+1) if shu%a==0]
print(result)
A. 计算并输出10000以内的质数
B. 计算并输出10000的约数
C. 计算并输出10000的倍数
D. 计算并输出1-10000以内的整10数
答案解析:列表推导式的语法格式如下: [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
11. 运行下列程序: list(range(2,9,2)) 输出的结果是?( B)
A. 2, 4, 6, 8
B. [2, 4, 6, 8]
C. [1, 3, 5, 7, 9]
D. 1, 3, 5, 7, 9
答案解析:将range()产生的数字2,4,6,8转换为列表。
12. 下列books是一个字典,有一个for循环如下:
for info1,info2 in books.items( ):
print(info2)
上述info2可以得到什么?(B )
A. 键
B. 值
C. 键-值
D. 字典
答案解析:字典键/值的简单应用,可以得到字典的值。
13. 集合A是曾经到云南旅游的人,集合B是曾经到海南旅游的人,如果现在想要得到曾经到海南但是不曾到过云南旅游的人,可以使用那一种集合功能?( D)
A. A & B
B. A | B
C. A - B
D. B - A
答案解析:集合的差集运算,返回一个新集合,包括在集合B中但不在集合A中的元素。
14. 求1-100之内能被7整除,但是不能被3整除的所有数,正确的列表推导式是?(D )
A. print([for x in range(0, 100) if x % 7 == 0 and x % 3 != 0])
B. print([for x in range(1, 101) if x % 7 == 0 and x % 3 != 0])
C. print([x for x in range(0, 100) if x % 3 == 0 and x % 7 != 0])
D. print([x for x in range(1, 101) if x % 7 == 0 and x % 3 != 0])
答案解析:列表推导式的语法格式如下: [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
15. 利用time模块,下列可以输出当前日期的正确的语句是?(B )
A. print(time.ctime('%y%m%d'))
B. print(time.strftime('%y%m%d'))
C. print(time.nowdate('%y%m%d'))
D. print(time.local('%y%m%d'))
答案解析:Python time strftime() 函数用于格式化时间,返回以可读字符串表示的当地时间,%y 两位数的年份表示(00-99)%m 月份(01-12)%d 月内中的一天(0-31)。
16. Python中可以实现随机生成1-100之间浮点数的语句是?(A )
A. print(random.uniform(1,100))
B. print(random.randint(1,100))
C. print(random.sample(1,100))
D. print(random.shuffle(1,100))
答案解析:Python random.uniform(a, b),用于生成一个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限。
17. 已知有列表lst = [2,3,4,5,6],下面操作可以求出最小值的是?(B )
A. sum(lst)
B. min(lst)
C. max(lst)
D. MIN(lst)
18. 已知有元组tup1=('a','b'),tup2=(1,2,3),tup3=('china','UK'),执行print(tup1+tup2+tup3)后输出是?( C)
A. ['a', 'b', 1, 2, 3, 'china', 'UK']
B. (('a','b'),(1,2,3),('china','UK'))
C. ('a', 'b', 1, 2, 3, 'china', 'UK')
D. 'a', 'b', 1, 2, 3, 'china', 'UK'
19. str1="你是大英雄",执行下列哪个选项可以输出"雄英大是你"?(B )
A. print((str1(0,0))
B. print(str1[::-1])
C. print(str1[0])
D. print(str1[0:5])
20. Python中,range函数表示产生一个序列,range(6)则表示产生的一个序列是?(B )
A. 0-6
B. 0-5
C. 1-6
D. 1-5
21. 下列代码运行后的结果是?(D )
dp={}
dp["2^10"]=1024
print(dp)
A. ['2^10': 1024]
B. {"2^10"}
C. 1024
D. {'2^10': 1024}
22. 运行下面代码后得到相应的输出结果,请问是用了哪一种推导公式?(C )
a = [i for i in range(10) if i % 3 ==0]
print(a)
#output: [0, 3, 6, 9]
A. 集合推导公式
B. 字符串推导公式
C. 列表推导公式
D. 元组推导公式
23. 请问以下Python代码输出的结果是?(B)
a = {i**2 for i in (6,7,8) if i>3}
print(a)
A. (36,49,64)
B. {64, 49, 36}
C. {64,49}
D. {2,36,64}
答案解析:集合推导式格式为:{expr for value in collection}或: {expr for value in collection if condition}
24. 下面代码运行后的结果是?(C )
import jieba
str ="大家好,我叫龙云!请多多关照!"
jieba.suggest_freq(("龙云"),True)
print(jieba.lcut(str))
A. '大'',''家', '好', ',', '我', '叫', '龙'',''云', '!', '请', '多多','关照', '!'
B. ['大家', '好', ',', '我', '叫', '龙'',''云', '!', '请', '多多关照', '!']
C. ['大家', '好', ',', '我', '叫', '龙云', '!', '请', '多多关照', '!']
D. ('大家', '好', ',', '我', '叫', '龙云', '!', '请', '多多关照', '!')
答案解析:python中的jieba库应用。 有些句子中出现了一些词语,但是被分开为两个单独的字,虽然这样可以调整词库,只需要重新加载自定义的词库即可,除此之外我们还可以用调整词频来解决这个问题,本题把“龙云”这个姓名强制为词语而不是分割为两个单独的字。 jieba.suggest_freq(("龙云"),True)是全模式语法。
25. 下列代码运行后的结果是?( D)
import math
a=math.floor(10.2)
print(a)
A. 10.20
B. 10.0
C. 11
D. 10
答案解析:python中math库应用。 math.floor是向下取整函数
二、判断题(共10题,共20分)
26. 在Python语言中,字符串是属于有序序列。( 对)
答案解析:题干描述正确。Python列表、元组、字符串都属于有序序列。
27. 无法通过引用索引来访问集合中的元素,但是可以用for循环来遍历集合中的元素。(错 )
28. multiples = [i for i in range(30) if i % 3 == 0] ,此推导式中,multiples中共有10个元素。( 对)
29. 新学期,书法社团增加了新学员,目前一共n人,小刚作为社团的信息员,用Python建立了一个列表,列表索引从1开始,到n结束。( 错)
答案解析:Python建立一个列表,列表索引从0开始,到n-1结束。
30. Python中元组的元素不可以原位改变。( 对)
31. Python中可以通过 .replace() 删除字符串开头和结尾的空格。(错 )
答案解析:Python中可以通过.replace(old,new[,max])把字符串中的old字符串换成new字符串, 如果指定第三个参数max,则替换不超过 max 次。
32. enumerate()函数是Python的内置函数,它能用来遍历一个可迭代对象,它在遍历的同时还可以得到当前元素的索引位置。(对 )
33. Python中字典(dict)的“值”可以是列表(list)、字典(dict)、集合(set)类型。(对 )
答案解析:Python字典的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行;字典的值可以是 Python 支持的任意数据类型。
34. 乐器社团活动,小明用Python写了一个汇总程序,在他的程序中乐器集合的元素是可以相同的。( 错)
答案解析:Python中集合元素不可以相同。
35. PyInstaller命令执行完,源文件所在的目录将生成dist和build两个文件夹。 (对 )
答案解析:build文件夹主要用于PyInstaller存储临时文件,打包程序存放于dist文件夹。
三、编程题(共3题,共30分)
36. 已知 IPv6 的地址字符串的格式为 X:X:X:X:X:X:X:X,其中每个 X 表示长度为 4 的字符串。例如:某 IPv6 字符串为“2A08:CCD6:0088:108A:0011:0002:202F:AA05”,IPv6 表示法需将每个 X 的前导零都省略,程序输出结果如下图所示:
现设计程序自动删除 IPv6 地址的前导零,请在划线处填入合适的代码。
s="2A08:CCD6:0088:108A:0011:0002:202F:AA05"
①
flag=False
for i in range(len(s)):
if s[i]==":":
②
flag=False
elif ③ :
ans+=s[i]
flag=True
print("原 IPv6 地址为:",s)
print("去前导零后:",ans)
参考程序:
s="2A08:CCD6:0088:108A:0011:0002:202F:AA05"
ans=""
flag=False
for i in range(len(s)):
if s[i]==":":
ans+=s[i]
flag=False
elif s[i]!="0" or flag==True:
ans+=s[i]
flag=True
print("原 IPv6 地址为:",s)
print("去前导零后:",ans)
评分标准:
(1)ans="" ;(3分)
(2)ans+=s[i];(3分)
(3)s[i]!="0" or flag==True。(4分)
37. 编写程序,实现分段函数的计算,分段函数的取值如下表所示。要求:可连续输入5次(也就是输入5个x值,求出对应的y值),根据对应的表达式求出y值之后,将结果转化成整数添加到列表a中。请判断存在于列表a中的5个元素是否为素数,如果为非素数则转化成元组之后存在b1中,如果是素数则转换成元组之后存放在b2中,分别输出b1、b2中非素数和素数的元素及元素个数。
a=[]
a1=[]#暂时存储非素数的值
a2=[]#暂时存储素数的值
b1=()
b2=()
for i in range(5):
x=int(input("输入x="))
if x<0:
y=0
elif 0<=x<5:
y=x
elif 5<=x<10:
y=3*x-5
elif 10<=x<20:
y=0.5*x-2
elif x>=20:
y=2*x
①
for i in a:
if ② :
a1.append(i)
else:
flag=True
for j in range(2,i):
if i%j==0:
③
break
if ④ :
a2.append(i)
else:
a1.append(i)
b1=tuple(a1)
b2=tuple(a2)
print("非素数的个数有"+str(len(b1))+"个,","非素数为:",b1)
print("素数的个数有"+str(len(b2))+"个,","素数为:",b2)
参考程序:
a=[]
a1=[]#暂时存储非素数的值
a2=[]#暂时存储素数的值
b1=()
b2=()
for i in range(5):
x=int(input("输入x="))
if x<0:
y=0
elif 0<=x<5:
y=x
elif 5<=x<10:
y=3*x-5
elif 10<=x<20:
y=0.5*x-2
elif x>=20:
y=2*x
a.append(int(y))
for i in a:
if i==0 or i==1:
a1.append(i)
else:
flag=True
for j in range(2,i):
if i%j==0:
flag=False
break
if flag==True:
a2.append(i)
else:
a1.append(i)
b1=tuple(a1)
b2=tuple(a2)
print("非素数的个数有"+str(len(b1))+"个,","非素数为:",b1)
print("素数的个数有"+str(len(b2))+"个,","素数为:",b2)
评分标准:
(1)a.append(int(y));(2分)
(2)i==0 or i==1;(2分)
(3)flag=False;(3分)
(4)flag==True。(3分)
展示地址:点击浏览
38. 给定一个完全由数字字符('0','1','2',...,'9')构成的字符串str,请写出str的p型编码串。例如:字符串1335554668可被描述为“1个1、2个3、3个5、1个4、2个6、1个8”,因此我们说1335554668的p型编码串为112335142618;00000000000可描述为“11个0”,因此它的p型编码串为110;类似的道理,编码串101可以用来描述1111111111;110003444225可描述为“2个1、3个0、1个3、3个4、2个2、1个5”,因此它的p型编码串为213013342215。如果输入非数字字符,则提示输入无效。
根据上述算法思想,补全下列代码。
s=input("请输入字符串str:")
s+=' '
lens=len(s)
for i in range(0, ① ,1):
if '0'<=s[i]<='9':
②
else:
print('输入无效!')
exit()
sum=1
i=0
while i<lens-1:
if ③ :
sum+=1
else:
print(sum,end='')
print(s[i],end='')
④
i+=1
参考程序:
s=input("请输入字符串str:")
s+=' '
lens=len(s)
for i in range(0,lens-1,1):
if '0'<=s[i]<='9':
continue
else:
print('输入无效!')
exit()
sum=1
i=0
while i<lens-1:
if s[i]==s[i+1]:
sum+=1
else:
print(sum,end='')
print(s[i],end='')
sum=1
i+=1
评分标准:
(1)lens-1 或等效答案;(2分)
(2)continue或等效答案;(2分)
(3)s[i]==s[i+1] 或者s[i+1]==s[i] 或等效答案;(3分)
(4)sum=1 或等效答案。(3分)