内容正文:
2.4 可以复用的代码
一、选择题
1.用Flask框架编写Web应用程序,相关流程的代码如下:
①app=Flask(__name__)
②from flask import Flask
③@app.route('/')
def index():
④app.run()
为开启 Web应用,上面语句执行的先后顺序正确的是( )
A.①②③④ B.②①③④ C.①③②④ D.②①④③
2.下列python语句书写正确的是( )
A.PRINT('a=',35) B.a,b=b,a C.a=3/{[45-2]*11} D.n=int(input("n=5 "))
3.有如下程序段:
x=int(input("请输入一个正整数:"))
ans=""
while x>0:
m=x%5
ans=str(m)+ans
x∥=5
print(ans)
该程序段执行后,输入30,输出的结果为( )
A.011 B.11 C.110 D.1100
4.某DataFrame对象df,包含“准考证号”“学校”“姓名”“数学”“语文”等数据列,下列语句中,可以以学校为单位,统计出各校学生“数学”成绩平均值的有( )
①df.groupby("学校").mean() ②df.groupby("数学").mean()
③df.groupby("学校").数学.mean() ④df.groupby("学校").describe()
A.①②③ B.①②④ C.①③④ D.②③④
5.有Python程序代码如下:
a=[3,0,8,0]
a.sort()
m1=a[3]*1000+a[2]*100+a[1]*10+a[0]
i=0
while i<=3:
if a[i]>0:
a[0],a[i]=a[i],a[0]
break
i=i+1
m2=a[0]*1000+a[1]*100+a[2]*10+a[3]
print(m1,m2)
运行上面Python程序代码段,输出结果为( )
A.8300 3008 B.8300 38 C.8003 3008 D.8300 3800
6.某校学生干部考核成绩保存在文件“Students.csv”中,部分数据如下图所示,优秀学生干部评比规则为:综合成绩不低于85分,且面试成绩等级为A。编写Python程序,统计每班优秀学生干部人数,代码如下:
df=pd.read_csv("Students.csv"_
dfl=df[df["综合成绩"]>=85]
df2=df1[df1["面试成绩"]=="A"]
result=
print(result)
要实现上述功能,划线处代码正确的是( )
学号
班级
综合成绩
面试成绩
2024001
303班
88
A
2024002
301班
68
B
2024008
302班
90
B
……
A.df2.groupby("班级").学号.count() B.df2.groupby("班级").学号.sum()
C.df2.groupby("综合成绩").学号.count() D.df2.groupby("综合成绩").学号.sum()
7.以下是列表的是( )
A.a={1,2,3,4} B.range(1,5) C.range(10) D.obj=["苹果",3,"猕猴桃"]
8.a=10;a=a+30 运行以上两个语句后,变量 a 的值为( )
A.10 B.30 C.60 D.40
9.近期学校进行了一次技术学考模拟考试,学生的成绩数据保存在文件“jscj.xlsx”中,部分数据如图所示。编写Python程序,统计本次考试各班级的优秀(A等级)人数。
import pandas as pd #导入pandas模块
import matplotlib.pyplot as plt #导入matplotlib的pyplot子库
df=pd.read_excel("jscj.xlsx") #读文件中的数据
plt.bar(g.index,g.等级)
plt.show()
方框中代码由下列语句中的部分语句组成:
①df=df[df.等级=="A"]
②df=df["等级"=="A"]
③g=df.groupby("班级", as_index=True).sum()
④g=df.groupby("班级", as_index=True).count()
要实现上述功能,下列选项中正确的是( )
A.①④ B.①③ C.②④ D.②③
10.有如下python程序段。
m = n = 0
for i in range(10):
if i % 3 == 0:
m += i
elif i % 3 == 1:
n -= i
运行程序后,下列说法正确的是( )
A.i的值为10 B.m+n的结果为-4 C.m-n的结果为30 D.m += i的执行次数为3
11.在函数print()中,括号里的参数不可以是( )
A.字符串 B.变量名 C.表达式 D.文件名
12.某二分查找算法的Python程序段如下:
i,j = 0,len(d)-1
while i <= j:
m = (i+j)//2 # 语句①
if key == d[m]:
break
elif key < d[m]:
j = m-1
else:
i = m+1
当d为[6,12,15,18,22,25,28,35,46]时,运行该程序段查找key,语句①的执行次数小于等于2;若将d修改为[6,12,15,18,22,25,28,35,46,58],重新运行该程序段,查找同一key值,则语句①的执行次数不可能为( )
A.1 B.2 C.3 D.4
13.下列括号中填入什么值时,能显示0-10的数( )
for i in range():
print( i )
A.9 B.10 C.11 D.12
14.执行以下Python程序,输入"985c9q39s211",输出结果为( )
s=input ("请输入字符串:")
n=len(s); ch=" ";max=" "
for i in range (n-1, -1, -1):
c=s[i]
if "0" < c <="9":
ch=c+ch
else:
if ch>max:
max=ch
ch=" "
print(max)
A.9 B.39 C.211 D.985
15.下列python表达式的值是偶数的是( )
A.len(str(123))
B.round(7.34)
C.(-5)**2+8//3*2
D.abs(ord("H")-ord("J"))
16.执行下列代码,说法错误的是?( )
import sqlite3
db = sqlite3.connect('data.db')
cur = db.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS list(id INTEGER PRIMARY KEY autoincrement, name text)")
db.commit()
cur.execute("SELECT COUNT(*) FROM list")
if cur.fetchall()[0][0] == 0:
cur.execute('INSERT INTO list(id,name) VALUES(1,"lilei")')
db.commit()
A.data.db文件中有一张名为list的数据表
B.list数据表中有两个字段id和name
C.list数据表中没有记录
D.去掉最后一行的db.commit(),对程序有影响
二、填空题
17.输入t的值4运行以下Python程序,结果是 。
d=[0,3,1,4,2]
t=int(input("请输入t的值:"))
if t>4:
print(d[d[t-1]])
else:
print(d[d[t]])
18.在Python中,is关键字用于比较两个对象的 。
19.在Python中,用于实现异常处理的关键字是 。
20.Python表达式125%100的运算结果是( )
21.下面代码的运行结果为 。
a=[5,2,8,7,3]
a[0]=6
del a[1 ]
a.append(9)
print (a)
三、判断题
22.Python字典中的“键”可以是列表、元组、数字、字符串( )
23.已知列表x = [1, 2],执行语句y = x后,表达式id(x) == id(y)的值为True。( )
24.在Python 3中,使用内置函数input()接收用户输入时,不论用户输入什么格式的内容,一律按字符串进行返回。( )
25.下列程序的运行结果为123。( )
b=int('123')
print(b)
四、操作题
26.一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则称该序列为摇摆序列。小王同学想求出某个序列的最长摇摆子序列。以序列[3,14,7,6,9,12,10,8,13,5]为例,整体不是摇摆序列,但子序列[3,14,7,9]、[3,14,6,12]等都属于摇摆子序列,其中最长的摇摆子序列是[3,14,6,12,8,13,5]。算法提示,当序列有一段连续的递增(或递减)时,可形成摇摆子序列,我们只需要找到每一次转折中的拐点元素。小王编写了一个Python程序实现该功能:程序运行时,输入一串用逗号分隔和结束的数字,可以得到最长摇摆子序列的长度,以及具体的序列。程序运行界面如下图所示:
请输入以逗号分隔和结束的数据(不超过20个数):3,14,7,6,9,12,10,8,13
最长摇摆子序列长度为6
最长摇摆子序列为:3,14,6,12,8,13
(1)若输入数据“2,4,5,3,2,1,”,则最长摇摆子序列为 。
(2)实现上述功能的Python代码如下,请在划线处填入合适的代码。
s=input("请输入以逗号分隔和结束的数据(不超过20个数):")
a=[0] * 20; b=[False] * 20; flag,n,i,t,ans=0,0,0,","
def f(n):
f=1
global ans #global表示此处的ans就是全局变量ans
ans=str(a[n-1])
for i in range(n-2,-1,-1):
if b[i]:
f=f+1
①
return f
for ch in s:
if ch== ",":
②
n+=1
i+=1
t=″
else:
t=t+ch
for i in range(1,n):
gd=True
if flag==0:
if a[i]>a[i-1]:
flag=1
elif a[i]<a[i-1]:
flag=2
else:
gd=False
elif flag == 1 and a[i] < a[i-1]:
flag=2
elif ③ :
flag=1
else:
gd=False
④
if f(n)<3:
print("不构成摇摆子序列")
else:
print("最长摇摆子序列长度为",str(f(n)))
print("最长摇摆子序列为:",ans)
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查Python Flask框架程序设计相关内容。Flask Web框架编写网络应用流程是:
(1)from flask import Flask #导入框架模块
(2)app=Flask(__name__) #创建应用实例
(3) @app.route('/') #编写路由
def index(): #编写视图函数
(4)app.run() #启动Web应用
给定语句执行的先后顺序是②①③④。故本题答案是B选项。
2.B
【详解】本题考查Python基础。选项A,错误。函数PRINT应该是小写字母。选项C,错误。表达式中括号,应该使用()。选项D,错误。括号应该使用英文状态下的括号。故正确答案为:选项B。
3.C
【详解】本题考查Python基础。
本题程序的功能是将整数x转换为五进制数。将整数30转换为五进制数为110,因此正确答案为:选项C。
4.C
【详解】本题考查Python数据处理。统计各校学生“数学”成绩平均值需按“学校”分组计算。df.groupby("学校").mean()按“学校”分组,计算各列平均值;df.groupby("数学").mean()按“数学”成绩分组,计算各列平均值;df.groupby("学校").数学.mean()按“学校”分组,计算“数学”成绩列的平均值;df.groupby("学校").describe()按“学校”分组,返回各列的平均值、最大值等。故答案为:C。
5.A
【详解】本题考查Python程序。初始时,列表a的内容为[3,0,8,0],升序排序后为[0,0,3,8],因此变量m1的值为8300。变量m2是列表a中首先按从左到右次序找到第一个非零位置和a[0]交换所得,结果为[3,0,0,8],因此变量m2的值为3008。故答案为:A。
6.A
【详解】本题考查Python程序。首先,我们需要根据题目要求从文件中读取数据并筛选出符合条件的学生记录。接下来,根据筛选后的数据df2,我们需要统计每班优秀学生干部的人数。正确的选项应该是对班级进行分组统计,因此我们使用 groupby("班级"),然后统计学号的数量。df2.groupby("班级").学号.count():按班级分组统计学号数量,即每班优秀学生干部的人数。故答案为:A。
7.D
【详解】本题考查Python基础。列表是使用方括号 [] 并且包含不同类型的元素(字符串和数字),且这些元素是有序的,可以通过索引访问。故选择D。
8.D
【详解】本题考查Python运算符与表达式相关内容。a=10;则a=a+30-->a=10+30-->a=40。故本题答案是D选项。
9.A
【详解】本题考查数据的处理与应用。筛选的语法为df[条件],筛选出等级为A的学生,语句为①。按班级分组,班级当做索引,统计各班级的优秀人数,用count()来表示,故答案为A选项。
10.C
【详解】本题考查程序分析。i能被3整除,则累加i给m。i取余数为1,则累减i给n。运行结束后m=18,n=-12,则m-n为30。故选择C。
11.D
【详解】本题考查Python函数。print()函数用于将指定的内容输出到控制台。在print()函数中,括号内的参数可以是字符串、变量名或表达式,用于指定要输出的内容。文件名不是print()函数的有效参数类型,因为print()函数不用于打开或处理文件,而是用于输出内容到控制台。故答案为:D。
12.C
【详解】本题考查Python程序设计相关内容。本题涉及到二分查找算法相关操作。分析程序段,推知:
数组d为[6,12,15,18,22,25,28,35,46]时,i=0,j=8,m=4,执行程序段,查找过程用二叉树表示如下:
语句①的执行次数小于等于2,该次数与key值在二叉树中的深度值一致,因此查找的数key可能是:22(1次查找)、12(2次查找)和28(2次查找)。若将d修改为[6,12,15,18,22,25,28,35,46,58],此时,i=0,j=9,m=4,查找过程用二叉树表示如下:
第一次查找的仍然是22,若往左查找,第二次是12。但若第二次往右查找,则找到的是35,而不是原先的28,然后继续第三次查找,找到25,接着进行第四次查找,找到28,此时查找过程结束。所以查找同一key值,则语句①的执行次数不可能为3,故本题答案是C选项。
13.C
【详解】本题考查Python程序设计相关内容。range函数用于生成一个整数序列,其语法是range(start, stop[, step])。其中start是序列的起始值,stop是序列的结束值(不包括),step是步长,默认为1,即序列中相邻两个数的差。当只传入一个参数时,表示生成从0开始、小于该参数的整数序列;当传入两个参数时,表示生成从start开始、小于stop的整数序列;当传入三个参数时,表示生成从start开始、每次增加step、小于stop的整数序列。结合四个选项,此处只需要传入一个参数去实现显示0-10的数,则应传入11,故本题答案是C选项。
14.A
【详解】本题考查程序设计相关内容。分析程序段,其运行过程如图所示:。输出结果为:9,故本题答案是A选项。
15.D
【详解】本题考查Python函数相关内容。str()函数可以将各种类型的数据转换为字符串,并结合格式化字符串的功能,以适应不同的需求。len()函数用于返回一个对象的长度,即对象中元素的个数。round()函数用来返回一个浮点数的四舍五入值,该函数可以设置返回的浮点数的小数点位数。ord()函数用于从给定字符值中获取数字值,它接受一个字符并返回一个整数,即用于将字符转换为整数,即用于获取ASCII给定字符的值 。abs()函数用于返回数字的绝对值。A选项,len(str(123))-->len("123")-->3,表达式的值为奇数。B选项,round(7.34)-->7,表达式的值为奇数。C选项,(-5)**2+8//3*2-->25+4-->29,表达式的值为奇数。D选项,abs(ord("H")-ord("J"))-->abs(-2)-->2,表达式的值为偶数。故本题答案是D选项。
16.C
【详解】本题考查程序设计相关内容。A选项,由“cur.execute("SELECT COUNT(*) FROM list")”知,data.db文件中有一张名为list的数据表,选项说法正确。B选项,由“cur.execute("CREATE TABLE IF NOT EXISTS list(id INTEGER PRIMARY KEY autoincrement, name text)")”知,list数据表中有两个字段id和name,选项说法正确。C选项,由“ cur.execute('INSERT INTO list(id,name) VALUES(1,"lilei")')”知,list数据表中有记录,选项说法错误。D选项,db.commit()是用于提交事务的方法,在Python中,当你对数据库进行了插入、更新或删除等操作时,这些操作将默认处于一个事务中,为了将这些操作永久保存到数据库中,你需要显式地调用commit()方法来提交事务,只有在调用commit()方法后,对数据库的更改才会生效,所以去掉最后一行的db.commit(),对程序有影响,选项说法正确。故本题答案是C选项。
17.1
【详解】本题考查Python程序设计相关内容。分析程序段,输入t的值为4,t>4不成立,执行else部分,输出d[d[t]],即d[2],故本题答案是:1。
18.身份(或引用、内存地址)
【详解】本题考查Python基础。
在Python中,is 关键字用于比较两个对象的身份(identity),即它们是否是同一个对象。这与使用 == 操作符进行值比较不同,== 比较的是两个对象的值是否相等,而 is 比较的是两个对象在内存中的地址是否相同,即它们是否是同一个对象的引用。故正确答案为:身份(或引用、内存地址)。
19.try 和 except
【详解】本题考查Python。在Python中,异常处理通过try和except关键字来实现。try关键字用于定义可能会引发异常的代码块,except关键字用于捕获并处理try代码块中抛出的异常。通过这种方式,可以增强程序的健壮性和容错性,使得程序在遇到异常情况时能够采取适当的措施,而不是直接崩溃。故答案为:try 和 except。
20.25
【详解】本题考查Python运算符与表达式。在Python中,%代表求模运算,因此表达式125%100的运算结果是25。
21.[6,8,7,3,9]
【详解】本题考查Python程序设计相关内容。分析程序段,a为列表,初始值为[5,2,8,7,3],执行a[0]=6,a值为[6,2,8,7,3];执行del a[1](删除a[1]),a值为[6,8,7,3];执行a.append(9)(在列表末尾添加元素值9),a值为[6,8,7,3,9]。故本题答案是:[6,8,7,3,9]。
22.错误
【详解】本题考查Python基础。
列表(list)由于是可变的(可以添加、删除或更改其中的元素),因此不能用作字典的键。故错误。
23.正确
【详解】本题考查Python基础。
在Python中,当你执行 y = x 这样的语句时,你实际上并没有创建 x 的一个新副本,而是让变量 y 指向了 x 指向的同一个对象。这意味着 x 和 y 都引用了内存中的同一个列表对象,即内存地址相等,故表达式id(x) == id(y)的值为True。故正确。
24.正确
【详解】本题考查Python基础。
在Python 3中,使用内置函数input()接收用户输入时,不论用户输入什么格式的内容(包括数字、字符、特殊符号等),该函数一律将输入内容作为字符串(str)返回。故正确。
25.正确
【详解】本题考查Python基础。
程序功能将字符型数字串转换成数值型输出,输出整数123。故正确。
26. 2,5,1 ans=str(a[i])+','+ans a[i]=int(t) flag==2 and a[i]>a[i-1] b[i-1]=gd
【详解】本题考查数组的应用。(1)若输入数据“2,4,5,3,2,1,”,根据最长摇摆子序列的定义,2-4为负数,4-5也是负数,5-3为正数,故取序列2、5。3-2为正数,2-1为正数,故取1。故正确答案为:2、5、1。(2)列表a用于存储输入的数据元素,列表b用于记录是不是拐点,n为输入的数据元素个数,ans记录最长摇摆子序列的具体元素,函数f(n)用于统计摇摆子序列的长度,若小于3,则不是摇摆子序列,若大于等于3,则构成摇摆子序列。函数f(n)中从后往前遍历b数组,若为True,则i为拐点,将元素a[i]记录到ans中,由于是从后往前遍历数组,因此程序①处代码为ans=str(a[i])+','+ans。若遇到",",表示一个数据结束,将它转换为整数后存入数组a中,因此②处代码为a[i]=int(t)。flag数组用于记录摇摆序列的前一次状态,若为初始状态则为0,若为递增状态则为1,若为递减状态则为2。联系前一个elif,则这次elif情况为:前一次状态为递减,且当前a[i]>a[i-1]时,变换状态为递增。因此程序③处代码为flag==2 and a[i]>a[i-1]。循环中i从1开始进行枚举a数组元素,gd记录是不是拐点,是拐点则为True,否则是False。flag状态未改变则不是拐点,gd值为False。由于flag是摇摆序列的前一次状态,因此状态变换时实际上拐点为i-1,因此程序④处代码为b[i-1]=gd。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$