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的初学者,我假设我对类和函数有误解,但我查看了文档,找不到我要找的答案。
答案 0 :(得分:1)
您的代码中有几处错误:
def magnitude(vector)
应为def magnitude(self, vector)
def unitVector(vector)
应为def unitVector(self, vector)
magnitude(vA)
应为self.magnitude(vA)
编辑:
编写类的更好方法是在Python中使用OOP概念,因此如果将vector作为实例变量,则不必将vector作为函数参数传递。
你的课程可以这样改写:
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并不知道如何将浮点数乘以列表(self.magnitude()
返回浮点数,self.vector
是列表)。你可能想重做这部分。