我如何将请求矩阵的对角线修改为i = j的零

发布于 2025-01-24 16:43:30 字数 2863 浏览 4 评论 0原文

我正在使用python在Excel(库OpenPyxl)中导出Python的矩阵,并由Cell的请求。 我的问题是,在该请求中,我不要求矩阵的对角线,而是用零来重新填充它。

这是我的代码:

#LIBRERIAS
import openpyxl as opxl
import sys
import numpy as np

cant_nodos = 3

#FUNCIONES

def min_nodos(): #this function request the number of nodes.
    cant_nodos = int(input("Ingresar cantidad de nodos a utilizar (mínimo 6)"))
    while(cant_nodos < 6):
        print("ERROR: Elija mínimo 6 nodos y que sea entero positivo. ")
        cant_nodos = int(input("Ingresar cantidad de nodos a utilizar (mínimo 6)"))
    return cant_nodos

    
def crear_matriz_adyacente(cant_nodos): #this function create the matrix in excel with the nodes.
    libro = opxl.Workbook()
    pagina = libro.active
    pagina.title = "matriz_de_adyacencia"
    lista_nodos = []
    lista_valores = []
    cont = 0

    while(cont < cant_nodos):
        contador = str(cont+1)
        nodo = str(input("Ingrese nodo " +contador+ ":"))
        if nodo not in lista_nodos:
            lista_nodos.append(nodo)
            pagina.cell(row = 1, column = cont+2, value = nodo)
            pagina.cell(row = cont+2, column = 1, value = nodo)
            cont = cont+1
        else:
            print("ERROR: Nodo existente, escoja otro: ")
        

    **for fila in range(len(lista_nodos)):
        for columna in range(len(lista_nodos)):
            valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ ":"))
        
            while(valor < 0):
                print("ERROR: Valor negativo. Ingrese un valor positivo")
                valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ "(si el valor pertenece a la diagonal (i=j) ingresar un 0):"))
        
            pagina.cell(row = fila+2, column = columna+2, value = valor)**
                
    print(lista_valores)
        
    libro.save("matriz_adyacente.xlsx")

    return crear_menu()



def abrir_matriz_adyacente(matriz_adyacente): #this function open the matrix in python to use it because I need it for some algorithms (kruskal and dijkstra)
    excel = opxl.load_workbook(matriz_adyacente)
    lista_excel = []
    pagina = excel.active
    maximo_columna = pagina.max_column
    maximo_fila = pagina.max_row

    for fila in range(1, maximo_fila+1):
        lista_fila = []
        for columna in range(1, maximo_columna+1):
            espacio = pagina.cell(row = fila, column = columna)
            lista_fila.append(espacio.value)
        lista_excel.append(lista_fila)
    
    return lista_excel
    
crear_menu()
crear_matriz_adyacente(cant_nodos)
excel = abrir_matriz_adyacente("matriz_adyacente.xlsx")

这样,我正在执行用户输入许多节点(在这种情况下,我将其限制为3),然后他通过单元格中的单元格中的excel中矩阵以一定的值来重新填充矩阵。 但是,他们不必重新填充矩阵的对角线,因为它必须是零。 我不知道该怎么做,我一直在尝试做很多事情,但是我自己找不到答案,我会很高兴您的帮助。

谢谢你!。

I'm doing a matrix with python exporting at excel (library openpyxl) with a request by keyboard cell by cell.
My question is how in that request I don't request the diagonal of the matrix and instead refill it with zeros.

Here is my code:

#LIBRERIAS
import openpyxl as opxl
import sys
import numpy as np

cant_nodos = 3

#FUNCIONES

def min_nodos(): #this function request the number of nodes.
    cant_nodos = int(input("Ingresar cantidad de nodos a utilizar (mínimo 6)"))
    while(cant_nodos < 6):
        print("ERROR: Elija mínimo 6 nodos y que sea entero positivo. ")
        cant_nodos = int(input("Ingresar cantidad de nodos a utilizar (mínimo 6)"))
    return cant_nodos

    
def crear_matriz_adyacente(cant_nodos): #this function create the matrix in excel with the nodes.
    libro = opxl.Workbook()
    pagina = libro.active
    pagina.title = "matriz_de_adyacencia"
    lista_nodos = []
    lista_valores = []
    cont = 0

    while(cont < cant_nodos):
        contador = str(cont+1)
        nodo = str(input("Ingrese nodo " +contador+ ":"))
        if nodo not in lista_nodos:
            lista_nodos.append(nodo)
            pagina.cell(row = 1, column = cont+2, value = nodo)
            pagina.cell(row = cont+2, column = 1, value = nodo)
            cont = cont+1
        else:
            print("ERROR: Nodo existente, escoja otro: ")
        

    **for fila in range(len(lista_nodos)):
        for columna in range(len(lista_nodos)):
            valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ ":"))
        
            while(valor < 0):
                print("ERROR: Valor negativo. Ingrese un valor positivo")
                valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ "(si el valor pertenece a la diagonal (i=j) ingresar un 0):"))
        
            pagina.cell(row = fila+2, column = columna+2, value = valor)**
                
    print(lista_valores)
        
    libro.save("matriz_adyacente.xlsx")

    return crear_menu()



def abrir_matriz_adyacente(matriz_adyacente): #this function open the matrix in python to use it because I need it for some algorithms (kruskal and dijkstra)
    excel = opxl.load_workbook(matriz_adyacente)
    lista_excel = []
    pagina = excel.active
    maximo_columna = pagina.max_column
    maximo_fila = pagina.max_row

    for fila in range(1, maximo_fila+1):
        lista_fila = []
        for columna in range(1, maximo_columna+1):
            espacio = pagina.cell(row = fila, column = columna)
            lista_fila.append(espacio.value)
        lista_excel.append(lista_fila)
    
    return lista_excel
    
crear_menu()
crear_matriz_adyacente(cant_nodos)
excel = abrir_matriz_adyacente("matriz_adyacente.xlsx")

With this I'm doing that the user input a number of nodes (in this case I limit it to 3), and then he refill the matrix in excel cell by cell with some value.
But, they don't have to refill the diagonal of the matrix because it has to be zeros.
I don't know how to do it, i had been trying to do it a lot, but i couldn't find some answer by myself, i would appreciate a lot your help.

Thank you!.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴情 2025-01-31 16:43:30

指定您要编辑的代码的哪一部分是有帮助的,尤其是当事物以不同的语言命名时。据我了解,您需要做的就是这样:

for fila in range(len(lista_nodos)):
    for columna in range(len(lista_nodos)):
        if fila == columna:
            valor = 0
        else:
            valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ ":"))
    
        while(valor < 0):
            print("ERROR: Valor negativo. Ingrese un valor positivo")
            valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ "(si el valor pertenece a la diagonal (i=j) ingresar un 0):"))
    
        pagina.cell(row = fila+2, column = columna+2, value = valor)
            

it would have been helpful to specify which portion of the code you want to edit, especially when things are named in a different language. From what I understand, all you need to do is this:

for fila in range(len(lista_nodos)):
    for columna in range(len(lista_nodos)):
        if fila == columna:
            valor = 0
        else:
            valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ ":"))
    
        while(valor < 0):
            print("ERROR: Valor negativo. Ingrese un valor positivo")
            valor = int(input("Ingrese valor de nodo " +lista_nodos[fila]+" con el nodo " +lista_nodos[columna]+ "(si el valor pertenece a la diagonal (i=j) ingresar un 0):"))
    
        pagina.cell(row = fila+2, column = columna+2, value = valor)
            
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文