一、编程题
1、36.下面代码,在字典a中查找身高为137的人,请将代码中缺失部分补充完整。
a = {'小赵':136,'小钱':141,'小孙':146,'小李':138,'小周':142,'小吴':134,'小郑':137,'小王':143}
keys = a.keys()
b = 0 # 用于判断查找是否成功
for key in keys:
value = a[ ① ]
if ② == 137:
print('找到身高为137的人是: ', key)
b = b+1 # 有找到的人
③ # 退出循环
if b == 0 :
print('本次查找,未找到有身高为137的同学。 ')
参考答案:① a[key]② a[key]③ break
解析:【喵呜刷题小喵解析】:
首先,我们来看代码,这是一个在字典a中查找身高为137的人的代码。
①处,我们需要获取字典a中每个键对应的值,即人的身高。在Python中,我们可以通过字典的键(key)来获取对应的值(value),所以此处应该填入`a[key]`。
②处,我们需要判断这个人的身高是否等于137。由于我们需要判断的是字典a中每个键对应的值,即人的身高,所以此处应该填入`a[key]`。
③处,如果找到了身高为137的人,我们需要退出循环。在Python中,我们可以使用`break`语句来退出循环。
最后,如果循环结束后都没有找到身高为137的人,那么输出提示信息。
所以,完整的代码应该是:
```python
a = {'小赵':136,'小钱':141,'小孙':146,'小李':138,'小周':142,'小吴':134,'小郑':137,'小王':143}
keys = a.keys()
b = 0 # 用于判断查找是否成功
for key in keys:
value = a[key]
if value == 137:
print('找到身高为137的人是: ', key)
b = b+1 # 有找到的人
break # 退出循环
if b == 0 :
print('本次查找,未找到有身高为137的同学。 ')
```
2、37.张老师手上有一份学生成绩单(cj.txt),成绩单上只有每位学生的各科成绩,而张老师希望能看到各科成绩的所有学生的平均分,以下代码可以实现平均分的计算,并按示例格式排版,请补充代码。
示例:
with open('/data/cj.txt', ① ) as f:
string = f.read()
data = string.split('\n')
data.pop(0)
lis = []
for i in data:
new = i.split('\t')
lis.append(new)# 将分割得到的列表追加到空列表中,lis 为二维
lis1 = ['平均分']
for i in range(1,4):# 循环3次,因为需要计算3个科目的平均分
sum_ = ②
average = round(sum_ / 3)
lis1.append(str(average))
s = "\t".join(lis1)
res = string + s
with open('cj1.txt', 'w') as f:
f.write(res)
参考答案:① 'r'② sum(float(new[i]) for new in lis)
解析:【喵呜刷题小喵解析】:
1. 首先,我们需要在`open`函数中指定文件打开模式为读取模式,即'r',所以①处应填'r'。
2. 接下来,我们需要计算平均分,根据给出的示例,需要循环3次(计算3个科目的平均分)。因此,我们需要将每个学生的每个科目的成绩累加,再除以3。这可以通过`sum`函数和`float`函数来实现,其中`float`函数用于将成绩从字符串转换为浮点数,`sum`函数用于求和。所以,②处应填`sum(float(new[i]) for new in lis)`。这里,`new[i]`表示每个学生的第i个科目的成绩,`new`表示每个学生的成绩列表,`lis`表示所有学生的成绩列表。
3、38.工厂有一台检测设备用于检测器件,各个器件在不完全相同时刻送达,且检测时长各有不同。现在要按器件的送达时间(若送达时间相同则按检测时长)进行排序后再送检,送达时间和检测时间都是按升序排序。已知各个器件原始信息存在列表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( ④ )
参考答案:```pythonfor i in range(len(qj)-1):for j in range(0, len(qj)-i-2):if qj[j][0] > qj[j+1][0] or (qj[j][0] == qj[j+1][0] and qj[j][1] > qj[j+1][1]):qj[j], qj[j+1] = qj[j+1], qj[j]print(qj)```
解析:【喵呜刷题小喵解析】:
这个问题涉及到冒泡排序,我们按照送达时间(若送达时间相同则按检测时长)进行排序。首先,我们从外层循环开始,每次循环都会比较相邻的两个器件,如果前一个器件的送达时间大于后一个器件的送达时间,或者两个器件的送达时间相同但前一个器件的检测时长大于后一个器件的检测时长,我们就交换这两个器件的位置。这样,经过多次循环后,我们就能得到一个按送达时间和检测时长排序的器件列表。
在给出的代码框架中,我们需要填写以下部分:
①:这里应该填写`len(qj)-i-1`,因为每次外层循环后,最大的器件已经被放到了正确的位置,所以内层循环只需要比较到`len(qj)-i-1`。
②:这里应该填写`qj[j][0] > qj[j+1][0]`,表示比较两个器件的送达时间。
③:这里应该填写`qj[j][1] > qj[j+1][1]`,表示当两个器件的送达时间相同时,比较它们的检测时长。
④:这里应该填写`qj`,表示输出排序后的器件列表。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!