Python 如何访问矩阵&x27;s元素和传递矩阵作为函数参数?

Python 如何访问矩阵&x27;s元素和传递矩阵作为函数参数?,python,matrix,multidimensional-array,nested-lists,Python,Matrix,Multidimensional Array,Nested Lists,我的程序应该模拟宾果游戏。它接收一个5X5矩阵(宾果卡)作为输入,它应逐个验证卡和元素系列上的元素数(为整数)。目标是验证矩阵中是否有每个元素:如果是,程序应将相应元素替换为“XX”。程序应以上述方式持续进行,直到所有元素都得到验证。如果任何行、列或任一对角线的所有元素均替换为“XX”,则程序将打印最终场景(矩阵的最后阶段),正确的元素替换为“XX”和“宾果!”!,而最后一种情况则不然。 矩阵的第一行包含字母B I N G O,因此通过其相应的标签字母“B”表示第一行,“I”表示第二行,依此类推

我的程序应该模拟宾果游戏。它接收一个5X5矩阵(宾果卡)作为输入,它应逐个验证卡和元素系列上的元素数(为整数)。目标是验证矩阵中是否有每个元素:如果是,程序应将相应元素替换为“XX”。程序应以上述方式持续进行,直到所有元素都得到验证。如果任何行、列或任一对角线的所有元素均替换为“XX”,则程序将打印最终场景(矩阵的最后阶段),正确的元素替换为“XX”和“宾果!”!,而最后一种情况则不然。 矩阵的第一行包含字母B I N G O,因此通过其相应的标签字母“B”表示第一行,“I”表示第二行,依此类推,从而识别每个矩阵的列,输入应在表格上: 标签_字母-XY,其中X和Y表示数字。 我已经成功地打印了宾果卡,但是我仍然无法遍历矩阵的行和列,验证是否有候选号码

并将其替换为“XX”。我不确定我的程序到底在做什么,因为它只是打印原始的宾果卡,这让我得出结论,我没有正确地访问矩阵。如果有人能告诉我我做错了什么,我将不胜感激!
我的想法是,我在python编程中使用atom文本编辑器,所以我没有
input()
函数,所以我不得不随机化我的bingo数组

import random
import numpy as np

m=5             #lines
n=5             #columns/rows
mat=[]
bingo_numbers = np.linspace(1,n*m,n*m,dtype=int)
remaining_numbers = bingo_numbers # I need this later on to know what numbers are left
random.shuffle(bingo_numbers)
print(bingo_numbers)
completed_lines = 0

for i in range(m):
    col=bingo_numbers[i*5:(i+1)*5]
    mat.append(list(col))

def imprimecartela(mat, completed_lines):  # Function to print the bingo card
    print("+", end=branco)
    print((16)*"-" + "+")
    print("| ", end=branco)
    if (completed_lines == 0):
        print(5*"_  ", end=branco)
    elif(completed_lines == 1):
        print("B  ", end=branco)
        print(4*"_  ", end=branco)
    elif(completed_lines == 2):
        print("B  ", end=branco)
        print("I  ", end=branco)
        print(3*"_  ", end=branco)
    elif(completed_lines == 3):
        print("B  ", end=branco)
        print("I  ", end=branco)
        print("N  ", end=branco)
        print(2*"_  ", end=branco)
    elif(completed_lines == 4):
        print("B  ", end=branco)
        print("I  ", end=branco)
        print("N  ", end=branco)
        print("G  ", end=branco)
        print("_  ", end=branco)
    else:
        print("B  ", end=branco)
        print("I  ", end=branco)
        print("N  ", end=branco)
        print("G  ", end=branco)
        print("O  ", end=branco)
    print("|")
    print("+" + (16)*"=" + "+")
    for i in range(m):
        print("| ", end=branco)
        for j in range(n):
            if mat[i][j] != 0:  # Check values of <mat>: if non zero print number with 2 digits, if zero print 'XX'
                print(str(mat[i][j]).zfill(2) + " ", end='')
            else:
                print("XX" + " ", end='')
        print("|")
    print("+" + (16)*"-" + "+")

