根据网上选课系统的报名导出数据(存放在“社团选课.xlsx“文件中)(如图 a 所示),小北又设计了程序对该名单做了进一步处理,生成了以班级名称为名(如图a 所示) 和以社团名称为名(如图 b 所示) 的电子表格文件,以便分发给对应的社团指导老师和各班班主任。
生成图 b 所示名单的 python 程序如下,该程序的功能:先对导出数据按社团名称进行分类,再对选报同一社团的学生按班级为关键字进行升序排序,最后生成相应的社团名单。请 在横线处填入合适的代码。

import pandas as pd
def read_file(filename):
#读入电子表格文件,并将表中的数据转换成列表,代码略
defsave_file(a):#保存名单至电子表格文件
df=pd.DataFrame(a,columns=[“班级“,“姓名“,“选报社团“])
df.to_excel (a[0][2]+“.xlsx“,index=False)
a=read_file(“社团选课.xlsx“)
n=len(a)
foriinrange(1,n):#按社团名称(参照字符的编码大小) 进行升序排序
forjinrange(0,n-i):
if a[j][2]>a[j+1][2]:
a[j],a[j+1]=a[j+1],a[j]
#统计各社团人数,存放在列表 rs 中,rs=[[“SDV“,32],„],代码略
s=0
foriinrange(len(rs)):
①
left,right=s,s+num-1
while left<right:
imin=imax=left
forkinrange(left+1,right+1):
if a[k][0]<a[imin][0]:
imin=k
elifa[k][0]>a[imax][0]:
imax=k
ifimin!=left:
a[imin],a[left]=a[left],a[imin]
ifimax==left:
②
ifimax!=right:
a[imax],a[right]=a[right],a[imax]
left=left+1
right=right-1
③
s=s+num
save_file(a[s:])
【考点】进入VB程序设计环境.
【答案】num=rs[i][1]imax=imin save_file(a[s:s+num])
【解答】
【点评】
声明:本试题解析著作权属菁优网所有,未经书面同意,不得复制发布。
发布:2024/4/20 14:35:0组卷:3引用:2难度:0.3
相似题
-
1.编写VB程序,功能是根据A城和B城同一时间段内的温度数据,计算两城温差(A城温度-B城温度)A城数据和B城数据分别为包含若干个记录的序列,其中,A城每个记录包含温度及其截止时间,B城每个记录包含温度及其持续时长。两城温差计算结果表示为若干个记录的序列,每个记录包含温差及其持续时长。持续时长是指同一温度(或温差)保持不变的最大时长。示例见下表。
时间 第1小时 第2小时 第3小时 第4小时 第5小时 第6小时 第7小时 A城温度 30 30 33 33 31 31 32 A城数据 温度 30 33 31 32 截止时间 2 4 6 7 B城温度 20 20 20 22 21 21 22 B城数据 温度 20 22 21 22 持续时长 3 1 2 1 计算结果 温差 10 13 11 10 持续时长 2 1 1 3
表中,A城数据有4个记录,其中第1个记录为(温度30,截止时间2),第2个记录为(温度33,截止时间4),这表明从开始到第2小时的温度都是30,此后到第4小时的温度都是33.B城数据有4个记录,其中第3个记录为(温度21,持续时长2),这表明第5、第6这2个小时的温度都是21.两城温差计算结果的第4个记录为(温差10,持续时长3),这表明第5、第6、第7这3个小时的温差都是10。
(1)若将示例中A城数据修改为3个记录,依次是(温度30,截止时间4)、(温度31,截止时间6)、(温度32,截止时间7),B城数据不变,则两城温差计算结果中第1个记录为(温差10,持续时长
(2)实现上述功能的VB程序如下,请在横线处填入合适的代码。
Const m=1000'温度数据和温差数据包含的记录数都少于1000
Dim na As Integer,nb as integer'A、B城数据分别有na和nb个记录
Dim ha(m)As Integer'ha(i)存储A城第i个记录中的温度
Dim ta(m)As Integer'ta(i)存储A城第i个记录中的截止时间
Dim hb(m)As Integer'hb(i)存储B城第i个记录中的温度
Dim tb(m)As Integer'tb(i)存储B城第i个记录中的持续时长
Dim h(m)As Integer'h(i)存储计算结果第i个记录中的温差
Dim t(m)As Integer't(i)存储计算结果第i个记录中的持续时长
Private Sub Command l _Click ( )
Dim i As Integer,j As Integer
Dim p0 As Integer,p1 As Integer,diff As Integer
Dim n As Integer'两城温差数据的记录个数
'读取两城数据,存入变量na,nb及数组ha,ta,hb,tb中,代码略
For i=2 To nb
tb(i)=①'将B城第i个记录中的持续时长转换为截止时间
Next i
i=1:j=1
n=0
p0=0
Do While i<na And i<=nb
diff ha(i)-hb(j)
pl=ta(i)
If ②Then i=i+1
If p1>=tb (j) Then
pl=tb(i)
j=j+1
End if
If n=0 Or diff<>h(n) Then
n=n+l
h(n)=diff
t(n)=pl-p0
Else
③
End If
p0=pl
Loop
'输出两城温差数据,代码略
End Sub发布:2024/6/27 10:35:59组卷:10引用:1难度:0.1 -
2.根据前面几题的分析发现,部分社团的选报人数超过了 40 人,由于人数太多不便于开展活动,学校团委决定将人数超过 40 人的社团随机分成两个班。小北使用链式结构实现了该分班功能。现以对“MULA 商社”进行分班为例(“MULA 商社.xlsx”文件截图如第 15 题图c 所示),具体实现程序如下,请在横线处填入合适的代码。
import pandas as pd
importrandom
df=pd.read_excel(“MULA 商社.xlsx“)
namelist=df.values.jye.ai( )#将数据转换成列表
#将数据转换成列表后,namelist=[[101,“邓**“,“MULA 商社“],„]
k=0
data=[[““fori in range(2)]for j in range(len(namelist))]
foriteminnamelist:#初始化链表结构
data[k][0]=item
data[k][1]=k+1
k+=1
①
head=0
n=length=len(data)#每次抽取时剩余人数
namelist1=[]
namelist2=[]
foriinrange(n//2+1):#生成 MULA 商社 1 班名单
t=random.randint(0,length-1)
p=head
q=data[p][1]
ift==0:
namelist1.jye.ai(data[head][0])
②
else:
while t!=1:#从头节点开始查找第 t 个节点所在位置
p=q
q=data[p][1]
t=t-1
namelist1.jye.ai(data[q][0])
③
length=length-1
#生成MULA 商社 2 班名单及将生成的两份名单保存成电子表格文件,代码略发布:2024/6/27 10:35:59组卷:1引用:1难度:0.3 -
3.小叶使用VB编写程序,功能如下:在文本框Text1中输入一个二进制或十六进制数,单击“转换”按钮Command1,在文本框Text2中显示该数对应的十进制数。程序运行界面如图所示。
(1)实现上述功能的VB程序如下,请在横线处填上合适的代码。
(2)运行程序,在文本框Text1中输入A2H,则在文本框Text2中显示发布:2024/6/27 10:35:59组卷:0引用:1难度:0.4