(小甲鱼列表V编程)1.创建一个 88 x 88 的随机整数矩阵(二维列表),然后匹配用户输入的整数是否与其中某元素相等,如果相等则打印其行号和列号。2.请编程找出矩阵中的幸运数字。

一、创建一个 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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值