ligne 60, dans le taper make_tuple tuple (l) TypeError: iter () retourné non-itérateur du type 'Vector'
Je suis nouveau sur des Vecteurs et des cours de fabrication. Je suis en train de construire ma propre classe vector, mais lorsque je passe par mon code qui est:
position + = - tête*distance_moved
où la position et le cap sont les deux vecteurs. la rubrique est normalisé. mon but est de refaire mon code jusqu'à ce que la position = destination.
Quel est le problème avec cette classe?
import math
class Vector(object):
#defaults are set at 0.0 for x and y
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
#allows us to return a string for print
def __str__(self):
return "(%s, %s)"%(self.x, self.y)
# from_points generates a vector between 2 pairs of (x,y) coordinates
@classmethod
def from_points(cls, P1, P2):
return cls(P2[0] - P1[0], P2[1] - P1[1])
#calculate magnitude(distance of the line from points a to points b
def get_magnitude(self):
return math.sqrt(self.x**2+self.y**2)
#normalizes the vector (divides it by a magnitude and finds the direction)
def normalize(self):
magnitude = self.get_magnitude()
self.x/= magnitude
self.y/= magnitude
#adds two vectors and returns the results(a new line from start of line ab to end of line bc)
def __add__(self, rhs):
return Vector(self.x +rhs.x, self.y+rhs.y)
#subtracts two vectors
def __sub__(self, rhs):
return Vector(self.x - rhs.x, self.y-rhs.y)
#negates or returns a vector back in the opposite direction
def __neg__(self):
return Vector(-self.x, -self.y)
#multiply the vector (scales its size) multiplying by negative reverses the direction
def __mul__(self, scalar):
return Vector(self.x*scalar, self.y*scalar)
#divides the vector (scales its size down)
def __div__(self, scalar):
return Vector(self.x/scalar, self.y/scalar)
#iterator
def __iter__(self):
return self
#next
def next(self):
self.current += 1
return self.current - 1
#turns a list into a tuple
def make_tuple(l):
return tuple(l)
source d'informationauteur rrcm
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous êtes à l'aide de python 3.x, parce que j'ai une erreur similaire.
Je suis également nouveau sur la fabrication de la classe, mais il serait agréable de partager ce que j'ai appris 🙂
En 3.x, utilisez
__next__()
au lieu denext()
dans la définition des classes.L'erreur n'avons pas eu lieu après je l'ai renommé dans votre code, mais j'ai eu un autre problème", "Vecteur" de l'objet n'a pas d'attribut '"actuel" 🙂
Je pense qu'il serait préférable pour vous de comprendre les itérateurs (et de la classe?) plus.
Un exemple le plus simple est:
et les sorties sont 0,1,2,3,.
Avec un vecteur de classe, je veux parcourir les composantes du vecteur. Donc:
et l'itérateur sorties de la séquence x, y, z.
Noter que la caractéristique la plus importante de itérateurs est de donner la séquence, étape par étape, sans créer de toute la liste. Il n'est donc pas une très bonne idée de faire
self.list
si la séquence sera très long.Plus de détails ici: tutoriel python
Le premier argument qui est passée dans
make_tuple
est votreVector
instance (c'est la mêmeself
argument que vous avez mis partout).Vous avez à passer dans ce vous souhaitez transformer en un tuple, ce qui est probablement vos coordonnées x et y: