三级编程题训练
读取成绩
请读取1班和2班语文学科的成绩文件“score.csv” 的数据,数据内容如下图显示:
下列代码实现了读取数据并分别统计1班和2班语文成绩的和,请你补全代码。 (考生对于本题不需要运行通过,请直接编写代码确认无误后保存答案即可)
import csv
with open("_____①_____") as f:
rows = list(csv.reader(f))
sum1 = 0
sum2 = 0
for row in rows[1:]:
if int(_____②_____) == 1:
sum1 += int(row[1])
else:
sum2 += int(row[1])
print(_____③_____)
参考答案:
import csv
with open("score.csv") as f:
rows = list(csv.reader(f))
sum1 = 0
sum2 = 0
for row in rows[1:]:
if int(row[0]) == 1:
sum1 += int(row[1])
else:
sum2 += int(row[1])
print(sum1, sum2)
牧场举行联欢会
n头奶牛自发举行歌咏比赛。邀请了山羊公公、斑马哥哥、白兔弟弟、小喵妹妹一共四位担任歌咏比赛的评委。评比规则参赛选手的最终得分为所有评委打分的平均分。编程输出每位参赛选手的最终得分,请你补全代码。
n=int(input())
for i in range(_____①_____):
a=[]
for j in range(0,4):
x=int(input())
a.append(_____②_____)
print(_____③_____/ 4)
参考答案:
n=int(input())
for i in range(n):
a=[]
for j in range(0,4):
x=int(input())
a.append(x)
print(sum(a) / 4)
西红柿生长的数据信息
科技小组分2个小队搜集到西红柿生长的数据信息。2个小队将数据进行了从小到大排序:
a = [1,3,4,6,7,13,17,21], b = [2,5,6,8,10,12,14,16,18] ,请明明将这2个小队的数据进行合并,生成为一个从小到大有序的列表。
输入:
1,3,4,6,7,13,17,21
2,5,6,8,10,12,14,16,18
输出:
[1,2,3,4,5,6,6,7,8,10,12,13,14,16,17,18,21]
请帮明明编写程序实现上述功能,或补全代码。
x = input()
s = x.split(',')
a=[]
for i in range(_____①_____):
a.append(int(s[i]))
y = input()
s = y._____②_____
b=[]
for i in range(len(s)):
b.append(int(s[i]))
ret = []
i = j = 0
while len(a) >= i + 1 and _____③_____:
if a[i] <= b[j]:
_____④_____
i += 1
else:
ret.append(b[j])
j += 1
if len(a) > i:
ret += a[i:]
if len(b) > j:
_____⑤_____
print(ret)
参考答案:
x = input()
s = x.split(',')
a=[]
for i in range(len(s)):
a.append(int(s[i]))
y = input()
s = y.split(',')
b=[]
for i in range(len(s)):
b.append(int(s[i]))
ret = []
i, j = 0, 0
while len(a) >= i + 1 and len(b) >= j + 1:
if a[i] <= b[j]:
ret.append(a[i])
i += 1
else:
ret.append(b[j])
j += 1
if len(a) > i:
ret += a[i:]
if len(b) > j:
ret += b[j:]
print(ret)
数字排序
输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
输入:
4 5 2 3 1 7 9 10
输出:
[1, 2, 3, 4, 5, 7, 9, 10]
[5, 3, 4, 1, 2, 6, 7, 8]
请编写程序实现上述功能,或补全代码。
s=input()
x=s.split(_____①_____)
a=[]
b=[]
n= _____②_____
for i in range(0,len(x)):
a.append(int(_____③_____))
n=n+1
b.append(n)
for i in range(_____④_____):
for j in range(i+1,n):
if (_____⑤_____):
a[i],a[j]=a[j],a[i]
b[i],b[j]=b[j],b[i]
print(a)
print(b)
参考答案:
s = input()
x = s.split(' ')
a = []
b = []
n = 0
for i in range(0, len(x)):
a.append(int(x[i]))
n = n + 1
b.append(n)
for i in range(n-1):
for j in range(i+1, n):
if (a[i] > a[j]):
a[i], a[j] = a[j], a[i]
b[i], b[j] = b[j], b[i]
print(a)
print(b)
求解数学题
一格小朋友正在求解一道小学四年级提优题,题目如下:
把 1296 分拆成a、b、c、d四个正整数,如果a加上2,b减去2,c乘以2,d除以2,则这四个结果相等。现在请你编写程序求出这四个数。
补全下面的代码:
for a in range(1,_____①_____):
b = _____②_____
for c in range(1,1296-a-b):
d = _____③_____
if (b-2==c*2) and (a+b+c+d== _____④_____) :
print(a,b,c,d)
参考答案:
for a in range(1,1296):
b = a + 4
for c in range(1,1296-a-b):
d = c * 4
if (b-2==c*2) and (a+b+c+d==1296):
print(a,b,c,d)
植物生长情况
请读取文件 “plant.csv” 的数据,数据内容如下图显示:
下列代码实现了读取“植物编号”和“生长情况”信息,输出“生长情况”达到6的数量,请你补全代码。
import csv
with open(“plant.csv”) as f:
rows = list(_____①_____(f))
s = 0
for row in rows[1:]:
if int(_____②_____) >= 6:
s = s + 1
print(s)
参考答案:
import csv
with open(“plant.csv”) as f:
rows = list(csv.reader(f))
s = 0
for row in rows[1:]:
if int(row[1]) >= 6:
s = s + 1
print(s)
数字求解
一个四位数,如果在它的左边加一个数字8,就可以得到一个五位数;如果在它的右边加一个数字6,就可以得到另一个五位数, 这两个五位数的和是121410。请问原来这个四位数是多少?
现在请你编写程序,求出这个四位数。
补全下面的代码:
for a in range(_____①_____):
for b in range(_____②_____):
for c in range(0,10):
for d in range(0,10):
if (_____③_____)+(_____④_____) == 121410:
print(a,b,c,d)
参考答案:
for a in range(1,10):
for b in range(0,10):
for c in range(0,10):
for d in range(0,10):
if (80000+a*1000+b*100+c*10+d)+(a*10000+b*1000+c*100+d*10+6)==121410:
print(a,b,c,d)
身高数据
请读取文件/data/subways.csv的数据,数据内容如下图显示:
下列代码实现了读取“学号”和“身高”信息,输出“身高”达到120的学号,请你补全代码。
import csv
with open('/data/_____①_____') as f:
rows = list(csv.reader(f))
for row in rows[1:]:
if(int(row[1])>=120):
print(_____②_____)
参考答案:
import csv
with open('/data/subways.csv') as f:
rows = list( csv.reader (f))
for row in rows[1:]:
if(int(row[1])>=120):
print(row[0])
列表中的所有零移动到列表尾
有一组数据[0,20,0,4,31]存放在nums中,请将列表中的所有零移动到列表尾。
nums=[0,20,0,4,31]
initLen = _____①_____
i=0
j=0
while i<initLen:
if _____②_____:
_____③_____= nums[i]
j+=1
i+=1
_____④_____=( len(nums)-j)*[0]
print(_____⑤_____)
参考程序:
nums=[0,20,0,4,31]
initLen = len(nums)
i=0
j=0
while i<initLen:
if nums[i]!=0:
nums[j]= nums[i]
j+=1
i+=1
nums[j:]=(len(nums)-j)*[0]
print(nums)
法定节假日
法定节假日是根据各国、各名族的风俗习惯或纪念要求,由国家法律统一规定的用以进行庆祝及度假的休息时间。
法定节假日制度是国家政治、经济、文化制度的重要反映,涉及经济社会的多个方面,涉及广大人民群众的切身利益。
法定节假日的休假安排,为居民出行购物和休闲提供了时间上的便利,为拉动内需、促进经济增长做出了积极贡献。
给出一个2020年的节假日的放假日期CSV文件(vacations.csv),内容示例如下:
以第1行为例,1230表示12月30日,0101表示1月1日。
代码功能为:读入CSV文件中数据,获得用户输入。根据用户输入的节假日名称,
输出此节假日的假期范围。请补全代码。
fi=open("/data/_____①_____","r")
ls=[]
for line in fi:
ls.append(line.strip("\n").split(","))
fi.close()
s=input("请输入节假日名称:")
for line in ls:
if _____②_____:
print("{}的假期位于{}-{}之间".format(line[1], line[2], line[3]))
参考答案:
fi=open("vacations.csv","r")
ls=[]
for line in fi:
ls.append(line.strip("\n").split(","))
fi.close()
s=input("请输入节假日名称:")
for line in ls:
if s == line[1]:
print("{}的假期位于{}-{}之间".format(line[1], line[2], line[3]))
尊老王国排队问题
尊老王国有一个默认规则,排队必须遵守年长的在前,年幼的在后。一支正要出城的队伍,请帮助他们顺利出城。
输入:
15、78、96、45、36
输出
[96, 78, 45, 36, 15]
[3, 2, 4, 5, 1]
请在划线处补全代码,实现以上功能
s = input()
x= s.split('、')
a = []
b = []
n = 0
for i in range(0, len(x)):
a.append(int(x[i]))
n = ____①_______
b.append(n)
for i in range(n-1):
for j in range(i+1, n):
if (_____②_____):
______③___________
b[i], b[j] = b[j], b[i]
print(a)
print(b)
参考答案:
s = input()
x= s.split('、')
a = []
b = []
n = 0
for i in range(0, len(x)):
a.append(int(x[i]))
n = n + 1
b.append(n)
for i in range(n-1):
for j in range(i+1, n):
if (a[i] <a[j]):
a[i], a[j] = a[j], a[i]
b[i], b[j] = b[j], b[i]
print(a)
print(b)
从1到3报数
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
n = int(input('请输入总人数:'))
num = []
for i in range(n):
num.append(_____①_____)
i = 0
k = 0
m = 0
while m < n - 1:
if _____②_____: k += 1
if k == 3:
num[i] = 0
k = 0
_____③_____
i += 1
if i == n : i = 0
i = 0
while num[i] == 0:i += 1
print(_____④_____)
参考答案:
n = int(input('请输入总人数:'))
num = []
for i in range(n):
num.append(i + 1)
i = 0
k = 0
m = 0
while m < n - 1:
if num[i] != 0 : k += 1
if k == 3:
num[i] = 0
k = 0
m += 1
i += 1
if i == n : i = 0
i = 0
while num[i] == 0:i += 1
print(num[i])
升序排序
输入10个数据进行升序排序,并在这有序数据上插入一个数据,使之仍然有序。
程序代码如下,请补全。
lis=[]
for i in range(10):
x=int(input('输入待排序数据%d:'%(i)))
lis.append(x)
for i in range(_____①_____):
for j in range(i,len(lis)):
if _____②_____:
lis[i],lis[j]=lis[j],lis[i]
print(lis)
n=int(input('输入一个需要插入的数据:'))
lis.append(n)
for i in range(_____③_____):
if _____④_____:
for j in range(i,len(lis)):
lis[j],lis[-1]= _____⑤_____
break
print(lis)
参考答案:
lis=[]
for i in range(10):
x=int(input('输入待排序数据%d:'%(i)))
lis.append(x)
for i in range(len(lis)-1): #len(lis)-1 (或 len(lis))
for j in range(i,len(lis)):
if lis[i]>lis[j]:
lis[i],lis[j]=lis[j],lis[i]
print(lis)
n=int(input('输入一个需要插入的数据:'))
lis.append(n)
for i in range(len(lis)-1):
if lis[i]>=n:
for j in range(i,len(lis)):
lis[j],lis[-1]=lis[-1],lis[j]
break
print(lis)
运动时间
小文的运动时间数据存储在文件“sport.csv”中,数据内容如下图显示:
下列代码实现了读取数据,求和并统计个数,输出平均时长,并保留2位小数,请你补全代码。
import csv
with open("/data/_____①_____") as f:
rows = list(csv.reader(f))
s=0
c=0
for row in rows[1:]:
s+=int(_____②_____)
c=c+1
print(round(_____③_____,2))
参考答案:
import csv
with open("sport.csv") as f:
rows = list(csv.reader(f))
s=0
c=0
for row in rows[1:]:
s+=int(row[0])
c=c+1
print(round(s/c,2))
被 3 、被 5 整除的数
给定一个整数 num,从 1 到 num 按照下面的规则返回每个数: 如果这个数被 3 整除,返回 'Apple'。 如果这个数被 5 整除,返回 'Pie'。 如果这个数能同时被 3 和 5 整除,返回 'ApplePie'。
如果这个数既不能被 3 也不能被 5 整除,返回这个数字的字符串格式。
n=int(input("请输入一个数字:"))
results=[]
for i in range(1,_____①_____):
if _____②_____:
results.append("ApplePie")
elif i%3==0:
results.append("Apple")
elif i%5==0:
results.append("Pie")
else:
results.append(_____③_____)
print(results)
参考答案:
n=int(input("请输入一个数字:"))
results=[]
for i in range(1,n+1): #① n+1(3分)
if i%3==0 and i%5==0: #② i%3==0 and i%5==0(4分)
results.append("ApplePie")
elif i%3==0:
results.append("Apple")
elif i%5==0:
results.append("Pie")
else:
results.append(str(i)) #③ str(i)(3分)
print(results)
小白兔排到做早操
小白兔们每天早上都到草坪上做早操。做操前,首先要按照身高由矮到高排个队,下列代码实现了排队的功能。首先读取小白兔的只数,然后读取每只小白兔的身高信息,进行由矮到高的处理,最后输出排好队的每只小白兔的身高,请你补全代码。
n = int(input('请输入兔子的总只数:'))
a = []
for i in range(n):
x = float(input('请输入身高'))
a.append( _____① _____)
a._____② _____
for i in _____③_____ :
print(a[i])
参考程序:
n = int(input('请输入兔子的总只数:'))
a = []
for i in range(n):
x = eval(input('请输入身高'))
a.append(x)
a.sort()
for i in range(n):
print(a[i])
电灯开关
n个灯排成一排,开始时都是关着的。现进行如下操作: 所有电灯的按钮按动一次;所有编号为2的倍数的电灯按钮按动一次;所有编号为3的倍数的电灯的按钮按动一次; …… 所有编号为n-1的倍数的电灯的按钮按动一次;所有编号为n的倍数的电灯的按钮按动一次。 最后请统计有多少只电灯是亮的。编写程序实现上述功能,或补全代码。
n=int(input())
a=[]
for i in range(_____① _____):
a.append(-1)
for i in range(1,n+1):
for j in range(1,n+1):
if( _____② _____) == 0:
a[j] = _____③_____ * -1
s=0
for i in range(1,n+1):
if (a[i] == _____④_____ ):
s=s+1
print( _____⑤_____ )
参考答案:
n=int(input())
a=[]
for i in range(n + 1):
a.append(-1)
for i in range(1,n + 1):
for j in range(1,n + 1):
if(j % i ) == 0:
a[j] = a[j] * -1
s=0
for i in range(1,n + 1):
if (a[i] == 1):
s=s + 1
print(s)
IP数据
请读取文件IP.txt的数据,数据内容如下图显示:
文件中每一行存储一个IP地址,下列代码实现了读取数据,每次读取一行数据,都删除了行末的换行符,
最后逆序输出文件中的每行IP地址,请你补全代码。
输出参考如下:
49.97.132.119
32.33.23.232
112.114.44.44
with open(' _____①_____', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip(' _____②_____')
for i in range(_____③_____):
print(list[i])
f.close()
参考答案:
with open('IP.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip('\n')
for i in range(len(list)-1,-1,-1):
print(list[i])
f.close()
水仙花数
明明请你帮忙寻找100-999之间的所有“水仙花数”,并统计个数。“水仙花数”是指一个三位数各位数字的立方和等于该数本身。
例如:153=1*1*1+5*5*5+3*3*3。要求输出结果如下所示:
153
370
371
407
请编程实现上述功能,补全代码。
for i in range(_____ ① _____ ):
x=i
a=x % 10
x= (_____②_____)
b=x % 10
c=x // 10
if ( _____③_____ ) :
print(i)
参考答案:
for i in range(100, 1000):
x = i
a = x % 10
x = x // 10
b = x % 10
c = x // 10
if (a * a * a + b * b * b + c * c * c == i):
print(i)
支撑数
查找“支撑数”。在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边
和右边相邻的数大,你能找到它们吗? 输入一个数组,输出每个支撑数的数值以及它们在数组中位置编号。
示例:
输入:
1 3 2 4 1 5 3 9 7 10 8 23 85 43
输出:
3 2
4 4
5 6
9 8
10 10
85 13
请编写程序实现上述功能,补全代码。
s=input()
x=s.split(' ')
a=[]
for i in range(0,len(x)):
a.append(int( _____①_____)
b=[]
c=[]
n=0
for i in range(1, _____②_____ ):
if (a[i]>a[i-1] and _____③_____ ):
b.append(a[i])
c.append(_____④_____)
for i in range( _____⑤ _____):
print(b[i],' ',c[i])
参考程序:
s=input()
x=s.split(' ')
a=[]
for i in range(0,len(x)):
a.append(int(x[i]))
b=[]
c=[]
for i in range(1, len(a)-1):
if (a[i]>a[i-1] and a[i]>a[i+1]):
b.append(a[i])
c.append(i+1)
for i in range(len(b)):
print(b[i],' ',c[i])
成绩排序
请读取某班级语文学科的成绩文件score.txt的数据,数据内容如下图显示:
下列代码实现了读取数据并对每个成绩从小到大排序后并输出,请你补全代码。
with open('/data/_____① _____', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip('\n')
list[i]= _____② _____
_____③_____
print(list)
f.close()
参考程序:
with open('/data/score.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip('\n')
list[i]=int(list[i])
list.sort()
print(list)
f.close()
库存书籍的总价计算
如下图有一个名为“book.csv”的文件,小明想计算所有库存书籍的总价,于是编写了下面代码。请将红色①②处的代码补充完整
b = 0
s = 0
with open('/data/book.csv', 'r', encoding='utf-8') as f:
for line in f. _____①_____():
a = line.strip("\n").split(",")
b = b+1
if b >1: # 第一行是标题,所以从第二行开始计算
s = s + int(a[1]) * _____ ② _____
print('总价:' , s)
参考程序:
b = 0
s = 0
with open('/data/book.csv', 'r', encoding='utf-8') as f:
for line in f.readlines():
a = line.strip("\n").split(",")
b = b+1
if b >1: # 第一行是标题,所以从第二行开始计算
s = s + int(a[1]) * int(a[2])
print('总价:' , s)
二分法查找
小敏想用二分法对关键字14进行查找,请你帮她补全代码。
lst=[3,12,7,45,9,10,31,90,1,23,14,52]
_____①_____
key=14
n=len(a)
i,j=0,n-1
flag=-1
while _____ ②_____ :
mid=(i+j)//2
if key==a[mid]:
flag=mid
break
elif key>a[mid]:
_____③ _____
else:
j=mid-1
if _____④ _____ :
print(str(key)+'没找到!')
else:
print(str(key)+'已找到!')
参考程序:
lst=[3,12,7,45,9,10,31,90,1,23,14,52]
a=sorted(lst)
key=14
n=len(a)
i,j=0,n-1
flag=-1
while i<=j:
mid=(i+j)//2
if key==a[mid]:
flag=mid
break
elif key>a[mid]:
i=mid+1
else:
j=mid-1
if flag==-1:
print(str(key)+'没找到!')
else:
print(str(key)+'已找到!')
灰度值计算
标准考试答题卡一般采用2B铅笔填涂,填涂好的答题卡经过扫描后得到相应的数字化图像,再通过光学识别,完成答题卡信息数据的采集、分析与统计。计算机判断答题卡中信息点被填涂的标准是灰度值小于132为黑色,灰度值大于等于132为白色。灰度值计算公式:
灰度值=0.299×红色分量(R)+0.587×绿色分量(G)+0.114×蓝色分量(B)
若分别输入n个信息点的RGB颜色值,则其判断程序如下:
n=int(input("请输入信息点个数:"))
count=0
for i in range(1,n+1):
R=int(input(”请输入红色分量:”))
_____①_____
B= int(input(”请输入蓝色分量:”))
Gray_scale= _____②_____
if _____③_____:
print(“黑色”)
count=count+1
else:
print(“白色”)
print("黑色像素总共有:"+_____④_____+"个")
参考程序:
n=int(input("请输入信息点个数:"))
count=0
for i in range(1,n+1):
R=int(input("请输入红色分量:"))
G=int(input("请输入绿色分量:"))
B=int(input("请输入蓝色分量:"))
Gray_scale=0.299*R+0.587*G+0.114*B
if Gray_scale<132:
print("黑色")
count=count+1
else:
print("白色")
print("黑色像素总共有:"+str(count)+"个")
二维数据的处理
下面程序实现对二维数据的处理,请你补全代码。
f=open('/data/score2.csv','r')
a=[]
for i in f:
a.append(i.strip().split(','))
f.close()
_____①_____
for i in a:
s=''
for j in i:
_____②_____
print(s)
程序执行结果为:
[['王鑫', '86', '90', '92', '99', '94', '95'], ['杨小虹', '93', '97', '95', '90', '86', '85'], ['李静', '89', '98', '99', '94', '90', '85']]
王鑫 86 90 92 99 94 95
杨小虹 93 97 95 90 86 85
李静 89 98 99 94 90 85
参考程序:
f=open('/data/score2.csv','r')
a=[]
for i in f:
a.append(i.strip().split(','))
f.close()
print(a,'\n')
for i in a:
s=''
for j in i:
s=s+'{:6}\t'.format(j)
print(s)
个数统计
在三位数的自然数中,找出至少有一位数字是5的,至少能被3整除的所有整数,并统计个数,具体代码如下:
count=0
lst=[]
for i in range( _____①_____ ):
if i%3==0:
a=i%10
b=i//10%10
c= _____②_____
if _____③ _____:
count+=1
lst.append(i)
print("这样的三位数有:",lst)
print("总数量有:",count)
参考程序:
count=0
lst=[]
for i in range(100,1000):
if i%3==0:
a=i%10
b=i//10%10
c=i//100
if a==5 or b==5 or c==5:
count+=1
lst.append(i)
print("这样的三位数有:",lst)
print("总数量有:",count)
平方根求解
输入一个正数,以下代码编程求出它的平方根。请你补全代码。
in_var = float(input("请输入一个需要开方的正数,可以使用2位小数:\n x = "))
if in_var < 0:
x = - in_var
else:
x = in_var
low = 0.0
high = x
s_root = _____ ①_____
if x > 0 and x < 1:
high = 1.0
low = 0
s_root = _____ ②_____
if x >= 0:
while abs( _____ ③ _____ ) > 0.0001:
if x > 1.0:
if s_root ** 2 < x:
low = s_root
else:
high = s_root
s_root = _____④_____
if x == 1.0 and x == 0.0:
s_root = x
else:
if s_root ** 2 < x:
low = s_root
else:
high = s_root
s_root = _____⑤ _____
if in_var >= 0:
print("所求数的平方根为:s_root = %.1f"%(s_root))
参考程序:
in_var = float(input("请输入一个需要开方的正数,可以使用2位小数:\n x = "))
if in_var < 0:
x = - in_var
else:
x = in_var
low = 0.0
high = x
s_root =(low + high) / 2
if x > 0 and x < 1:
high = 1.0
low = 0
s_root =(low + high) / 2
if x >= 0:
while abs( s_root ** 2 - x) > 0.0001:
if x > 1.0:
if s_root ** 2 < x:
low = s_root
else:
high = s_root
s_root =(low + high) / 2
if x == 1.0 and x == 0.0:
s_root = x
else:
if s_root ** 2 < x:
low = s_root
else:
high = s_root
s_root =(low + high) / 2
if in_var >= 0:
print("所求数的平方根为:s_root = %.1f"%(s_root))
买鸡方案
百钱买百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题,问题的原文是:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?这个问题用现代文描述起来就是:公鸡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}只')
参考程序:
#设cock、hen、chicken分别为公鸡、母鸡和小鸡的数量,num为符合题目要求的方案数目。
num=0
for cock in range(1,21):
for hen in range(1,34):
for chicken in range(1,101):
if cock+hen+chicken == 100 and cock*5 + hen*3 + chicken/3 == 100:
num = num +1
print(f'第 {num} 种方案是:公鸡{cock}只,母鸡{hen}只,小鸡{chicken}只')
知识竞赛
妙妙学校举行了知识竞赛,有一、二、三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))
参考程序:
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))
随机数组
若要生成一个由若干小写字母组成的互不重复的随机数组,已知小写字母的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)
*参考程序
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(chr(x))
print(a)
#将各个元素进行排序输出
for i in range(n-1):
k=i
for j in range(i+1,n):
if a[k]>a[j]:
k=j
if i!=k:
a[i],a[k]=a[k],a[i]
print("该随机数组从小到大排列为:",a)
本题主要考查选择排序。程序的第一部分是产生不重复的字母组成的数组。由于x是97~122中的随机整数,故追加到a列表中的元素应在x的基础上将其转化为字符,故①空填写chr(x);在选择排序中,外循环控制排序趟数,内循环控制排序次数,不难看出,i的取值范围为0~n-2,因此j每次从i的下一个位置开始至最后,故②处填写i+1;根据选择排序的原理,在j位置上找到比k位置更小的元素,则k移至该位置,故③处填写为j;在某趟排序过程中,当全部元素比较结束,应在最小元素位置上,需要将其交换到相应的i位置上,故④位置答案应为a[k],a[i]。