Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2021 14:11:27

Typical_beginer
Зарегистрирован: 2020-12-29
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск совпадающих атрибутов в коллекции объектов класса.

Всем добрый день!

Прохожу циклом по своей коллекции объектов,и с помощью условия ищу совпадающий атрибут `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 заказа), но она ничего не выдаёт.

Прикреплённый файлы:
attachment stackstack.jpg (125,3 KБ)

Офлайн

#2 Янв. 23, 2021 17:02:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск совпадающих атрибутов в коллекции объектов класса.

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

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

В этом плане существует понятие “чистые функции”, так что изучи его, что это такое и зачем это надо.



Отредактировано py.user.next (Янв. 23, 2021 17:07:02)

Офлайн

#3 Янв. 23, 2021 17:13:36

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Поиск совпадающих атрибутов в коллекции объектов класса.

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

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 23, 2021 17:17:28)

Офлайн

#4 Янв. 24, 2021 09:21:55

Typical_beginer
Зарегистрирован: 2020-12-29
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск совпадающих атрибутов в коллекции объектов класса.

Проблема решилась следующим образом.

 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)

Офлайн

#5 Янв. 24, 2021 09:29:29

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Поиск совпадающих атрибутов в коллекции объектов класса.

Оно таки да решилось. Но можно совершенствоваться. Я бы отказал в принятии на работу человеку выдавшему такое решение.
В питоне есть https://docs.python.org/3/library/collections.html#collections.Counter
С методом most_common.
А стандартную библиотеку претендент должен знать. :)



Офлайн

#6 Янв. 24, 2021 13:27:43

Typical_beginer
Зарегистрирован: 2020-12-29
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск совпадающих атрибутов в коллекции объектов класса.

doza_and
Оно таки да решилось. Но можно совершенствоваться. Я бы отказал в принятии на работу человеку выдавшему такое решение.В питоне есть https://docs.python.org/3/library/collections.html#collections.CounterС методом most_common.А стандартную библиотеку претендент должен знать.

Вы правы,но простые лабораторные задания в университете.
Там редко когда разрешают пользоваться встроенными модулями..Отсюда и такой порой странный код.
Это уже при написании диплома или различного рода практик(производственная,преддипломная) требуют знания и практическую реализацию всех модулей и библиотек.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version