三级编程题训练

读取成绩

请读取1班和2班语文学科的成绩文件“score.csv” 的数据,数据内容如下图显示:

image.png

下列代码实现了读取数据并分别统计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” 的数据,数据内容如下图显示:

image.png

下列代码实现了读取“植物编号”和“生长情况”信息,输出“生长情况”达到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的数据,数据内容如下图显示:

image.png

下列代码实现了读取“学号”和“身高”信息,输出“身高”达到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),内容示例如下:

image.png

以第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”中,数据内容如下图显示:

image.png

下列代码实现了读取数据,求和并统计个数,输出平均时长,并保留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的数据,数据内容如下图显示:

image-20230629144510361

文件中每一行存储一个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的数据,数据内容如下图显示:

图片1.png

下列代码实现了读取数据并对每个成绩从小到大排序后并输出,请你补全代码。

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”的文件,小明想计算所有库存书籍的总价,于是编写了下面代码。请将红色①②处的代码补充完整

图片1.png

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   
    elseprint(“白色”) 
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)+"个")

二维数据的处理

下面程序实现对二维数据的处理,请你补全代码。

image.png

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”文件中,现在妙妙读取了其中的数据,数据内容如图所示:

image.png

下列代码实现了读取竞赛分数信息,并输出各班平均分的情况,请你补全代码。

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整数范围,并将其进行从小到大输出,如图所示,请将相关程序补充完整。

image.png

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]。

Copyright © all right reserved,powered by Gitbook该文件修订时间: 2023-06-29 15:46:29