Найти - Пользователи
Полная версия: Поиск совпадающих атрибутов в коллекции объектов класса.
Начало » Python для новичков » Поиск совпадающих атрибутов в коллекции объектов класса.
1
Typical_beginer
Всем добрый день!

Прохожу циклом по своей коллекции объектов,и с помощью условия ищу совпадающий атрибут `surnm` - фамилия заказчика.
Если предыдущий элемент совпадает или есть одинаковые записи,то происходит вывод фамилии частого заказчика.

Расшифровка атрибутов:
bookorder - объект класса,создаётся вне класса
bookorders - коллекция объектов класса(она работает в других функциях)

  def freqorder(self):
               for bookorder in bookorders:
                      for i in range(0,len(bookorder.surnm)-1):
                            if bookorder.surnm[i]==bookorder.surnm[i+1]:
                                  print("Частый заказчик книг это - ",bookorder.surnm)

Но по скриншоту видно, что программа должна выдать фамилию Иванов(так как у него 2 заказа), но она ничего не выдаёт.
py.user.next
Тебе надо bookorders либо через self получать, изнутри self, либо подавать в метод freqorder при вызове - то есть метод должен иметь, кроме self, ещё один аргумент. И range() и так от нуля идёт, поэтому ноль писать не надо - просто range(len(…) - 1), либо range(1, len(…)) .

И метод должен не выводить данные в консоль, а возвращать данные через return. Выводом в консоль должен заниматься отдельный объект снаружи этого класса, которому просто поступают данные, а он знает, как их правильно выводить и куда выводить. Иначе данные понадобится вывести не на консоль, а передать по сети на сокет, выложить на сайт, отправить по электронной почте, отправить в мессенджер, отдать их кому-нибудь через SOAP-протокол, и из-за этого тебе придётся по всем классам лазить и менять их, а потом, спустя какое-то время, это снова повторится. Поэтому все классы должны только данные возвращать, а выводом данных занимаются объекты, специализирующиеся только на выводе данных куда-либо - туда, сюда или ещё куда-нибудь.

В этом плане существует понятие “чистые функции”, так что изучи его, что это такое и зачем это надо.
PEHDOM
Typical_beginer
Прохожу циклом по своей коллекции объектов,и с помощью условия ищу совпадающий атрибут `surnm` - фамилия заказчика.
Если предыдущий элемент совпадает или есть одинаковые записи,то происходит вывод фамилии частого заказчика.
э-э-э а где собственно код который это должне реализовать? В приведенном выше коде вы ищете две одинаковые идущие подряд буквы в фамилии заказчика, и если находите считаете его частым заказчиком. Естевенно ни слово “Петров” ни слово “Иванов”, не соответвует этому условию.

         for i in range(0,len(bookorders)-1):
                            if bookorders[i].surnm==bookorders[i+1].surnm:
                                  print("Частый заказчик книг это - ",bookorders[i].surnm)
Typical_beginer
Проблема решилась следующим образом.

 def freqorder(self):
           valdict={}# словарь для хранения фамилий,и поиска повторяющихся фамилий
           for bookorder in bookorders:
                 if bookorder.surnm in valdict:
                          valdict[bookorder.surnm]+=1
                 else:
                       valdict[bookorder.surnm]=1
           print("Частый заказчик книг это - ",bookorder.surnm)
doza_and
Оно таки да решилось. Но можно совершенствоваться. Я бы отказал в принятии на работу человеку выдавшему такое решение.
В питоне есть https://docs.python.org/3/library/collections.html#collections.Counter
С методом most_common.
А стандартную библиотеку претендент должен знать. :)
Typical_beginer
doza_and
Оно таки да решилось. Но можно совершенствоваться. Я бы отказал в принятии на работу человеку выдавшему такое решение.В питоне есть https://docs.python.org/3/library/collections.html#collections.CounterС методом most_common.А стандартную библиотеку претендент должен знать.

Вы правы,но простые лабораторные задания в университете.
Там редко когда разрешают пользоваться встроенными модулями..Отсюда и такой порой странный код.
Это уже при написании диплома или различного рода практик(производственная,преддипломная) требуют знания и практическую реализацию всех модулей и библиотек.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB