实验08(列表和元组)
一、课内实验题(共10小题,100分)
题型得分 95
【描述】
输入10个整数,存放在列表中,找出值最大和最小的元素,输出最大值、最小值及它们所在的元素下标。
【输入】
在一行中输入10个整数,其间以空格分隔。
【输出】
第一行输出最大值及其所在的元素下标,最大值和下标以空格间隔。
第二行输出最小值及其所在的元素下标,最小值和下标以空格间隔。
【输入示例】
1 3 5 7 9 6 0 8 2 4
【输出示例】
9 4
0 6
【来源】
《Python程序设计基础》第5章编程题5。
(10分)
我的答案:
line=[int(value) for value in input().split()]
print(max(line),line.index(max(line)))
print(min(line),line.index(min(line)))
题目得分 10
【描述】
给定一组整数,要求利用列表把这组数保存起来,实现对列表中的数循环移动。假定共有n个整数,则要使前面各数顺序向后移m个位置,并使最后m个数变为最前面的m个数。
一定要保证在输出结果时,输出的顺序和列表中数的顺序是一致的。
【输入】
第一行包含一个正整数n和一个正整数m,n和m以空格间隔。
第二行包含n个正整数,整数以空格间隔。
【输出】
依次输出经过循环移动后列表中元素值,元素值以空格间隔。
【输入示例】
11 4
15 3 76 67 84 87 13 67 45 34 45
【输出示例】
67 45 34 45 15 3 76 67 84 87 13
【来源】
《Python程序设计基础》第5章编程题7。
(10分)
我的答案:
n,m=map(int,input().split())
line=[int(value) for value in input().split()]
line2=line[n-m:]
del line[n-m:]
line3=line2+line
for value in line3:
print(value,end=' ')
题目得分 10
【描述】
给定一个整数列表,求列表中第k大的数。注意,第k大的数意味着从大到小排在第k位的数。
【输入】
第一行输入k。第二行输入n个整数,整数之间以空格分隔。
【输出】
该列表中第k大的数。
【输入示例】
2
4 1 3 2
【输出示例】
3
【来源】
《Python程序设计基础》第5章编程题8。
(10分)
我的答案:
k=int(input())
line=[int(value) for value in input().split()]
for i in range(k):
max1=max(line)
del line[line.index(max(line))]
print(max1)
题目得分 10
【描述】
定义函数:def mean_median(t),该函数接受一个正整数元组作为参数,返回元组中正整数的均值和中位数。一组数据按从小到大的顺序依次排列,位于中间位置的一个数或位于中间位置的两个数的平均值被称为中位数。如果这组数的个数为奇数,则中位数是位于中间位置的数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值。
【输入】
在一行中顺序输入若干个正整数,其间以空格分隔。
【输出】
输出这些正整数的均值和中位数。
【输入示例】
3 3 0 1 12 13 15 16
【输出示例】
(7.875, 7.5)
(10分)
我的答案:
def mean_median(t):
n=len(t)
c=sum(t)/n
if n%2==0:
k=(t[n//2-1]+t[n//2])/2
else:
k=t[n//2]
return c,k
line = [int(value) for value in input().split()]
line.sort()
line=tuple(line)
print(mean_median(line))
题目得分 10
【描述】
给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
- 四周最外侧的像素点灰度值不变;
- 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
【输入】
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
【输出】
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
【输入示例】
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
【输出示例】
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100
(10分)
我的答案:
import copy
x=[]
n,m=map(int,input().split())
for i in range(n):
x.append([])
line=[int(value) for value in input().split()]
for j in range(m):
x[i].append(line[j])
y=copy.deepcopy(x)
for row in range(len(x)):
for column in range(len(x[row])):
if row>0 and row<n-1 and column>0 and column<m-1:
x[row][column]=round((y[row][column]+y[row-1][column]+y[row+1][column]+y[row][column-1]+y[row][column+1])/5)
for i in x:
for j in i:
print(j,end=' ')
print()
题目得分 10
【描述】
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。求给定矩阵的全部局部极大值及其所在的位置。
【输入】
在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);下面M行,每行给出A在该行的N个元素的值。数字间以空格分隔。
【输出】
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。
【输入示例】
4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1
【输出示例】
9 2 3
5 3 2
5 3 4
(10分)
我的答案:
x=[]
y=[]
f=0
n,m=map(int,input().split())
for i in range(n):
x.append([])
line=[int(value) for value in input().split()]
for j in range(m):
x[i].append(line[j])
for row in range(len(x)):
for column in range(len(x[row])):
if row>0 and row<n-1 and column>0 and column<m-1:
if x[row][column]>x[row-1][column] and x[row][column]>x[row+1][column] and x[row][column]>x[row][column+1] and x[row][column]>x[row][column-1]:
f=1
print(x[row][column],row+1,column+1)
if f==0:
print("None",n,m)
题目得分 10
【描述】
输入10个整数,将10个整数按升序排列输出,并且奇数在前,偶数在后。
【输入】
输入10个整数,以空格间隔。
【输出】
输出升序排列后,奇数在前,偶数在后的数组元素,以空格间隔。最后一个元素后面没有空格。
【输入示例】
10 9 8 7 6 5 4 3 2 1
【输出示例】
1 3 5 7 9 2 4 6 8 10
(10分)
我的答案:
line=[int(value) for value in input().split()]
lst1=[value for value in line if value%2==0]
lst2=[value for value in line if value%2!=0]
lst1.sort()
lst2.sort()
lst3=lst2+lst1
for value in lst3:
print(value,end=' ')
题目得分 10
【描述】
编写程序,输入10个数,计算这10个数的均值和标准差。用下面的公式计算均值mean和标准差deviation:
'计算机生成了可选文字:
【输入】
一行中给出10个数,其间以空格分隔。
【输出】
第一行为均值。
第二行为标准差。
结果保留2位小数。
【输入示例】
583 566 58 632 244 485 600 432 88 562
【输出示例】
425.00
216.48
(10分)
我的答案:
line = [float(value) for value in input().split()]
mean=sum(line)/len(line)
total=0
for value in line:
d=(value-mean)**2
total+=d
deviation=(total/(len(line)-1))**0.5
print("{:.2f}".format(mean))
print("{:.2f}".format(deviation))
题目得分 10
【描述】
读入一个整数n,范围是[3,100],这表示井字棋棋盘的边长。比如n=3就表示是一个3x3的棋盘。然后,要读入n行,每行n个数字,每个数字是1或0,依次表示[0,0]到[n-1,n-1]位置上的棋子。1表示X,0表示O(大写字母O)。
判断其中是否存在某一方获胜,获胜的条件是存在整行或整列或整条对角线或整条反对角线上是相同的棋子。如果存在,则输出代表获胜一方字母:X或O(大写字母X或O);如果没有任何一方获胜,则输出NIL(三个大写字母,中间是字母I(India的I)。
注意:所给的棋盘上的棋子分布可能出现同一个棋子有多处满足获胜的条件,但是不会出现两种棋子都获胜的情况。
【输入】
一个代表棋盘大小的数字n,后面跟上nxn个0或1的数字。
【输出】
三种输出之一:
X
O
NIL
均为大写字母。
【输入示例】
4
1 0 0 1
0 1 0 0
0 0 1 0
1 0 0 1
【输出示例】
X
(10分)
我的答案:
x=[]
s=0
s2=0
n=int(input())
for i in range(n):
x.append([])
line=[int(value) for value in input().split()]
for j in range(n):
x[i].append(line[j])
X=0
o=0
for i in range(len(x)):
for j in range(len(x[i])):
if i==j:
s+=x[i][j]
elif i+j==n-1:
s2+=x[i][j]
if sum(x[i])==n:
X=1
if sum(x[i])==0:
o=1
if s==n or s2==n: X=1
if s==0 or s2==0: o=1
if X==1: print("X")
elif o==1: print("O")
else: print("NIL")
题目得分 10
【描述】
定义函数:def list_to_tuples(two_dimensional_list),该函数接受一个二维列表作为参数,内嵌列表的元素是字符串;返回一个二维元组,内嵌元组的内容是内嵌列表的内容的逆序。
例如,如果输入的二维列表是:[[‘mean’, ‘really’, ‘is’, ‘jean’], [‘world’, ‘my’, ‘rocks’, ‘python’]],函数返回元组:((‘jean’, ‘is’, ‘really’, ‘mean’), (‘python’, ‘rocks’, ‘my’, ‘world’))。
【输入】
每一行输入一个字符串,字符串中单词之间以空格分隔。每行字符串构成二维列表的一个内嵌列表。可能会有多行输入。
【输出】
一个二维元组。
【输入示例】
mean really is jean
world my rocks python
【输出示例】
((‘jean’, ‘is’, ‘really’, ‘mean’), (‘python’, ‘rocks’, ‘my’, ‘world’))
(10分)
我的答案:
lst = []
i = input()
k=0
while i !="":
k+=1
lst.append([i.split() for i in i.split('\n')])
i = input()
flag=0
print("(", end="")
for i in range (0,k):
for j in range(0,len(lst[i])):
lst1=reversed(lst[i][j])
if(flag==0):
flag=1
print(tuple(lst1),end="")
else:
print(",", end=" ")
print(tuple(lst1),end="")
print(")",end="")
题目得分 5