def check_completed_lines(mat):
    completed_lines = 0
    for i in range(m):
        temp = [x[i] for x in mat]
        if (temp == [0,0,0,0,0]):
            completed_lines += 1
    for x in mat:
        if x==[0,0,0,0,0]:
            completed_lines += 1
    if (mat[0][0] == 0 and mat[1][1] == 0 and mat[2][2] == 0 and mat[3][3] == 0 and mat[4][4] == 0):
        completed_lines += 1
    if (mat[0][4] == 0 and mat[1][3] == 0 and mat[2][2] == 0 and mat[3][1] == 0 and mat[4][0] == 0):
        completed_lines += 1
    return completed_lines

imprimecartela(mat,completed_lines)

while (len(remaining_numbers) != 0): # Looping through turns  
    call_number = random.choice(remaining_numbers) # <-- Next number
    print("next number is : ", call_number)
    remaining_numbers = np.delete(remaining_numbers, np.where(remaining_numbers==call_number)) # Remove the number so it doesn't occur again
    for i in mat:
        if call_number in i:
            i[i.index(call_number)] = 0  # Change the value current round number to 0 in <mat>
    completed_lines = check_completed_lines(mat) # This function checks rows and columns and diagonals for completeness, every completed line will add a letter to "BINGO" on the card
    imprimecartela(mat, completed_lines)
    if completed_lines == 5:
        break    # When 5 lines are completed, you win, break
随机导入
将numpy作为np导入
m=5条线
n=5列/行
mat=[]
宾果数字=np.linspace(1,n*m,n*m,dtype=int)
剩余的数字=宾果数字#我稍后需要这个来知道剩下的数字是什么
随机洗牌(宾果数字)
打印(宾果数字)
已完成的\u行=0
对于范围内的i(m):
col=宾果数字[i*5:(i+1)*5]
材料附加(列表(列))
def imprimecartela(mat,完成的行):#打印宾果卡的功能
打印(“+”,结束=branco)
打印((16)*“-”+“+”)
打印(“|”,end=branco)
如果(已完成的_行==0):
打印(5*”,结束=branco)
elif(已完成的_行==1):
打印(“B”,结束=branco)
打印(4*”,结束=branco)
elif(已完成的_行==2):
打印(“B”,结束=branco)
打印(“I”,end=branco)
打印(3*“389;”,结束=branco)
elif(已完成的_行==3):
打印(“B”,结束=branco)
打印(“I”,end=branco)
打印(“N”,结束=branco)
打印(2*“u2;”,结束=branco)
elif(已完成的_行==4):
打印(“B”,结束=branco)
打印(“I”,end=branco)
打印(“N”,结束=branco)
打印(“G”,结束=branco)
打印(“\”,结束=branco)
其他:
打印(“B”,结束=branco)
打印(“I”,end=branco)
打印(“N”,结束=branco)
打印(“G”,结束=branco)
打印(“O”,结束=branco)
打印(“|”)
打印(“+”+(16)*“=”+“+”)
对于范围内的i(m):
打印(“|”,end=branco)
对于范围(n)内的j:
如果mat[i][j]!=0:#检查值:如果非零打印编号为2位,如果零打印“XX”
打印(str(mat[i][j]).zfill(2)+'',end='')
其他:
打印(“XX”+”,结束=“”)
打印(“|”)
打印(“+”+(16)*“-“+”+”)
def检查完成的管路(mat):
已完成的\u行=0
对于范围内的i(m):
温度=[x[i]表示材料中的x]
如果(温度==[0,0,0,0]):
已完成的_行+=1
对于垫中的x:
如果x==[0,0,0,0,0]:
已完成的_行+=1
如果(mat[0][0]==0和mat[1][1]==0和mat[2][2]==0和mat[3][3]==0和mat[4][4]==0):
已完成的_行+=1
如果(mat[0][4]==0和mat[1][3]==0和mat[2][2]==0和mat[3][1]==0和mat[4][0]==0):
已完成的_行+=1
返回已完成的\u行
改进卡特拉(材料、完成的生产线)
while(len(剩余的_数)!=0):#轮流循环

