2014-09-19 3 views
2

это мое назначение:Возникли проблемы с классами Python

SortedStringBag (initial_list) создать новый отсортированный объект авоськи и придать ему первоначальный список строк. Сортировка списка. Это единственный раз, когда вы можете сортировать.

print() распечатать все содержимое списка, по одному в каждой строке. Помните, что он должен быть отсортирован в любое время.

кол-во указано, сколько раз строка s встречается в этой сумке. Верните 0, если не найдете вообще.

Вставить (-е) вставить строку s в список, используя алгоритм O (n).

Подсказка: для сортировки списка питона, просто сделать:

mylist.sort()

Вот что я сделал

class SortedStringBag: 
def __init__(self,initial_list): 
    self.ilist = initial_list.sort() 
def __str__(self): 
    for i in self: 
     if self[i]<self[i+1]: 
      print(self[i]) 
def insert(self, s): 
    for i in range(len(self.ilist)): 
     if self[i] > item: 
      self.insert(i, item) 
    else: 
     self.append(s) 
def count(self, s): 
    i = 0 
    for n in self: 
     if s in self[n]: 
      i = i+1 

по какой-то причине я не могу получить в верхней части он позиционируется правильно, но он находится в моем коде.

Я действительно не понимаю классы, по какой-то причине ни один из методов ассоциированной с классом

ответ

4

Ваша главная проблема здесь состоит в том, что вы путаете вызова self с self.ilist, давая вам ошибки как:

>>> import StringBag 
>>> mylist = StringBag.SortedStringBag([1, 8, 3, -1, 9, 3, 7, 23 , 6]) 
>>> print mylist 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "testt.py", line 5, in __str__ 
    for i in self: 
TypeError: iteration over non-sequence 
>>> 

Однако у вас есть еще одна ключевая ошибка, которая присваивает переменной значение метода. Методы ничего не возвращают, поэтому попытка присвоить им даст вам значение None:

>>> var = [1, 3, 4, 2].sort() 
>>> print var 
None 
>>> 

Вот отредактированный код:

class SortedStringBag: 
    def __init__(self,initial_list): 
     self.ilist = sorted(initial_list) 
    def __str__(self): 
     return '\n'.join([str(item) for item in self.ilist]) 
    def insert(self, s): 
     for i in range(len(self.ilist)): 
      if self.ilist[i] > s: 
       self.ilist.insert(i, s) 
       break 
     else: 
      self.ilist.append(s) 
    def count(self, s): 
     i = 0 
     for n in self.ilist: 
      if s == n: 
       i+=1 
     return i 

Запускается как:

>>> import StringBag 
>>> mylist = StringBag.SortedStringBag([1, 8, 3, -1, 9, 3, 7, 23 , 6]) 
>>> print mylist 
-1 
1 
3 
3 
6 
7 
8 
9 
23 
>>> mylist.count(3) 
2 
>>> mylist.count(2) 
0 
>>> mylist.insert(4) 
>>> print mylist 
-1 
1 
3 
3 
4 
6 
7 
8 
9 
23 
>>> mylist.count(4) 
1 
>>> 
+0

Спасибо ! Мне просто придется привыкнуть к классам –

+0

@BrandonJerz, если бы этот ответ помог вам, не могли бы вы принять его и + 1 его? Это дает вам репутацию! Просто нажмите на верхнюю стрелку рядом с моим ответом на +1 и зеленую галочку, чтобы принять. –

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