一、创建一个 88 x 88 的随机整数矩阵(二维列表),然后匹配用户输入的整数是否与其中某元素相等,如果相等则打印其行号和列号。
要求1:随机整数取值范围 0~1024
要求2:需找出所有匹配的元素
要求程序输出结果如下图:
答案思路:
答案刚开始创建了一个一维空列表,经过第一个for循环之后,matrix变成了二维空列表,而第二个for循环则是实现了对内部嵌套列表的随机赋值。接下来的代码就很简单了,自行研究。
答案代码:
import random
# 创建并初始化二维列表
matrix = []
for i in range(88):
matrix.append([])
for j in range(88):
matrix[i].append(random.randint(0, 1024))
target = int(input("请输入一个代匹配的整数:"))
# 匹配用户输入的整数
for i in range(88):
for j in range(88):
if matrix[i][j] == target:
print(i, j)
结果:
因为矩阵生成的是随机数,所以每次结果不一样很正常。
其他方法代码:
import random
A=[[0]*88]*88
nums=int(input("请输入一个1024以内的整数:"))
for i in range(88):
for j in range(88):
A[i][j]=random.randint(0,1024)
if A[i][j]==nums:
print(i,j)
代码思路:
创建一个全是0的二维列表,通过循环遍历的方式,将二维列表里面的所有值全都改成随机数,最后进行判断。
结果:
二、请编程找出矩阵中的幸运数字。
说明:假设给定一个 m * n 的矩阵(矩阵中数值的取值范围是 0~1024,且各不相同),如果某一个元素的值在同一行的所有元素中最小,并且在同一列的所有元素中最大,那么该元素便是幸运数字。
假设给定的矩阵如下:
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
答案思路:
刚开始获取行和列的大小,然后创建一维最小行列表和最大列列表。接下来思路看注释,这里主要说一下内置函数min()和max()的用法。
min() 函数用于获取一个可迭代对象或者多个参数中的最小值。
>>> s = [1, 1, 2, 3, 5]
>>> min(s)
1
>>> s = []
>>> min(s)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
min(s)
ValueError: min() arg is an empty sequence
>>> min(s, default="屁,啥都没有怎么比较?")
'屁,啥都没有怎么比较?'
>>> min(1, 1, 2, 3, 5)
1
>>> t = "FishC"
>>> min(t)
'C'
max()函数用于获取一个可迭代对象或者多个参数中的最大值。
max()函数和min()函数用法相似,不在赘述。
答案代码:
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
row = len(matrix)
col = len(matrix[0])
min_row = [1024] * row
max_col = [0] * col
# 遍历矩阵中的每一个元素
# 找到每行中最小的元素,并将它们存放到列表min_row中
# 找到每列中最大的元素,并将它们存放到列表max_col中
for i in range(row):
for j in range(col):
min_row[i] = min(matrix[i][j], min_row[i])
max_col[j] = max(matrix[i][j], max_col[j])
print(min_row)
print(max_col)
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
for i in range(row):
for j in range(col):
if matrix[i][j] == min_row[i] and matrix[i][j] == max_col[j]:
print(matrix[i][j])
结果:
其他代码1:
代码思路:
这里matrix1和matrix2用了两次,而且两次值相同,具体原因如下。第一个for循环for i in matrix1里面i.sort()对matrix1里面嵌套的列表进行了重新排列,因此matrix1里面三行列表的元素都变成了从小到大排列,matrix1这个矩阵相当于用来将每行的元素都从小到大排列,然后将每行最小的元素添加到temp1这个列表里面。
第二个for循环for x in range(0,2)和for y in range(1,3)则是将矩阵matrix2里面的元素进行行列互换(也就是矩阵里面的转置)。这时之前的列元素变成了行元素。接下来的for循环for j in matrix2对matrix2里面的元素进行由大到小的排列,然后将排列好元素里面最大的添加到temp2这个列表里面。
最后将temp1里面的最小元素和temp2里面的最大元素进行对比,如果有相同的数值,则说明找到了幸运数。
matrix1 = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
matrix2 = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
temp1 = []
temp2 = []
for i in matrix1:
i.sort() #此时matrix1的元素位置已经改变,为了后续转置的是原矩阵所以前面有一个相同的matrix2
temp1.append(i[0])
print(temp1)
for x in range(0,2):
for y in range(1,3):
(matrix2[x][y], matrix2[y][x]) = (matrix2[y][x], matrix2[x][y])
for j in matrix2:
j.reverse()
temp2.append(j[0])
print(temp2)
for x in temp1:
for y in temp2:
if x == y:
print("幸运数字是:", x)
break
其他代码2:
matrix = [ [10,36,52],
[33,24,88],
[66,76,99]]
num1 = []#b = [[] for i in range(3)]
num2 = []
def findMin(list1):
for i in range(len(list1)):
numMin = list1[i][0]
for j in range(len(list1)):
if numMin > list1[i][j]:
numMin = list1[i][j]
num1.append(numMin)
return num1
def findMax(list1):
for j in range(len(list1)):
numMax = list1[0][j]
for i in range(len(list1)):
if numMax < list1[i][j]:
numMax = list1[i][j]
num2.append(numMax)
return num2
findMin(matrix)
findMax(matrix)
print(num1)
print(num2)
for x in num1:
for y in num2:
if x == y:
print("幸运数为:",x)
quit()
else:
continue
print("不存在幸运数")
题目来自小甲鱼: 列表V