我正在尝试将我的Java类转录为Python。最后一个是Warshall算法,但是当我运行应用程序时,我得到了这个错误:
C:\Python33\python.exe C:/Users/Joloch/PycharmProjects/Varios/Warshall.py
Inserte un valor para n (la matriz será cuadrada, por lo que es nxn):
3
Inserte un dato en la posición 0 0 :
Inserte un dato en la posición 0 1 :
Traceback (most recent call last):
File "C:/Users/Joloch/PycharmProjects/Varios/Warshall.py", line 93, in <module>
Warshall().main()
File "C:/Users/Joloch/PycharmProjects/Varios/Warshall.py", line 59, in main
obj.Matriz[x][y] = Dato
IndexError: list assignment index out of range
Process finished with exit code 1
这是代码,如果你能告诉我我做错了什么,我非常感激:
from Tools.Scripts.treesync import raw_input
class Warshall(object):
pass
Matriz = [],[]
Lado = 0
def __init__(self):
return
@classmethod
def Funcion(self, A, B, C):
if ((self.Matriz[A][B] == 1) ^ (self.Matriz[A][C] == 1) & (self.Matriz[C][B] == 1)):
return 1
else:
return 0
def main(self):
obj = Warshall()
Dato = 0
x = 0
y = 0
z = 0
Uno = 0
Dos = 0
Tres = 0
Cuatro = 0
print("Inserte un valor para n (la matriz será cuadrada, por lo que es nxn): ")
obj.Lado = int(raw_input(""))
obj.Matriz = [obj.Lado],[obj.Lado]
while x < obj.Lado:
while y < obj.Lado:
print("Inserte un dato en la posición", x, y,": ")
try:
Dato = int(raw_input())
except TypeError:
print()
obj.Matriz[x][y] = Dato
y += 1
while z <= obj.Lado - 1:
while Uno <= obj.Lado - 1:
while Dos <= obj.Lado - 1:
obj.Matriz[Uno][Dos] = obj.Funcion(Uno, Dos, z)
Dos += 1
Uno += 1
z += 1
print()
print("Matriz de adyacencia correspondiente: ")
while Tres < obj.Lado:
while Cuatro < obj.Lado:
print(obj.Matriz[Tres][Cuatro])
print()
Cuatro += 1
Tres += 1
if __name__ == '__main__':
Warshall().main()
答案 0 :(得分:2)
这段代码以一种好奇的方式构建,这使得很难理清究竟发生了什么。
您的错误来源是obj.Matriz
是一个元组,其中包含两个长度为1的列表,而不是您期望的Lado
个Lado
数组。如果您打印obj.Matriz
,您将获得([5], [5])
(如果Lado == 5
)。
尝试更像
的内容obj.Matriz = [[0 for j in range(obj.Lado)] for k in range(obj.Lado)]
这将为您提供Lado
个Lado
列表,其中0
填充numpy
。如果您正在进行数字工作,您可能也想查看{{1}}。