2014-12-02 3 views
2

я написал следующий класс и программа:Python, как применять классы правильно

class Coordinate(object): 
    def __init__(self,x,y): 
     self.x_coordinate = x 
     self.y_coordinate = y 

class CoordinatRow(object): 
    def __init__(self): 
     self.coordinaterow = [] 

    def add_coordinaterow(self, coordinate): 
     self.coordinaterow.append(coordinate) 

    def weave(self,other): 
     lijst = [] 
     for i in range(len(self.coordinaterow)): 
      lijst.append(self.coordinaterow[i]) 
      lijst.append(other.row[i]) 
     coordinaterow = lijst 
     print coordinaterow 

программа:

from Coordinates import Coordinate, CoordinatRow 
from ipy_lib import file_input 

'''functies''' 

def split_and_add(invoer): 
    rij = invoer.split('=') 
    for line in rij: 
     process_row(line) 

def process_row(line): 
    temp_coordinate_row = CoordinatRow() 
    rij = line.split() 
    for coordinate in rij: 
     coor = process_coordinate(coordinate) 
     temp_coordinate_row.add_coordinaterow(coor) 
    return temp_coordinate_row 

def process_coordinate(coordinate): 
    idunno = coordinate.split(',') 
    return Coordinate(int(idunno[0]),int(idunno[1])) 

'''programma''' 
bestand = file_input() 
split_and_add(bestand) 
rows = split_and_add(bestand) 
for row in rows: 
    row.weave(row) 

вход выглядит следующим образом:

5,4 4,5 8,7=6,3 3,2 9,6 4,3=7,6=9,8=5,5 7,8 6,5 6,4 

Ech строка seprated по =. Я хочу переплетать каждую строку со следующей строкой следующим образом:

5.4, 4.5, 8.7 weave with 6.3, 3.2, 9.6, 4.3 
5.4, 6.3, 4.5, 3.2, 8.7, 9.6, 4.3 

и следующий ряд в эту новую строку.

Проблема заключается в том, как я применяю свои классы, я думаю. Я получаю эту ошибку:

for row in rows: 
TypeError: 'NoneType' object is not iterable 

Что здесь не так?

+0

Проблемы вы ничего не возвращающаяся из 'split_and_add', поэтому строки - это None – user2097159

+0

Я думаю, что вы хотите' yield process_row (line) 'в' split_and_add' функции. В противном случае вы возвращаете 'None' – GWW

+0

, как я могу это решить? – Pieter

ответ

2

Если вы предпочитаете не использовать выход

def split_and_add(invoer): 
    rij = invoer.split('=') 
    rows = [] 
    for line in rij: 
     rows.append(process_row(line)) 
    return rows 

Для вашей второй проблемы, которую вы можете сделать что-то вроде этого:

for row in range(0,len(rows)-1): 
    rows[row].weave(rows[row+1]) 
+0

Это работает, но как бы я затем взять каждый отдельный объект и переплести его со следующего, используя мой метод переплетения? – Pieter

+0

Обновлен мой ответ с тем, что я думаю, что вы хотите. – user2097159

+0

Да точно. Только проблема, которую я получаю сейчас, это ошибка: TypeError: объект 'int' не имеет атрибута '__getitem__' – Pieter

3
def split_and_add(invoer): 
    rij = invoer.split('=') 
    for line in rij: 
     yield process_row(line) 
+0

Как и GWW, добавьте инструкцию yield, так что split_and_add превращается в генератор и может возвращать ваши строки. –

+0

И как я могу взять каждую отдельную строку и использовать мой метод переплетения в своем классе, чтобы сплести его со следующей? – Pieter

+0

В вашем коде вы применяете плетение к самой строке, а не к следующей, не так ли? –

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