Я в процессе создания программы для своего класса линейной алгебры с векторными и матричными классами, но у меня возникают проблемы с строкой моего класса матрицы для ее печати. Что вызывает проблему, это оператор if, который добавляет запятую после записи в матрицу, если она не является последней строкой в строке. Что любопытно об этом, я выделил проблему для той части моей программы, которая присваивает переменную индексу записи, но когда я добавил строку после этого, которая напечатала эту переменную, чтобы попытаться выяснить, что происходит , запустив программу, напечатал переменную AND THEN, дал ошибку из строки раньше. Вот код:Программа Python продолжает работать после столкновения с ошибкой
import copy
class vector:
def __init__(self, entries):
if type(entries) == list:
self.elements = []
self.dimensionality = len(entries)
for entry in entries:
self.elements.append(entry)
if type(entries) == vector:
self.elements = entries.elements
def __str__(self):
buff = "("
for e in self.elements:
buff += str(e)
if self.elements.index(e) < len(self.elements) - 1:
buff += ", "
buff += ")"
return buff
def __getitem__(self,index):
return self.elements[index]
def __len__(self):
return len(self.elements)
def __mul__(self, otherVector):
if self.dimensionality != otherVector.dimensionality:
raise RuntimeError("Cannot multiply vectors of different dimensions")
else:
product = 0
for e in self.elements:
product += e * otherVector.elements[self.elements.index(e)]
return product
def __eq__(self, otherVariable):
return size(self) == size(otherVariable)
def size(x):
return (x * x)**(1/2)
class matrix:
def __init__(self, entries):
for i in entries:
if len(entries[0]) != len(i):
raise RuntimeError("All rows of matrix must contain the same number of entries")
self.elements = []
for row in entries:
self.elements.append(vector(row))
def __str__(self):
buff = "("
for row in self.elements:
buff += str(row)
a = self.elements.index(row) #this is the line that prompts the error
b = len(self.elements) - 1
print (a) #but this line executes before the error cuts off the rest of the program
print(b)
print(a<b)
if a < b :
buff += ", "
buff += ")"
return buff
print(matrix([[1,2],[2,3]]))
и вот ошибка это дает мне:
Traceback (most recent call last):
File "/Users/sebpole/Documents/vectors.py", line 127, in <module>
print(matrix([[1,2],[2,3]]))
File "/Users/sebpole/Documents/vectors.py", line 83, in __str__
a = self.elements.index(row)
File "/Users/sebpole/Documents/vectors.py", line 38, in __eq__
return size(self) == size(otherVariable)
NameError: name 'size' is not defined
Я установил эту конкретную ошибку, пропуская определение функции «размер()» и просто писать его на определение векторного равенства. Так как это было непродолжительное, это не было проблемой, и после этой настройки программа отлично справилась, но у меня есть следующие два концептуальных вопроса: 1) Что происходит с линией после ошибки, выполнявшейся до того, как произошла ошибка? 2) В чем была проблема? Почему у программы возникла проблема с вызовом функции, которую я определил немного позже? Почему при определении индекса строки матрицы вывести определение равенства для этой строки (вектора)?
Вы могли бы показать мне, как конкретно? Где я могу вставить это? –
Пожалуйста, подумайте над редактированием сообщения, чтобы добавить больше объяснений о том, что делает ваш код и почему он решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает OP понять их проблему. – Drenmi