内容正文:
2.4 可以复用的代码
一、选择题
1.下列选项的语句中,与“若x小于0则y=-1,否则y=1”功能相同的是( )
A.
if x<0:
y=-1
y=1
B.
y=1
if x<0:
y=-1
C.
if x<0:
y=-1
if x>0:
y=1
D.
if x>0:
y=1
else:
y=-1
A.A B.B C.C D.D
2.有如下Python程序:
import random
s='IloveChina'
res=''
i=0
while i<=5:
k=random. randint(0,5)*2-1
res+=s[k]
i+=1
print(res)
执行该程序后,输出的结果不可能是( )
A.lavCCv B.11Cvv C.IloveC D.iiiii
3.Python 表达式“a+b* *2+1/ (c+3*d)”对应的数学代数式是( )
A. B. C. D.
4.以下属于关系运算符的是( )
A./= B. == C.** D.%
5.有如下Python程序段:
s = input(); t = 0; mw = ""
for i in range (len(s)):
ch= s[i]
if "0" <= ch <= "9"
t = t * 10 + int(ch)
elif ch == "-":
mw += chr(t % 26 + 65)
elif "A" <= ch <= "Z"
t = 0
else:
mw += ch
print (mw)
执行该程序段输入27a-J2024Y-08!,则输出的结果是( )
A.aBA! B.aA! C.aBW! D.aBAI!
6.使用列表flink模拟链表结构(节点数大于1),每个节点包含起始数值、连续长度、指针区域,h为头指针。链表中各节点已按起始数值由小到大排列,各个节点表示的数值区间不重叠,例如链表
flink为[[20,100,3],[150,50,2],[250,60,-1],[120,30,1]],h-0,其中节点[20,100,3]表示从数值20开始有长度为100的连续值(20到119),3代表后继节点索引为3,现要合并链表各节点连续的数值区间,合并后链表flink的数据修改为[[20,180,2],[150,50,2],[250,60,-1],[120,30,1]],h=0。实现该功能的程序段如下:
q=h=0
p=flink[q][2]
while p!=-1:
if flink[p][0]==flink[q][0]+flink[q][1]:
flink[q][1]=flink[q][1]+flink[p][1]
else:
(1)
(2)
(3)
上述程序中方框处可选语句为:①q=p ②flink[q][2]=p ③p=flink[p][2]
则(1)、(2)、(3)处语句依次是( )
A.①、②、③ B.①、③、② C.②、①、③ D.②、③、①
7.数组y中存放了n个数据,将所有偶位数据向前移动,奇位数据不变。如数组[1,4,7,9,16,25],处理后得到结果[7,4,16,9,1,25]。实现该功能的Python程序段如下,划线处应填入的正确代码组合为( )
tmp=y[0]
for i in range(① ):
②
y[n-2]=tmp
A.① n-2,0,-2 ② y[i-2]=y[i] B.① 2,n,2 ② y[i-2]=y[i] C.① 0,n-1,2 ② y[i] =y[i+2] D.① n-4,-1,-2 ② y[i] =y[i+2]
8.下列Python程序的功能是在有序链表中,插入一个新的数,使其仍然有序。
a=[[89,-1],[43, 4],[1,3],[21,5],[49,0],[27,1]]
x=int(input('请输入要插入的数: '))
head=2; p=head
while p!=-1 and a[p] [0]<x:
q=p
p=a[p][1]
if p==head:
a.append([x, head] )
head=len(a)-1
else:
# 输出链表a中所有数据,代码略
方框中的代码由以下三部分组成:①a.append([x,-1]) ②a[q] [1]=len(a)-1 ③a[len(a)-1][1]=p
下列选项中,代码顺序正确的是( )
A.③②① B.③①② C.①③② D.②①③
9.定义如下函数:
def fun(x,y):
if x<0:
return y
else:
return fun(x-2*y-1,y-1)
执行语句s=fun(13,3)后,s的值为( )
A.0 B.1 C.2 D.3
10.在Python语言中,下列表达式结果为False的是( )
A.(5**2)>(5*2) B.(5//2)<(5%2) C.(5>2) or (5<2) D.(5>2) and (5<2)
11.在Python中,以下赋值语句的说法错误的是( )
A.语句a , b=3表示将3同时赋值给变量a和b B.“=”表示将右边表达式的值赋给左边的变量
C.语句x,y =y,x可以实现变量x和y值的互换 D.c+= a等效于c=c+ a
12.在 Python 中,执行以下语句后,显示的结果是( )
>>>a=10;b=5
>>>a-=b
>>>b+=a
>>>print(a,b)
A.5,10 B.10,5 C.5,5 D.10,10
13.打印出所有的“水仙花数”,所谓水仙花数是指一个三位数,它的每个位上的数字的3次幂之和等于它本身(例如:1^3+5^3+3^3=153),如果将所有的三位数一一列举,逐个判断,横线处应填( )
for i in range( ):
b=i//100
s=i%100//10
g=i%10
if b**3+s**3+g**3==i:
print(i)
A.100 to 999 B.100,999 C.100,1000 D.100 1000
14.我国古代著名的数学专著《孙子算经》中有这样一道题:“今有物,不知其数。三三数之,剩二;五五数之,剩三;七七数之,剩二。问:物几何?
请完善以下Python程序,实现:输出1000以内符合上述条件的所有整数及其个数。
①
for i in range(1001):
if i%3==2 ② i%5==3 ③ i%7==2:
s+=1
print(④ )
print("1000以内满足条件的数共有%d个"%s)
要实现题目要求,下列填入的代码完全正确的选项是( )
A.①s=0 ②and ③or ④s B.①s=1 ②or ③and ④i
C.①s=0 ②and ③and ④i D.①s=1000 ②and ③or ④s
15.有如下Python程序段:
import pandas as pd
s1 = pd. Series (["学习", "运动", "睡觉", "吃饭"], index = ["01", "02", "03", "04"])
sl ["03"] = "休息"
bm = s1. index
sub = s1. values
time = [40,90,79,30]
num = [13,2,10,3]
col = ["活动", "时长", "次数"]
data = {"活动": sub, "时长": time,"次数": num}
df1= pd. DataFrame (data, index = bm, columns = col)
print (df1[df1 ["时长"]*df1["次数"]>120])
运行该程序段,输出显示的结果为( )
活动时长次数
A. B.
C. D.
二、填空题
16.python 程序段如下:
a=[2,1,3,4,5]
c=0
for i in range(2,len(a)):
if a[i-2]+a[i-1]==a[i]:
c=c+1
print(c)
该程序段运行后,最后输出的内容是 。
17.Python表达式125//3的运算结果是( )
18.在Python中,range()函数可以生成一个整数序列,但是它生成的序列不包含序列的上限值,即range(10)会生成从0到 的序列。
19.用户自定义函数是用户自己写的一段程序。一般包括 、 、 和 等四部分。其中 和 是必不可少的, 和 可根据需要进行定义。
20.函数的调用采用 的方式。
三、判断题
21.表达式list('[1, 2, 3]')的值是[1, 2, 3]。( )
22.用户自定义函数是用户自己写的一段程序.一般包括函数名、参数、 返回值、函数体等四部分.其中,函数名和参数是必不可少的部分.( )
23.在Python3.x语言中,input()函数的返回值类型是字符串。( )
24.Python语言的变量名要区分英文字母的大小写。( )
四、操作题
25.某学校工会举行书画大赛,共邀请8位评委,评分范围为1至10分,选手总分为8位评委评分之和去掉1个最高分和1个最低分,文本文件scores.txt存放选手的相关数据,每行数据由4位字符的选手编号和8位评委的评分组成,如图a所示。
图a 图b
(1)主程序。从文本文件中读取数据,计算选手总分,按照总分由高到低输出。运行结果如图b所示,请在划线处填入合适的代码。
data=caltotal("scores.txt") #读取数据,计算选手总分
print("各选手总分数据为:",data)
flag=[True]*len(data) #标记数据被使用情况
print("总分从高到低为:")
for i in range(len(data)):
pos=findmax(data,flag)
flag[pos]=
print(data[pos][0],data[pos][1])
(2)编写caltotal函数,功能为从文本文件读取数据,计算选手总分,返回列表。请在划线处填入合适的代码。
def caltotal(filename):
f=open(filename) #打开文件
line=f.readline() #从文件中读取一行
data=[]
while line:
xs=
sp=line[5:].split(",") #以逗号为分割符,切分每行数据,如['8','7','3','10','10','5','7','4']
s=tot(sp)
data.append([xs,s]) #将选手编号和最终得分添加到列表data
line=f.readline()
return data
(3)编写tot函数,功能为计算每个选手的得分。请在划线处填入合适的代码。
def tot(sp):
s=0
imax=0
imin=11
for i in range( ):
val=int(sp[i])
if val>imax:
imax=val
if val<imin:
imin=val
s+=val
s=s-imax-imin
return s
(4)编写findmax函数,参数data列表存储选手数据,flag列表存储标记。
def findmax(data,flag):
maxnum=0
for i in range(len(data)):
if :
maxnum=data[i][1]
pos=i
return pos
请在划线处填入合适的代码,正确的选项是 (单选,填字母)。
A.maxnum<data[i][1] B.maxnum<data[i][1]andflag
C.maxnum<data[i][1]andflag[i] D.maxnum<data[i][1]andnotflag[i]
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查Python基本语句。要注意的是x=0时,y=1,选项A所有的情况y都是1。故选B。
2.C
【详解】本题考查程序分析。该程序功能切片字符串s,切片索引为k,k的值可能为:-1、1、3、5、7、9。s[k]的可能结果为:a、l、v、C、i。故不可能出现选项C。故正确答案为选项C。
3.C
【详解】本题考查Python运算符与表达式相关内容。A选项,对应Python表达式为:(a+b)**2+3/(c+d)。B选项,对应Python表达式为:a+2*b+1/c+3*d。C选项,对应Python表达式为:a+b**2+1/(c+3*d)。D选项,对应Python表达式为:a+b**2+1/(3*(c+d))。与题干表达式对应的是C选项,故本题答案是C选项。
4.B
【详解】本题考查的是Python关系运算符。在Python中常见的关系运算符:==、>、<、>=、<=、!=。/=是除法赋值,**是幂乘,%是求余。故选B。
5.A
【详解】本题考查Python程序设计相关内容。分析程序段,其运行过程如图所示:。故本题答案是A选项。
6.B
【详解】本题考查Python程序。当不满足合并条件时,需要将当前节点后移(q=p),更新当前节点的后继指针(flink[q][2]=p),然后再获取新的后继节点(p=flink[p][2])。所以(1)处为①,(2)处为③,(3)处为②。故答案为:B。
7.B
【详解】本题考查Python程序设计相关内容。结合题目内容,分析程序段,以数组[1,4,7,9,16,25]为例:A选项,将代码带入程序段,分析其运行,可得结果为:[16, 4, 16, 9, 1, 25],不符合题意。B选项,将代码带入程序段,分析其运行,可得结果为:[7,4,16,9,1,25],符合题意。C选项,若i=n-2,y[i+2]=y[n],索引越界溢出,语法错误。D选项,将代码带入程序段,分析其运行,可得结果为:[16, 4, 16, 9, 1, 25],不符合题意。故本题答案是B选项。
8.C
【详解】本题考查Python程序。为了在有序链表中插入一个新的数,使其仍然有序,需要按照正确的顺序修改链表的指针。首先,应将新的节点添加到链表的末尾,即执行①a.append([x,-1]);然后,将新节点的指针指向插入位置的下一个节点,即执行③a[len(a)-1][1]=p;最后,将前一个节点的指针指向新节点,即执行②a[q][1]=len(a)-1。故答案为:C。
9.A
【详解】本题考查Python程序。在函数fun(x,y)中,当x<0时返回y,否则进行递归调用fun(x-2y-1,y-1)。对于fun(13,3),第一次调用:13>0,继续调用fun(13-2*3-1,3-1)即fun(6,2)。第二次调用:6>0,继续调用fun(6-2*2-1,2-1)即fun(1,1)。第三次调用:1>0,继续调用fun(1-2*1-1,1-1)即fun(-2,0)。此时-2<0,返回0。故答案为A。
10.BD
【详解】本题考查Python表达式。选项A中,5**2=25,5*2=10,25>10,结果为True。选项B中,5//2=2,5%2=1,2>1,结果为False。选项C中,5>2为True,5<2为False,True or False结果为True。选项D中,5>2为True,5<2为False,True and False结果为False。故答案为:BD。
11.A
【详解】本题考查Python赋值语句。在Python中,语句a,b=3并不会将3同时赋值给变量a和b。这种语法是错误的,实际运行时会引发ValueError,因为左侧有两个变量,右侧只有一个值,无法解包。正确的做法是分别给每个变量赋值,例如a=3和b=3,或者用a,b=3,3。故答案为:A。
12.A
【详解】本题考查的是Python表达式。a-=b等价于a=a-b=10-5=5,b+=a等价于b=b+a=5+5=10,print(a,b)输出a和b的值为5,10。故选A。
13.C
【详解】本题考查Python程序。三位数的所有可能的范围是100~999,将所有的三位数一一列举,逐个判断,条件语句中求出一个三位数的百位、十位、个位上的数字的三次方的和,两者相等,即所求的数。A选项,格式错误;B选项,只能取到100~998;D选项,不能用空格。故答案为:C。
14.C
【详解】本题考查Python程序。题目要求找出1000以内符合特定条件的所有整数,并计算其个数。根据题意,整数需要满足三个条件:对3取余为2,对5取余为3,对7取余为2,这三个条件需要同时满足,因此需要用and逻辑运算符。初始化计数变量应为0,并在满足条件时输出该整数。因此,填入的代码应该是:①s=0;②and;③and;④i。故答案为:C。
15.B
【详解】本题考查的是程序调试与运行。根据最后一行语句可知,筛选的是时长和次数之积大于120的数据。根据倒数第二行语句可知,索引是bm,列标题是col。故本题应选B。
16.2
【详解】本题考查程序设计。
该程序输出,统计列表中前面两个数相加等于第三个数的个数。第一次循环1+2等于3,c+=1。第二次循环1加3等于4,c+=1;第三次循环3+4不等于5。故正确答案为:2。
17.41
【详解】本题考查Python表达式的运算。//是整除运算符,因此125//3=41。
18.9
【详解】本题考查Python函数。range()函数用于生成一个整数序列,但生成的序列不包含上限值。具体来说,range(10)会生成从0到9的整数序列,即包含起始值0但不包含上限值10。因此,range(10)会生成从0到9的序列。故答案为:9。
19. 函数名 参数 返回值 函数体 函数名 函数体 参数 返回值
【详解】本题考查的是自定义函数。自定义函数包括函数名、参数、返回值、函数体和函数名,其中函数名和函数体是必不可少的,参数和返回值可根据需要进行定义。
20.函数名(参数)
【详解】本题考查的是Python函数相关知识。函数的调用采用函数名(参数)的方式。
21.错误
【详解】本题考查Python基础。
表达式 list('[1, 2, 3]') 的值并不是 [1, 2, 3]。在Python中,list() 函数用于将可迭代对象转换为列表,但如果直接传入一个字符串,list() 函数会将字符串中的每个字符视为列表的一个单独元素。故错误。
22.错
【详解】本题考查自定义函数。用户自定义函数是用户自己写的一段程序.一般包括函数名、参数、返回值、函数体等四部分.其中,其中参数和返回值可根据需要进行定义。题干说法错误。
23.正确
【详解】本题考查Python函数。input()函数用于从标准输入读取一行,并将其作为字符串返回。无论用户输入什么内容,input()函数返回的值始终是字符串类型。故说法正确。
24.正确
【详解】本题考查Python。Python语言的变量名是区分英文字母大小写的,这意味着在Python中,变量名var和Var被视为两个不同的变量。故说法正确。
25. False line[:4] len(sp)或0,len(sp) C
【详解】(1)根据代码flag=[True]*len(data),可知flag用于标记数据被使用情况;flag[pos]=False表示该数据已经使用过;
(2)本题考查字符串切片,由第12题图a可知,第一行数据为['s001':'8','7','3','10','10','5','7','4'],xs为line[:4];
(3)range遍历的范围为len(sp);
(4)观察主程序可知,先使用findmax函数在数组data中查找最大值的位置pos,再将列表flag中该位置的值修改为False,表示该数据已经使用。接着再使用findmax函数在数组data中查找最大值的位置,由于之前已经将最大值标记为使用,所以函数返回的值即第二大值的位置,以此类推,从而实现排序。所以划线处if条件语句必须满足maxnum的值小于data[i][1],并且位置i没有被使用(即flag[i]的值为True),答案为C。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$