call_number=random.choice(剩余的_号码)#请您仅将相关代码作为邮件的一部分发布。另外,如果您要共享代码,请使用英文变量名称。您尝试访问矩阵的部分是什么?如果可以取消对实际代码的注释,那么您需要进行操作,但需要添加英文注释以理解这部分的功能。
import random
import numpy as np

m=5             #lines
n=5             #columns/rows
mat=[]
bingo_numbers = np.linspace(1,n*m,n*m,dtype=int)
remaining_numbers = bingo_numbers # I need this later on to know what numbers are left
random.shuffle(bingo_numbers)
print(bingo_numbers)
completed_lines = 0

for i in range(m):
    col=bingo_numbers[i*5:(i+1)*5]
    mat.append(list(col))

def imprimecartela(mat, completed_lines):  # Function to print the bingo card
    print("+", end=branco)
    print((16)*"-" + "+")
    print("| ", end=branco)
    if (completed_lines == 0):
        print(5*"_  ", end=branco)
    elif(completed_lines == 1):
        print("B  ", end=branco)
        print(4*"_  ", end=branco)
    elif(completed_lines == 2):
        print("B  ", end=branco)
        print("I  ", end=branco)
        print(3*"_  ", end=branco)
    elif(completed_lines == 3):
        print("B  ", end=branco)
        print("I  ", end=branco)
        print("N  ", end=branco)
        print(2*"_  ", end=branco)
    elif(completed_lines == 4):
        print("B  ", end=branco)
        print("I  ", end=branco)
        print("N  ", end=branco)
        print("G  ", end=branco)
        print("_  ", end=branco)
    else:
        print("B  ", end=branco)
        print("I  ", end=branco)
        print("N  ", end=branco)
        print("G  ", end=branco)
        print("O  ", end=branco)
    print("|")
    print("+" + (16)*"=" + "+")
    for i in range(m):
        print("| ", end=branco)
        for j in range(n):
            if mat[i][j] != 0:  # Check values of <mat>: if non zero print number with 2 digits, if zero print 'XX'
                print(str(mat[i][j]).zfill(2) + " ", end='')
            else:
                print("XX" + " ", end='')
        print("|")
    print("+" + (16)*"-" + "+")

def check_completed_lines(mat):
    completed_lines = 0
    for i in range(m):
        temp = [x[i] for x in mat]
        if (temp == [0,0,0,0,0]):
            completed_lines += 1
    for x in mat:
        if x==[0,0,0,0,0]:
            completed_lines += 1
    if (mat[0][0] == 0 and mat[1][1] == 0 and mat[2][2] == 0 and mat[3][3] == 0 and mat[4][4] == 0):
        completed_lines += 1
    if (mat[0][4] == 0 and mat[1][3] == 0 and mat[2][2] == 0 and mat[3][1] == 0 and mat[4][0] == 0):
        completed_lines += 1
    return completed_lines

imprimecartela(mat,completed_lines)

while (len(remaining_numbers) != 0): # Looping through turns  
    call_number = random.choice(remaining_numbers) # <-- Next number
    print("next number is : ", call_number)
    remaining_numbers = np.delete(remaining_numbers, np.where(remaining_numbers==call_number)) # Remove the number so it doesn't occur again
    for i in mat:
        if call_number in i:
            i[i.index(call_number)] = 0  # Change the value current round number to 0 in <mat>
    completed_lines = check_completed_lines(mat) # This function checks rows and columns and diagonals for completeness, every completed line will add a letter to "BINGO" on the card
    imprimecartela(mat, completed_lines)
    if completed_lines == 5:
        break    # When 5 lines are completed, you win, break