一、编程题
1、36.某班级期中考试成绩汇总在文件“score.csv”中,包含了语文、数学、英语三科的分数,数据内容如下图显示:
小明编写了如下程序,读取成绩文件中的数据,并分别计算语文、数学、英语三科成绩的平均分,请你补全代码。
import csv
ChineseNum=0
MathNum=0
EnglishNum=0
num=0
with open('/data/score.csv',encoding='utf-8') as csv_file:
row = csv.reader(csv_file, delimiter=',')
next(row) # 读取首行
for r in row:
ChineseNum += float( ① )
MathNum += float( ② )
EnglishNum += float( ③ )
num += ④
print("语文平均成绩是:%.2f"%(ChineseNum/num))
print("数学平均成绩是:%.2f"%(MathNum/num))
print("英语平均成绩是:%.2f"%(EnglishNum/num))
参考答案:① r[0]② r[1]③ r[2]④ 1
解析:【喵呜刷题小喵解析】:
根据题目中的描述,程序需要读取“score.csv”文件中的数据,并分别计算语文、数学、英语三科成绩的平均分。
首先,程序已经定义了四个变量:ChineseNum(语文总分)、MathNum(数学总分)、EnglishNum(英语总分)和num(总人数)。
接下来,程序打开“score.csv”文件,并使用csv.reader()函数读取文件中的数据。在读取数据之前,程序使用next(row)读取了首行,即列名。
然后,程序使用for循环遍历文件中的每一行数据。在循环中,程序需要获取每行数据中的语文、数学、英语三科的分数,并分别累加到对应的变量中。
根据题目中的描述,语文、数学、英语三科的分数分别位于每行数据的第1、2、3列。因此,在for循环中,程序可以使用r[0]、r[1]、r[2]分别获取每行数据的语文、数学、英语分数。
最后,程序需要计算语文、数学、英语三科成绩的平均分。由于每行数据代表一个学生的成绩,因此程序需要将num加1,以计算总人数。在计算平均分时,程序需要将ChineseNum、MathNum、EnglishNum分别除以num。
因此,在for循环中,程序应该使用r[0]、r[1]、r[2]分别获取每行数据的语文、数学、英语分数,并将num加1。最终,程序使用print()函数输出语文、数学、英语三科成绩的平均分。
2、37.新学期到了,学校接收了一批捐赠的图书,小明编写了一个简单的程序用来管理图书,并支持借阅功能。为了提高查找图书的效率,小明使用了二分查找法来设计图书借阅功能。以下是小明编写的图书借阅管理程序,请你补全代码。 library=dict() #用字典生成一个图书管理数据结构(字典的键为编号,字典的值为['书名',本数]) #书籍入库 nums=len(library) #先计算图书编号总数 library[nums+1]=['红楼梦',5] #在编号总数的基础上继续添加新书:library[新编号]=['书名',本数] library[nums+2]=['西游记',10] library[nums+3]=['水浒传',5] library[nums+4]=['三国演义',10] print(library) blist=list(library.keys()) #按书名借阅: bookname=input('请输入借阅图书名称:') min_v = blist[0] max_v = blist[-1] turns=0 while min_v <= ① : turns += 1 cur = (min_v + max_v) ② print(cur) if library[cur][0] == ③ : if library[cur][1] > 0: library[cur][1] -= ④ print('《%s》借阅成功!'%bookname) else: print('抱歉,您选择的书籍已被借完!') break elif blist[cur-1] > cur: min_v = ⑤ else: max_v = ⑥ print("经过%d轮二分查找,完成图书的搜索。"%turns)
解析:【喵呜刷题小喵解析】:
首先,我们分析题目中给出的代码。小明使用了一个字典来存储图书信息,字典的键是图书的编号,值是图书的名称和数量。他希望通过二分查找法来快速找到用户想要借阅的图书。
在二分查找法中,我们需要维护一个有序序列,并在每次查找时通过比较中间元素来缩小查找范围。在这个程序中,小明使用了一个列表来存储图书的编号,并通过比较中间编号来查找用户想要借阅的图书。
接下来,我们分析代码中的空格部分:
① max_v:我们需要比较中间编号是否小于等于最大编号,如果小于等于,则继续查找,否则结束查找。
② //2:我们需要计算中间编号,使用整除运算符 // 来确保结果是整数。
③ bookname:我们需要比较中间编号对应的图书名称是否等于用户想要借阅的图书名称。
④ 1:如果中间编号对应的图书数量大于0,则借阅成功,并将图书数量减1。
⑤ cur+1:如果中间编号对应的图书名称不等于用户想要借阅的图书名称,且前一个编号大于中间编号,则更新最小编号为中间编号加1。
⑥ max_v-1:如果中间编号对应的图书名称不等于用户想要借阅的图书名称,且后一个编号小于中间编号,则更新最大编号为中间编号减1。
最后,我们输出经过多少轮二分查找完成图书的搜索。
因此,根据以上分析,我们可以得出答案。
3、38.某班“天天向上”小组共有6个同学,姓名和身高数据分别存放在列表a中,编写程序实现小组同学按身高从高到低输出名单,运行结果如图所示: 程序代码如下,请在划线处补充完整:a=[["李洪全",135],["王倩倩",154],["吴乐天",148],["周立新",165],["鲁正",158],["杨颖颖",150]]for i in range(1,len(a)): for j in range(0, ① ): if a[j][1] ② a[j+1][1]: a[j],a[j+1]=a[j+1],a[j]print("小组名单是:")for i in range(len(a)):print( ③ )
参考答案:划线处①应填:len(a[i-1]),即列表a中每个子列表的长度,也就是1(姓名和身高共两项)。划线处②应填:<=,即比较当前同学的身高和下一个同学的身高,如果当前同学的身高小于等于下一个同学的身高,则交换两者的位置。划线处③应填:a[i][0] + "," + str(a[i][1]),即输出同学的姓名和身高,中间用逗号和空格隔开。
解析:【喵呜刷题小喵解析】:
根据题目要求,我们需要将“天天向上”小组的同学按身高从高到低输出名单。程序代码如下:
```python
a=[["李洪全",135],["王倩倩",154],["吴乐天",148],["周立新",165],["鲁正",158],["杨颖颖",150]]
for i in range(1,len(a)):
for j in range(0, len(a[i-1])):
if a[j][1] <= a[j+1][1]:
a[j],a[j+1]=a[j+1],a[j]
print("小组名单是:")
for i in range(len(a)):
print(a[i][0] + "," + str(a[i][1]))
```
在程序中,我们使用了两个嵌套的for循环来遍历列表a,比较每个同学的身高,如果当前同学的身高小于等于下一个同学的身高,则交换两者的位置。最后,我们输出按身高从高到低排列的小组名单。
在程序中,划线处①应填:len(a[i-1]),即列表a中每个子列表的长度,也就是1(姓名和身高共两项)。划线处②应填:<=,即比较当前同学的身高和下一个同学的身高,如果当前同学的身高小于等于下一个同学的身高,则交换两者的位置。划线处③应填:a[i][0] + "," + str(a[i][1]),即输出同学的姓名和身高,中间用逗号和空格隔开。
根据题目给出的运行结果,程序已经正确实现了按身高从高到低输出小组名单的功能。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!