2015-10-30 10 views
1

Я вскочил на некоторые ошибки. Я не мог этого решить. В основном я разбиваю свой вход где бы то ни было 'и' & 'или' происходит и удаляет последовательности, имеющие x, а не x в том же под-списке. Мой код выглядит следующим образомAttributeError: объект 'builtin_function_or_method' не имеет атрибута 'split'

import string 

class list(object): 

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

     def update_list(self): 
      new_list = [i.split("and") for i in input.split("or")] 
      print new_list 

     def reduced(self): 
      re_list = [m for m in new_list if not any("not" + m in new_list)] 
      print re_list 

def main(): 
    my_input = raw_input("  ") 
    print my_input 
    my_list = list(my_input) 
    my_list.update_list() 
    my_list.reduced() 

if __name__ == '__main__': 
    main() 

ошибок, которые я получил:

Traceback (most recent call last): 
line 39, in <module> 
    main() 
line 32, in main 
    my_list.update_list() 
line 18, in update_list 
    new_list = [i.split("and") for i in input.split("or")] 
AttributeError: 'builtin_function_or_method' object has no attribute 'split' 

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

apple and berry or not apple and apple or banana and not papaya 

желаемый результат:

[['apple', 'berry'],['banana', 'not papaya']] 

также я использую Python 2.x серия

я выпрямляется выше, когда я заменил вход с self.input в update_list() Но я получил новые ошибки заявив

re_list = [m for m in new_list if not any("not" + m in new_list)] 
    NameError: global name 'new_list' is not defined 
+0

Вы имеете в виду 'self.input', а не' input'. – khelwood

ответ

1

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

'builtin_function_or_method' object has no attribute 'split'

с встроено функции input не имеет атрибута split.

EDIT ----

Хорошо, я дам вам больше, так как вы, кажется, все еще борется. Если вы хотите, чтобы объект сохранял значение от вызова до вызова, вам нужно использовать «я». для обновления атрибутов объекта. Я немного расплывчато о том, чего вы хотите сделать, поэтому я могу ошибаться.

Примечание: для собственного тестирования здравомыслия я жестко закодированы вход, но вы могли бы поставить raw_input() заявление обратно в

Кроме того, держаться подальше от имен, которые могут затирать Python встроенные модули, такие как «список. "и" ввод ".

class MyList(object): 
    ''' Also, classes are usually Capitalized. ''' 
    def __init__(self, data): 
     self.raw_data = data 

    def update_list(self): 
     ''' I added an additional loop in order to strip away spaces. ''' 
     self.parsed_data = [[ j.strip() for j in i.split("and") ] for i in self.raw_data.split("or") ] 
     return self.parsed_data 

    def reduce_list(self): 
     self.reduced_data = [m for m in self.parsed_data if m[0] != "not "+m[1] and m[1] != "not "+ m[0]] 
     return self.reduced_data 

def test_my_list(): 
    input_data = """apple and berry or not apple and apple or banana and not papaya""" 
    print(input_data) 
    my_list = MyList(input_data) 
    print(my_list.update_list()) 
    print(my_list.reduce_list()) 

>>> test_my_list() 
apple and berry or not apple and apple or banana and not papaya 
[['apple', 'berry'], ['not apple', 'apple'], ['banana', 'not papaya']] 
[['apple', 'berry'], ['banana', 'not papaya']] 
+0

Я исправил это и получил новую ошибку @RobertB 're_list = [m для m в new_list if not any (" not "+ m in new_list)] NameError: глобальное имя 'new_list' не определено' Спасибо за объяснение – Belle

+0

Вы хотите назначить вещи как «new_list» в качестве атрибутов объекта? В этом случае вам нужно прикрепить их к «себе». Я не совсем уверен, что делать с вашим комментарием, потому что я не знаю, в какой области вы его выполняете. Если это код, который будет добавлен в ваш пример, продолжайте и поместите его в вопрос, чтобы я мог видеть его в контексте. Кроме того, в вашем вопросе инструкции «def main» и «if __main__» отступают неправильно. – RobertB

+0

О да, я неправильно отступил, только разместив его здесь. – Belle