image

编辑人: 人逝花落空

calendar2025-05-26

message2

visits872

2023月03月Python三级实操答案及解析

一、编程题

1、36.百钱买百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题,问题的原文是:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?这个问题用现代文描述起来就是:公鸡5文钱1只,母鸡3文钱1只,小鸡3只1文钱。如果用100文钱买100只鸡,那么公鸡、母鸡和小鸡各应该买多少只呢?请完成下面程序中空白处的语句,实现对问题的求解,找出所有符合题目要求的买鸡方案,并输出。
\#设cock、hen、chicken分别为公鸡、母鸡和小鸡的数量,num为符合题目要求的方案数目。
num=0
for cock in range(1,21):
for hen in range(1,34):
for chicken in ① :
if ② == 100 and cock*5 + hen*3 + chicken/3 == ③ :
num = ④
print(f'第 {num} 种方案是:公鸡{cock}只,母鸡{hen}只,小鸡{chicken}只')

参考答案:① range(1,101,3)② cock + hen + chicken③ 100④ num+1

解析:【喵呜刷题小喵解析】:
在解答这个问题时,我们使用了嵌套循环。首先,我们设置了公鸡、母鸡和小鸡的数量分别为cock、hen和chicken。然后,我们遍历公鸡和母鸡的数量,对于小鸡的数量,由于小鸡是3只1文钱,所以我们需要将小鸡的数量设为3的倍数,并且最小为1(小鸡不能为0只)。因此,小鸡的数量范围应为1到100,步长为3,即range(1,101,3)。

接着,我们检查公鸡、母鸡和小鸡的总数量是否等于100,以及它们的总价是否等于100文钱。如果满足这两个条件,我们增加方案的数量,并打印出公鸡、母鸡和小鸡的数量。

在这个程序中,①处填写的语句是“range(1,101,3)”,表示小鸡的数量范围;②处填写的语句是“cock + hen + chicken”,表示公鸡、母鸡和小鸡的总数量;③处填写的语句是“100”,表示100文钱;④处填写的语句是“num+1”,表示增加方案的数量。

2、37.妙妙学校举行了知识竞赛,有一、二、三3个班分别派出最优秀的5名代表参加此次竞赛。这15名代表的成绩存放于”jscj.csv”文件中,现在妙妙读取了其中的数据,数据内容如图所示:
下列代码实现了读取竞赛分数信息,并输出各班平均分的情况,请你补全代码。
import csv
with open("/data/jscj.csv",encoding="utf-8")as f:
​ rows=list( ① (f))
​ sum=[0,0,0]
​ for row in rows[1:]:
​ if int(row[0])==1:
​ sum[0]+=int(row[2])
​ elif int( ② )==2:
​ sum[1]+=int(row[2])
​ else:
​ sum[2]+=int(row[2])
​ for i in range(1,4):
​ print(str(i)+"班的平均分为:",round( ③ /5,2))

参考答案:br />① csv.reader② row[0]③ sum[i-1]

解析:【喵呜刷题小喵解析】
首先,要读取csv文件,我们需要使用csv模块的reader函数。因此,在①处,应该填写csv.reader。

其次,在②处,我们需要判断当前行的班级编号。由于班级编号在第一列,所以应该填写row[0]。

最后,在③处,我们需要计算每个班级的平均分。由于sum数组已经记录了每个班级的总分,所以我们需要将总分除以5(每班5名代表)并保留两位小数。注意,我们需要使用i-1作为索引,因为数组索引从0开始,而我们的班级编号从1开始。

所以,完整的代码应该如下:
```python
import csv
with open("/data/jscj.csv", encoding="utf-8") as f:
rows = list(csv.reader(f))
sum = [0, 0, 0]
for row in rows[1:]:
if int(row[0]) == 1:
sum[0] += int(row[2])
elif int(row[0]) == 2:
sum[1] += int(row[2])
else:
sum[2] += int(row[2])
for i in range(1, 4):
print(str(i) + "班的平均分为:", round(sum[i-1] / 5, 2))
```

3、38.若要生成一个由若干小写字母组成的互不重复的随机数组,已知小写字母的ASCII码值为97~122整数范围,并将其进行从小到大输出,如图所示,请将相关程序补充完整。
import random #random是随机数模块
n=int(input("请输入元素个数(不超过26):"))
a=[]
\#产生不重复的随机数组
for i in range(n):
​ x=random.randint(97,122) #产生97-122之间的随机整数
​ while chr(x) in a:
​ x=random.randint(97,122)
​ a.append( ① )
print(a)
\#将各个元素进行排序输出
for i in range(n-1):
​ k=i
​ for j in range( ② ,n):
​ if a[k]>a[j]:
​ k= ③
​ if i!=k:
​ a[i],a[k]= ④
print("该随机数组从小到大排列为:",a)

解析:【喵呜刷题小喵解析】:

1. 在`a.append()`中,我们需要将随机生成的字符添加到列表`a`中。由于`x`是一个随机整数,其范围在97到122之间,因此`chr(x)`可以将这个整数转换为对应的小写字母。所以,`a.append(chr(x))`是正确的。
2. 在排序算法中,外部循环从0开始,所以内部循环应该从`i+1`开始,以比较当前元素与后面的元素。因此,`range(i+1, n)`是正确的。
3. 在交换元素时,我们需要找到从`i`到`n-1`之间比`a[i]`大的最小元素的索引。在每次内部循环中,如果`a[j]`大于`a[k]`,则更新`k`的值为`j`。因此,`k=j`是正确的。
4. 最后,我们需要交换`a[i]`和`a[k]`的位置,以将`a[i]`移动到正确的位置。因此,`a[i], a[k]`是正确的。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023月03月Python三级实操答案及解析

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