一、简答题
1、36.字母去重排序
在一列表中产生n个大写字母,删除其中重复字母,并按照A到Z顺序排列输出。同时输出删除字母个数。
例如输入 5 随机产生原始字母:[ "D","H","K","E","H"] 输出:去重后字母排序:["D","E","H","K"] 输出:共删除字母个数:1个。
请编写程序实现上述功能,或补全代码。
import random
\#导入随机数模块
maxn=int(input("输入生成大写字母个数"))
a=[ ]
for i in range(maxn):
c=random.randint(1,26)#随机产生1-26之间的整数
numb=chr(64+c)
①
print("随机产生原始字母:",a)
m,n=0,maxn
while m<n:
i=n-1
while ② :
i=i-1
if i==m:
③
else:
a.remove(a[i])
n=n-1
for i in range(n):
for j in range(len(a)-1,i,-1):
if a[j]<a[j-1]:
④
print("去重后字母排序:",a)
print("共删除字母个数:", ⑤ ,"个")
解析:
首先,我们需要理解题目的要求。题目要求我们生成一系列大写字母,删除其中的重复字母并按照字母顺序排序输出,同时输出删除的字母个数。根据这个要求,我们可以逐步补全代码。
在①处,我们需要将随机生成的大写字母添加到列表a中,所以应该使用append方法。在②处,我们需要找到第一个重复字母的位置,所以需要循环直到i大于起始位置m。在③处,如果找到重复字母,我们跳出内层循环。在④处,我们需要对列表进行排序,可以使用Python内置的sorted函数或者自己实现排序算法。在⑤处,我们需要输出删除的字母个数,即原始列表的长度减去去重后的长度。具体实现可以使用len函数计算列表长度。同时需要注意处理列表中的重复元素,可以使用set去重或者使用列表的remove方法删除重复元素。最后输出排序后的列表和删除的字母个数即可。
2、37.植树问题
如下图所示,在“植树.csv”中记录着2个班级多次植树的信息(第一列为班级名,第二列为本次植树的数量),输出每个班级植树的总数,请你补全代码。
import csv
with open("/data/植树.csv") as f:
h=list( ① )
s1=0
s2=0
for i in range(len(h)):
if int(h[i][0])==1:
s1=s1+int(h[i][1])
if int(h[i][0])==2:
s2=s2+ ②
print(s1,s2)
输出:
368 362
解析:
这个问题是关于读取CSV文件并计算每个班级植树的总数。代码的主要逻辑是打开CSV文件,读取每一行的数据,然后根据班级编号(第一列)将植树数量(第二列)累加到对应的总和中。
对于第一个空①,我们需要使用csv模块的reader函数来读取CSV文件中的数据,因此这里应该填写csv.reader(f)。
对于第二个空②,我们需要将当前行的植树数量加到对应班级的累计总数上,因此这里应该填写int(h[i][1]),即将当前行的第二列数据(即植树数量)转换为整数并累加到s2上。
完整的代码应该是这样的:
import csv
with open("/data/植树.csv") as f:
h = list(csv.reader(f)) # 读取CSV文件中的数据
s1 = 0 # 班级1的植树总数
s2 = 0 # 班级2的植树总数
for i in range(len(h)): # 遍历每一行数据
if int(h[i][0]) == 1: # 如果是班级1
s1 += int(h[i][1]) # 将植树数量累加到s1上
elif int(h[i][0]) == 2: # 如果是班级2
s2 += int(h[i][1]) # 将植树数量累加到s2上
print(s1, s2) # 输出两个班级的总植树数量
运行这段代码后,会输出每个班级的植树总数。题目中给出的输出是368和362,这是假设CSV文件中的数据与题目描述相符的情况下得出的结果。
3、38.合作小组
班里有35位同学,新来的王老师想以随机组合的方式给同学们组建合作小组促进学习,已知同学们的学号范围是1~35号,王老师编写了以下程序来生成5个合作小组,如下图所示,请你帮忙补全代码:
import random#导入随机数模块
numbers=35*[0]#创建35个元素值均为0的列表
flags=35*[False]#创建35个元素值均为False的列表
①
while i<=34:
n=random.randint(1,35)#随机产生1-35之间的整数
if not flags[n-1]:
②
numbers[i]= ③
i+=1
for i in range(5):
print("第"+str( ④ )+"组:",numbers[i*7:7*(i+1)])
解析:
这是一个关于随机组合生成合作小组的程序。程序的主要目的是将班级里的学生随机分配到不同的合作小组中。下面是程序的详细解析:
- 首先,我们导入了随机数模块,为后续生成随机数做准备。
- 创建了两个列表:numbers和flags。numbers用于存储学生的学号,初始值全为0;flags用于标记学生是否已经被分配到小组,初始值全为False。
- 初始化一个变量i为0,用于循环遍历每一个学生。
- 使用while循环,当i小于或等于34时(即所有学生都被考虑在内)进行循环。
- 在循环内部,使用random.randint(1, 35)生成一个随机的学生学号n。
- 判断该学生是否已经被分配到小组,如果没有(flags[n-1]为False),则将其分配到小组,并设置flags[n-1]为True,表示该学生已经被分配。
- 将学生学号n存入numbers列表的相应位置(即第i个位置)。
- i自增1,继续下一轮循环。
- 循环结束后,使用一个for循环来打印每个合作小组的学生学号。这里需要打印前五个小组的学生学号,因此循环范围是i从0到4(共5次)。
- 在打印时,“第”+str(i+1)+"组:"表示当前是第几个小组(从第1组开始)。numbers[i7:7(i+1)]表示从第i组的第一个学生开始,到第i组的最后一个学生结束(共7个学生)的学号范围。这里假设每个小组有7名学生。注意这里使用乘法来定位每个小组的起始和结束位置。因此,在代码中填入的内容分别是:① i = 0;② flags[n-1] = True;③ n;④ i+1 或 i。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!