刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

37.学生排序
对某年级的学生按身高及性别进行排序。要求女生在前、男生在后,性别相同的按身高升序排列。所有学生信息的数据格式例如[[“男”,“徐杰”,145],[“女”,“王梓静”,138]……],其中[“男”,”徐杰”,145]表示其中一位学生的信息,实现该问题解决的Python程序如下,请将程序补充完整。
"""将全体学生的身高性别数据存入列表st中,测试列表如下:"""
st = [["男", "徐杰", 145], ["女", "王梓静", 138], ["女", "李妹", 135], ["男", "张小坤",148]]
​ ①
for i in range(n-1):
for j in range(0, ② ):
​ if st[j][0]==st[j+1][0] and st[j][2]> ③ :
​ st[j],st[j+1]=st[j+1],st[j]
​ elif st[j][0]=="男" and st[j+1][0]=="女":
​ st[j],st[j+1]= ④
print(st)

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

题目要求按照学生的性别和身高进行排序,其中女生需要在男生之前,性别相同的按身高升序排列。给出的程序是一个插入排序的框架,需要根据题目要求进行适当的修改和补充。

首先,我们需要明确排序的规则:女生在前,男生在后;性别相同时,按身高升序排列。因此,我们可以使用插入排序算法来实现这个排序规则。在插入排序中,我们逐个遍历列表中的元素,将其插入到已排序的部分的合适位置。

对于外层循环,我们从列表的第二个元素开始遍历到最后一个元素。对于内层循环,我们需要比较当前元素和已排序部分的元素,根据规则确定是否需要交换位置。具体实现时,我们可以使用嵌套的循环来实现。外层循环遍历列表中的每个元素,内层循环从已排序部分的开始位置到当前元素的前一个位置。在内层循环中,我们根据性别和身高的规则进行比较和交换。

关于具体的代码实现,我们需要补充和完善以下几点:

① 在程序开头添加排序的代码实现部分。这里我们使用插入排序算法进行排序。插入排序的基本思想是将待排序的元素一个个插入到已排序的部分中,直到整个列表都排好序为止。在这个基础上,我们可以根据题目的规则进行改进和补充。

② 内层循环的范围应该根据排序算法的具体实现来确定。如果我们在外层循环中已经确定了当前元素的位置,那么内层循环可以从已排序部分的开始位置开始遍历到当前元素的前一个位置。如果我们在外层循环中没有确定当前元素的位置,那么内层循环可以从列表的开始位置开始遍历到当前元素的位置减去一。这里我们可以选择第二种情况,直接使用 range(len(st)) 作为内层循环的范围。当然,也可以考虑根据外层循环的索引 i 来确定内层循环的范围为 range(i, len(st))。具体实现可以根据个人习惯和需求来选择。

③ 在比较身高时,我们需要获取当前元素的身高和下一个元素的身高进行比较。这里我们使用 st[j][2] 来获取当前元素的身高值。同时,我们需要判断下一个元素的性别是否相同以及身高是否大于当前元素的身高值来确定是否需要交换位置。如果性别不同或者身高更小,则不需要交换位置;如果性别相同且身高更大,则需要交换位置。如果下一个元素的性别为女且当前元素的性别为男(即男女相邻),则需要交换两者的位置以满足女生在前的要求。因此,这里我们使用 st[j][0]==st[j+1][0](性别相同)和 st[j][2]>st[j+1][2](身高更大)作为条件进行判断和交换操作。交换操作可以使用 Python 中的多重赋值语句来实现。最后,我们打印出排好序的列表 st 来验证程序的正确性。

创作类型:
原创

本文链接:37.学生排序对某年级的学生按身高及性别进行排序。要求女生在前、男生在后,性别相同的按身高升序排列。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share