内容正文:
第三章 算法的程序实现
一、选择题
1.函数math.trunc(6.88)的值是( )
A.6.88 B.6 C.7 D.6.8
2.matplotlib 是一个绘图库,使用其中的pyplot子库所提供的函数可以快速绘图和设置图表的坐标轴、坐标轴刻度、图例等。以下哪个函数可以用来绘制线形图( )
A.plot B.bar C.scatter D.show
3.列表range(1,5)包含的元素是( )
A.[0,1,2,3,4,5] B.[1,2,3,4,5] C.[1,2,3,4] D.[0,1,2,3,4]
4.定义如下函数:
def p(x, y):
if x%y==0:
print(y)
else:
p(y, x%y)
print(y)
执行语句p(64,18)后,依次输出的结果为( )
A.18,10,8,2 B.2,8,10,18 C.4,10,18 D.18,10,4
5.执行程序后,x、y的值分别是( )
x=3
y=x+4
print(x+3,y+2)
A.6 7 B.6 9 C.3 7 D.3 9
6.在Python中,可使用函数ord()将字符转换为对应存储编码,已知“5”的ASCII码为“53”,则ord('1')运行的结果是( )
A.76 B.118 C.55 D.49
7.已知链表结构a[i][0]表示元素,a[i][1]表示下一个元素的下标,head表示开头元素,在已知有序的链表a中插入数值p。代码如下:
a=[[0,1],[3,2],[5,3],[6,-1]]
head=0
p=4
tmp=head
while a[tmp][1]!=-1 and :
tmp=a[tmp][1]
a.append([p, ])
a[tmp][1]=len(a)-1
请在划线处依次填上合适代码( )
①a[tmp][0]<p; ②a[a[tmp][1]][0]<p; ③tmp; ④a[tmp][1]
A.①③ B.①④ C.②③ D.②④
8.有如下Python程序段:
lst = [5,9,2,6,4,7,3,0]
que = [0] * len(lst)
head = tail = 0
i = 0
while i < len(lst):
if lst[i] % 2 == 0:
que[tail] = lst.pop(i)
#lst.pop(i)删除列表lst中索引为i的元素,返回删除的元素
tail += 1
else:
i += 1
while head != tail:
lst.append(que[head])
head += 1
执行该程序段后,lst的值为( )
A.[5, 9, 7, 3, 2, 6, 4, 0] B.[5, 9, 7, 3, 0, 4, 6, 2]
C.[2, 6, 4, 0, 5, 9, 7, 3] D.[3, 7, 9, 5, 0, 4, 6, 2]
9.下列Python程序段的运行结果是( )
s=0
for i in range(1,11):
s=s+i
print(s)
A.55 B.15 C.0 D.5
10.在Python中函数range(6,10,2)生成的列表中元素的个数是( )。
A.2 B.3 C.4 D.5
11.Python表达式7%2**3+abs(19//2-10)*len("123")的值是( )
A.2 B.4 C.8 D.10
12.在Python语言中,运行下面程序后,变量m的值为( )
a=8
b=16
c=32
if a>b:
m=a
else:
m=b
if c>m:
m=c
print(m)
A.1 B.8 C.16 D.32
13.阅读下列Python程序块,运行结果为( )
s=0
while s<=20:
print(s)
s=s+7
A. B. C. D.
14.在Python语言中,以下能作为变量名的是( )
A.@1 B.a_1 C.1a D.for
15.在Python程序设计语言当中,数据输出通过( )函数来实现。
A.output() B.input() C.print() D.int()
16.有如下程序段:
a=[30,10,20,11,12,50]
d=[0]*6;max=0;n=len(a)
for i in range(1,n):
for j in range(i):
if a[j] < a[i]:
d[i]+=1
if d[i]>max:
max=d[i]
执行程序后,变量max的值是( )
A.2 B.3 C.4 D.5
二、填空题
17.Python版“石头剪刀布”人机对战小游戏的代码运行结果及部分代码如下(不考虑输入有效性判断等)。
import random
hand=["石头","剪刀","布"]
s=input("请出拳:")
p=hand.index(s) #取s在列表hand中对应元素的序号
c=random.randint(0,2) #随机生成0,1,2三个数代表计算机出拳
print("人-"+s+",机-"+________)
if p-c in[-1,2]:
print("赢")
elif p-c==0:
print("平")
else:
print("输")
请根据程序运行结果补全代码: 。
18.判断正整数奇偶性的程序如下,请将程序填写完整。
x=int(input(“请输入一个正整数:”))
if :
print(x,”是偶数”)
else:
print(x,”是奇数”)
19.运行代码print(3+6 == 6),输出的结果是 。
20.Python可在 编辑器中编辑程序,并使用快捷键 调试程序。
21.写出运行结果。
a,b,c=5,3,6
a,b=b,a
print("输出a,b的值:",a,b)
结果:
三、操作题
22.小天收集了浙江省某年各地市年龄段数据,保存在“T14.xlsx”文件中,如图a所示。为统计分析各地市不同年龄段人口占比,编写Python程序,输出结果如图b所示。
图a
图b
请回答下列问题:
(1)为统计分析各地市不同年龄段人口占本地市人口比例,编写 Python 代码如下,划线处①应填入的代码为 (单选,填字母),划线处②应填入的代码为 。
A.df.groupby("地市",as_index=False).count()
B.df.groupby("地市",as_index=False).sum()
C. df.groupby("地市",as_index=True).mean()
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel("T14.xlsx")
df1 = ① # 计算各地市不同年龄段的人数
print ("地 市 17岁以下 18-34岁 35-59岁 60岁及以上")
#“df1.values.tolist()”实现将df1转换为二维列表。列表中每个元素包含5个数
#据项,分别对应地市名称和该地市 4 个年龄段人数总计,如['丽水市', 501421, ...]
df2=df1.values.tolist()
x,y = [],[]
for area in df2:
for c in range(len(area)):
if c == 0:
x.append(area[0])
print(area[0], end=" ")
else:
sm = sum(area[1:]) #sum函数实现对序列求和
t= ②
print('%.2f' %(t), end="% ") #按设置格式输出
if c == 4:
y.append(t)
print()
plt.title("浙江省各地市60岁以上人数占本地市总人口比例", fontsize=24)
plt.bar(x, y) #绘制60岁及以上人数占本地市总人口比例柱形图
#设置绘图参数,显示如图c所示,代码略。
图c
(2)由图c可知,60岁及以上人数占本地市人口比例超过25%的地市有 个。
(3)小天编写 mygroupby 函数模拟实现上述分类汇总功能,计算各地市不同年龄段的人数,结果以列表形式返回。函数代码如下,请在划线处填入合适的代码。
#df1为二维列表,列表中每个元素包含6个数据项,内容如图a所示;函数返回值dfs格式同题(1)二维列表df2
def mygroupby(df1):
dfs=[] #创建一个空列表dfs
for row in df1:
.
if n>0:
for j in range(n):
if row[0]==dfs[j][0]:
break
if n==0 or row[0] != dfs[j][0]:
dfs.append([row[0],0,0,0,0])
j=n
for k in range(2,len(row)):
return dfs
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查Python函数相关内容。math.trunc()函数用于获取浮点数的整数部分,即截断小数部分。math.trunc(6.88)=6,故本题答案是B选项。
2.A
【详解】本题考查pyplot子库函数相关内容。plot是绘制折线图,scatter是绘制散点图,bar绘制柱形图,show是显示绘图对象。故本题答案是A选项。
3.C
【详解】本题考查Python函数应用。在Python中,range(start, stop) 函数会生成一个从 start 开始到 stop-1 结束的整数序列。这个序列不包含 stop 这个数。对于 range(1, 5),它生成的整数序列是从1开始,到4结束,因此包含的元素是1, 2, 3, 4。因此,range(1, 5) 包含的元素是 [1, 2, 3, 4]。故答案为C选项。
4.B
【详解】本题考查Python程序设计相关内容。函数p(x,y)调用四次,依次是p(64,18),p(18,10),p(10,8),p(8,2)。函数每调用一次输出一个y值,输出的顺序跟调用函数的顺序是逆序的,即先输出p(8,2)时的y值2,然后依次是8,10,18。故本题答案是B选项。
5.B
【详解】本题考查Python程序设计相关内容。分析程序段可知,x+3-->3+3-->6;y+2-->x+4+2-->9。输出结果为:6 9。故本题答案是B选项
6.D
【详解】本题考查Python函数相关内容。Python语言中的“ord”是将字符转换为对应存储编码的函数,编码值以十进制数形式显示。5-1=4,53-4=49。故本题答案是D选项。
7.D
【详解】本题考查Python程序设计相关内容。本题涉及到链表相关知识。由题意可知链表的逻辑结构是:0->3->5->6,数值升序排序。while循环从head开始查找第一个比数值p大的节点位置,而由语句a[tmp][1]=len(a)-1可知,指针tmp指向的是p的前一个节点,所以当循环结束的时候,指针tmp指向链表中第一个比p大的节点的前一个节点,故在while循环中的条件应该是a[a[tmp][1]][0]<p,故本题答案是D选项。
8.A
【详解】本题考查Python程序。这段代码的目的是将列表lst中的所有偶数移动到列表的末尾,同时保留它们的相对顺序。它通过以下步骤实现:首先,创建一个长度与lst相同的新列表que,并初始化头指针head和尾指针tail为0。然后,使用一个循环遍历列表lst中的每个元素。如果当前元素是偶数,则将其从lst中删除,并将其添加到que的末尾。同时,将尾指针tail加1。否则,将索引变量i加1以检查下一个元素。最后,使用另一个循环将que中的所有元素添加回lst的末尾。故lst中的数据是[5,9,7,3,2,6,4,0]。故答案为:A。
9.A
【详解】本题主要考查Python循环语句。for循环中i的变化范围是从1~10,循环结束时i=10,s=0+1+2+3+4+5+6+7+8+9+10=55。故选A。
10.A
【详解】本题考查Python中range函数的相关内容。range(6,10,2)是在[6,10)范围内取数,步长为2。取出的数为6、8。即列表中元素个数为2。故本题答案是A选项。
11.D
【详解】本题考查Python运算符与表达式相关内容。在Python中,指数运算符(**)是最高优先级的运算符。7%2**3=7%8=7,abs(19//2-10)=1,len("123")=3,最终结果:7+1*3=10。故本题答案是D选项。
12.D
【详解】本题考查Python程序设计相关内容。分析代码段可知,该代码段功能是求abc三数的最大值,运行程序后,m值为32。故本题答案是D选项。
【点睛】
13.A
【详解】本题考查Python循环结构的应用。s初值为0,循环条件是s<=20,先输出s的值再将s递增7,因此输出s的值依次是0、7、14。故选A。
14.B
【详解】本题考查Python变量的命名。变量的命名规则有:只能以字母或下划线开头,不能包含特殊符号,不能是关键字。因此能作为变量名的是a_1。故选B。
15.C
【详解】本题考查Python函数的描述。Python 在程序设计语言当中,数据输出通过print()函数来实现。input()是输入函数,int () 函数用于将一个字符串或数字转换为整型。故选C。
【点睛】
16.D
【详解】本题考查的是Python循环嵌套。阅读程序可知,d 数组存储 i 号位前有多少个比 a[i]小的元素个数。max 为 d 数组中元素值的最大值。执行后d 数组为[0, 0, 1, 1, 2, 5],故max的值为5,选项D正确。
17.hand[c]
【详解】本题考查Python程序设计相关内容。print是输出,这里要输出人和机器分别出什么。c是机器出的手势在列表hand中对应元素的序号,其手势开始表示为:hand[c],故此处答案为:hand[c]。
18.x%2==0
【详解】本题考查Python分支结构。在这段程序中,我们需要判断输入的正整数x是否为偶数。根据整数的奇偶性质,一个整数除以2的余数为0时,它就是偶数。因此,我们可以使用取余运算符(%)来判断x是否能被2整除,如果余数为0,则x是偶数,否则是奇数。故答案为:x%2==0。
19.False
【详解】本题考查Python运算符与表达式相关内容。3+6==6-->9==6-->False。故本题答案是:False。
20. IDLE F5
【详解】本题考查Python编辑器的描述。Python可在IDLE编辑器中编辑程序,并使用快捷键F5调试程序。
21.输出a,b的值:3,5
【详解】本题考查Python语句执行。a=5,b=3,c=6,a,b=b,a表示交换a和b的值,此时a=3,b=5,因此输出结果是:输出a,b的值:3,5。
22. B area[c]/sm*100 5 n=len(dfs) dfs[j][k-1]=dfs[j][k-1]+row[k]
【详解】本题考查Python程序设计相关内容。本题涉及到pandas基础语句、数据分析相关知识。
(1)①处,题目说计算各地市不同年龄段的人数,A选项,count()其实相当于是数单元格的数量,不符合题意;B选项,sum()是将单元格内的数字求和,符合题意;C选项,mean()算平均值,不符合题意。故处答案为:B。②处,前文x.append(area[0]),说明我们往x里面添加的是地市名字,从后文y.append(t),以及print('%.2f' %(t), end="% ")#按格式输出。还有plt.bar(x,y)和对应的柱形图(x轴地市名,y轴百分比)。我们能够知道t就是60岁及以上年龄段占本地市人口比例。c是内循环的变量,相当于是列索引,c=0对应地市名,c=1对应17岁以下c=2对应18-34岁...,以此类推所以答案为area[c]/sm*100。故处答案为area[c]/sm*100。
(2)从图中观察,柱体高度超过25的有5个,故本题答案是:5。
(3)首先先看注释,说到df1和图a数据一样。返回值dfs 像[[‘丽水市’,501421,数字,数字,数字],[‘杭州市’,数字,数字,数字,数字]...]。其实就是说如何将图a中各地市内的不同县市分别计算不同年龄段的人数sum 。然后各地市各一个list表达出来。第1空,观察下方代码2个if ,有提到n>0和n==0,n在前面却没有赋值,所以在④处n应当体现赋值,但暂时不知道该如何赋值;⑤处体现计算sum值。分析代码段:
for j in range(n):
if row[0] == dfs[j][0]:
break #2找到当前row数据所属地级市,属于dfs的哪一行(即j索引) dfs[j][0]即地级市名字
if n==0 or row[0] !=dfs[j][0]:
dfs.append(row[0],0,0,0,0]) #3该地级市还未存在,则按照返回值要求的格式添加初始值,方便后续的sum计算
j=n #
for k in range(2,len(row)):
⑤____从前面的分析#1可知,本处为计算sum,需要将4种不同年龄段的总人数加起来(迭代法)
k=2时,dfs[j][k-1]代表当前地市的17岁以下,row[k]为当前数据的17岁以下;k=3时,dfs[j][k-1]代表当前地市的18-34岁,参考#2的说明和#3处的初始化数据格式。所以每次应当累加当前row所在的对应年龄段数据。所以⑤处答案为 dfs[j][k-1]=dfs[j][k-1]+row[k]。最后,推导n到底应该是什么呢?从#2可知,需要从当前dfs中找到当前row数据所属地级市所在行,所以n应当为当前dfs的行数,故④处答案为 n=len(dfs)。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$