工厂有一台检测设备用于检测器件,各个器件在不完全相同时刻送达,且检测时长各有不同。现在要按器件的送达时间(若送达时间相同则按检测时长)进行排序后再送检,送达时间和检测时间都是按升序排序。已知各个器件原始信息存在列表qj中:qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]],其中器件信息[2,1]表示器件送达时间是2,检测时长是1,其他器件信息类推。现在编写Python程序对各个器件进行排序,并重新输出。排序后的器件列表如下,请你在划线处完善程序: qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]] for i in range(len(qj)-1): for j in range(0, ① ): if ② or (qj[j][0]==qj[j+1][0]and ③ ): qj[j],qj[j+1]=qj[j+1],qj[j] print( ④ )

正确答案:①len(qj)-i-1 ②qj[j][0]>qj[j+1][0] ③qj[j][1]>qj[j+1][1] ④qj
答案解析
①本题考查的是对二维列表进行冒泡排序。外循环控制排序趟数,内循环控制排序比较的次数以及比较的起止位。外循环变量i从0开始,内循环变量j从0开始,显然终值是len(qj)-1-i,比较过程从前往后两两相比。因此①处填写的步长应为len(qj)-1-i;
②根据题目意思,比较依据先是送达时间(从小到大),若相同则比较检测时长,因此②处表达的应该是相邻两个器件的送达时间相比,从交换语句来看第j项被交换至j+1项,从而判定②处答案为qj[j][0]>qj[j+1][0];
③qj[j][0]表示送达时间,qj[j][1]则表示的是检测时长,从qj[j][0]==qj[j+1][0]可知此处表示送达时间相同的情况下满足何种条件第j项会和第j-1项交换,显然要比的是检测时间,故而③处填写qj[j][1]>qj[j+1][1]。
④根据题意,最后需要输出排序后的器件列表,因此④处填写的器件列表名称qj。
评分标准:
(1)len(qj)-1-i;(4分)
(2)qj[j][0]>qj[j+1][0];(4分)
(3)qj[j][1]>qj[j+1][1];(4分)
(4)qj。(4分)
试卷来源:202309 青少年软件编程等级考试Python三级真题