2016-05-20 2 views
0
import math 

class Vector(): 

    vA = [3.183, 7.627] 

    def magnitude(vector): 
     sum = 0 
     i = 0 
     while i < len(vector): 
      sum += vector[i] 
      i += 1 
     return math.sqrt(sum) 

    def unitVector(vector): 
     print(1/(magnitude(vA) * vA)) 

Я пытаюсь закодировать некоторую линейную алгебру и вычислить единичные векторы для вектора 'vA', указанного выше. Когда я запускаю код, я получаю NameError: global name 'magnitude' is not defined. Я не понимаю, почему у меня проблема с просто вызовом одной функции из другой.Проблемы с вызовами

Я начинаю с python, и я предполагаю, что у меня есть недоразумение в отношении классов и функций, но я просмотрел документацию и не могу найти ответ, который я ищу.

+1

'self.magnitude' – Praveen

+0

методы экземпляра нуждаются в параметре SELF –

+0

Sidenote: NumPy библиотека, вероятно, лучше делать линейные вычисления алгебры –

ответ

1

У вас есть несколько ошибок в коде:

  • def magnitude(vector) должен быть def magnitude(self, vector)
  • def unitVector(vector) должен быть def unitVector(self, vector)
  • magnitude(vA) должен быть self.magnitude(vA)

EDIT:

Лучшим способом написания вашего класса будет использование концепций ООП в Python, поэтому вам не нужно передавать вектор в качестве аргумента функции, если вы делаете его переменной экземпляра.

Ваш класс может быть переписал так:

import math 

class Vector(): 

    def __init__(self, vector): 
     self.vector = vector 


    def magnitude(self): 
     sum = 0 
     i = 0 
     while i < len(self.vector): 
      sum += self.vector[i] 
      i += 1 
     return math.sqrt(sum) 

    def unitVector(self): 
     print(1/(self.magnitude() * self.vector)) 

vA = [3.183, 7.627] 
vec = Vector(vA) 
vec.unitVector() 

Имейте в виду, что он делает не работу. Потому что в unitVector Python не знает, как умножить float на список (self.magnitude() возвращает float, а self.vector - это список). Вероятно, вы захотите переделать эту часть.

+0

Магнитуда не действительно нужен параметр, хотя –

+0

Ни метода действительно не нужен один –

+0

также действительная точка –

Смежные вопросы