Форум сайта python.su
0
Всем добрый день!
Прохожу циклом по своей коллекции объектов,и с помощью условия ищу совпадающий атрибут `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)
Прикреплённый файлы:
stackstack.jpg (125,3 KБ)
Офлайн
857
Тебе надо bookorders либо через self получать, изнутри self, либо подавать в метод freqorder при вызове - то есть метод должен иметь, кроме self, ещё один аргумент. И range() и так от нуля идёт, поэтому ноль писать не надо - просто range(len(…) - 1), либо range(1, len(…)) .
И метод должен не выводить данные в консоль, а возвращать данные через return. Выводом в консоль должен заниматься отдельный объект снаружи этого класса, которому просто поступают данные, а он знает, как их правильно выводить и куда выводить. Иначе данные понадобится вывести не на консоль, а передать по сети на сокет, выложить на сайт, отправить по электронной почте, отправить в мессенджер, отдать их кому-нибудь через SOAP-протокол, и из-за этого тебе придётся по всем классам лазить и менять их, а потом, спустя какое-то время, это снова повторится. Поэтому все классы должны только данные возвращать, а выводом данных занимаются объекты, специализирующиеся только на выводе данных куда-либо - туда, сюда или ещё куда-нибудь.
В этом плане существует понятие “чистые функции”, так что изучи его, что это такое и зачем это надо.
Отредактировано py.user.next (Янв. 23, 2021 17:07:02)
Офлайн
294
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)
Офлайн
0
Проблема решилась следующим образом.
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)
Офлайн
253
Оно таки да решилось. Но можно совершенствоваться. Я бы отказал в принятии на работу человеку выдавшему такое решение.
В питоне есть https://docs.python.org/3/library/collections.html#collections.Counter
С методом most_common.
А стандартную библиотеку претендент должен знать. :)
Офлайн
0
doza_and
Оно таки да решилось. Но можно совершенствоваться. Я бы отказал в принятии на работу человеку выдавшему такое решение.В питоне есть https://docs.python.org/3/library/collections.html#collections.CounterС методом most_common.А стандартную библиотеку претендент должен знать.
Офлайн