2013-03-01 27 views
13

Tôi mới vào Vectors và tạo lớp. Tôi cố gắng để xây dựng lớp vector riêng của tôi, nhưng khi tôi vượt qua nó thông qua mã của tôi là:dòng 60, trong bộ trả về make_tuple (l) TypeError: iter() trả về không lặp của kiểu 'Vector'

vị trí + = tiêu đề * distance_moved

nơi vị trí và tiêu đề là cả hai vectơ. tiêu đề được chuẩn hóa. mục tiêu của tôi là lặp lại mã của tôi cho đến vị trí = đích. Điều gì sai với lớp học này?

nhập toán

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) 

Trả lời

0

Đối số đầu tiên đó là được thông qua vào make_tupleVector dụ của bạn (nó giống self luận rằng bạn đặt ở khắp mọi nơi).

Bạn cần phải vượt qua trong bạn muốn biến thành một tuple, mà có lẽ là x và y tọa độ:

def make_tuple(self): 
    return (self.x, self.y) 
30

Tôi đoán bạn đang sử dụng python 3.x, bởi vì tôi đã có lỗi tương tự. Tôi cũng mới làm lớp, nhưng sẽ rất hay khi chia sẻ những gì tôi đã học được :)

Trong 3.x, sử dụng __next__() thay vì next() trong định nghĩa lớp học. Lỗi này không xảy ra sau khi tôi đổi tên nó trong mã của bạn, nhưng tôi đã gặp một vấn đề khác, "đối tượng 'Vector' không có thuộc tính 'hiện tại'" :)

Tôi nghĩ rằng bạn nên hiểu các trình vòng lặp (và lớp học?) nhiều hơn nữa. Ví dụ đơn giản nhất là:

class Count: 
    def __init__(self, n): 
     self.max = n 

    def __iter__(self): 
     self.count = 0 
     return self 

    def __next__(self): 
     if self.count == self.max: 
      raise StopIteration 
     self.count += 1 
     return self.count - 1 

if __name__ == '__main__': 
    c = Count(4) 
    for i in c: 
     print(i, end = ',') 

và đầu ra là 0,1,2,3 ,.

Với lớp vectơ, tôi muốn lặp lại các thành phần của véc-tơ. Vì vậy:

def __iter__(self): 
    self.count = 0 
    self.list = [self.x, self.y, self.z] # for three dimension 
    return self 

def __next__(self): 
    if self.count == len(self.list): 
     raise StopIteration 
    self.count += 1 
    return self.list[self.count - 1] 

và trình vòng lặp xuất kết quả x, y, z.

Lưu ý rằng tính năng quan trọng nhất của trình vòng lặp là cung cấp cho trình tự từng bước mà không cần tạo toàn bộ danh sách. Vì vậy, nó không phải là rất tốt ý tưởng để làm cho self.list nếu trình tự sẽ rất dài. Thêm chi tiết tại đây: python tutorial

+0

Cảm ơn, điều này đã làm cho tôi. Bây giờ nếu chỉ các tài liệu không quá kinh khủng và không đầy đủ, tất cả chúng ta đều có thể tránh được điều này. – Basic

Các vấn đề liên quan