Усенко Михаил | Собеседование python разработчик

  Рет қаралды 11,778

Андрей += Пронин

Андрей += Пронин

Жыл бұрын

Моя тележка: andpronin
ref.proninteam.ru/ моя реферальная программа. Стажировки и деньги в обмен на рекомендации.
t.me/KZbinPronin
Чат для общения pyhton разработчиков и им сочуствующих. Свободное общение, тестовые и вопросы с собесов и прочее. Заходите, там вам рады.
Поддержать канал: www.tinkoff.ru/rm/pronin.andr...
Обычно денежка идёт на книжки про питончик. Но иногда на светлое и тёмное.
Если Тиньков не даёт перечислить, стукните в личку телеги andpronin, придумаем что нибудь
Виш лист
Хорошие книги по Питончику, которые могу рекомендовать (и хочу купить с вашей помощью).
Изучаем Python. Двухтомник. Марк Лутц. Очень подробно и структурно (Хочу дождаться 6го издания.. )
• Изучаем Python с Марко...
Читаем и разбираем ее тут
Куплено (огромное спасибо зрителям)
Знакомство с Python | Бейдер Дэн (2023) - выглядит приятно для новичка
Чистый Python. Тонкости программирования для профи | Бейдер Дэн (2022) - хорошо для продолжения
Высоконагруженные приложения. Программирование, масштабирование, поддержка | Клеппман Мартин
Python. К вершинам мастерства | Рамальо Лучано - 2е издание - сложно для новичка, но интересно
Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура -- хорошо про то, когда какой фреймворк применять
Видимо, дальше появтся еще нескромные желания. Но пока - так
Моя тележка andpronin -- стучите, если что.
Мой канал про обучению python с нуля и до мидла Андрей+=Пронин
/ @pypronin
Я в других сетях
🔗Вконтакте: CaptPronin
🔗Дзен: zen.yandex.ru/id/5fbd33919412...
#python #питон #программирование #Андрей_Пронин #собеседование #

Пікірлер: 80
@Dakovalev
@Dakovalev Жыл бұрын
Как в запечатанной колоде могут быть карты по-другому разложены? Вы что, в киосках их заряжаете?
@AndyPronin
@AndyPronin Жыл бұрын
МОжет быть другой тип колоды. Для Гвинта, например ;)
@tazman8187
@tazman8187 11 ай бұрын
Ёбаный рот этого казино, ты бредишь что ли?
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
Андрей, вы как всегда превосходны) надо еще погонять молодых))
@7IdE
@7IdE 11 ай бұрын
1. Передать в класс параметры - это совсем нехорошо, назовем это так. 2. Хотел использовать self на уровне атрибутов класса - нет понимания того, что такое self и зачем оно. 3. Забыл def написать - это прям совсем плохо. 4. "Глобалы хранятся в оперативке и если программа падает, то все данные стираются" - вот за такое прям сразу минус. И за то, что не знает, что такое глобальные переменные, и за то, что не знает, как хранятся данные, при выполнении программы. 5. Вот то высказывание про компрехеншены - ну, такое мог сказать только человек, который не знает, что компрехеншены работают на 20-60% быстрее, чем обычных for. Ну то есть у человека вообще нет понимания не столько ООП в целом, сколько синтаксиса Питона, на основании которого реализована ООП. И тут возникакет вопрос: зачем он всякие там боты пишет и тд, если у него такой большой пробел в знаниях? Или как он вообще писал приложения на Джанге без этих знаний? Банальный кастомный метод модели/вьюхи дописать - тоже в гугл? Вообще бессмысленно как-то, как по мне: большая часть Джанги (да и Питона в целом) без понимания питоновской ООП - это тупо магия. Да, он, возможно, знает, как написать того или иного бота, как использовать ту или иную библиотеку, Но это минусы. Из плюсов: он, в целом, посильнее, чем предыдущие N человек. И код достаточно неплохо пишет. Трабла в том, что для него вся подкапотня Питона - это магия. Думаю, месяц-два изучения питоновской ООП - набить руку на написании классов - и проблема решена. А на данный момент знания слишком поверхностные. Да, это, скорее всего, не помешает сделать какой-то быстро сайт на Джанге или написать бота - но только зачем это нужно? И если бы собес заканчивался на этом, я бы уверенно сказал "надо подучиться", но дальше был обзор проекта и, т.к. я из будущего, я еще и стрим с ним посмотрел. И тут я прям готов повернуть диван. Этот бот - прям титаническая работа - это не Джанго, где 80% кода из коробки. Весь код рукописный, писал, судя по всему, сам, кодстайл классный. Вот с моего стула я реально не смогу сказать, смог бы я такой проект написать или нет. Но тут возникает вопрос: как человек, не имея понимания об устройстве Питона, реализовал такой проект? Методом проб и ошибок? Странно это все, кароче. При этом общается реально классно, на стриме в некоторых моментах не растерялся, а нормально ответил - это уже о многом говорит. Еще и, судя по всему, неплохой стек технологий знает (в том же боте Редис используется, к примеру). В общем и целом, мой поинт вот в чем: что тут на видосе, что на стриме у меня проскачило ощущение, что человек просто "пользуется предоставленными интерфейсами в соответствии с рекомендациями" под флагом "а зачем мне это ООП, если я и без него могу кодить" - но это все лишь на гране ощущений. Если я ошибаюсь - то все супер. Месяцок-другой потратить на разбор питонячьего ООП - не столько общую теорию ООП (хотя и ее тоже) - сколько именно реализацию ООП в Питоне. И тогда можно будет понять, что Питон - это на 95% ООП. И с этими знаниями и на сам Питон можно будет совершенно иначе взглянуть - уберется составляющая магии. Так что, думаю, тут однозначно респект. P.S. А насчет девушек - ну, я за коктейли: то с ними, то без них, то с Русланом, то с Олегом. Дабы разнообразие было.
@Normaldaki777
@Normaldaki777 11 ай бұрын
так у него опыт несколько месяцев. многие и за пару лет такого не набивают. я тоже не знал про важность ооп:) но теперь знаю, инвестирую в него больше времени. мой опыт четыре месяца с самого нуля. спасибо за советы по ооп.
@assetdyussenov
@assetdyussenov Жыл бұрын
Михаилу удачи. Про колоду карт тоже вспомнил про "К вершинам мастерства"
@AndyPronin
@AndyPronin Жыл бұрын
Для того и читаем книжки) Но у Лусиано попроще реализация
@mak32
@mak32 Жыл бұрын
Опа! И снова я первый, кто поставил лайкос и написал комент 😁 Андрей, процветания, счастья, хорошего кода, лютых собесов и новых книжек на разборы😊
@AndyPronin
@AndyPronin Жыл бұрын
Самый быстрый лайкер Ютуба)
@Maine__Coon__1
@Maine__Coon__1 Жыл бұрын
А и по поводу, барышней, они заряжают позитивом однозначно, пусть присутствуют, 😇
@ivanabdullaev859
@ivanabdullaev859 11 ай бұрын
да прям.
@Pafel0684
@Pafel0684 Жыл бұрын
Лучше без барышень, так как не интересно слушать, как и почему было у потенциального стажёра. Охота сразу к тех части)
@bjj1423
@bjj1423 11 ай бұрын
Понятно. Прошел несколько курсов. Сейчас изучаю машинное обучение. Но вижу что нужно делвть упор на ООП, потому что вобще его не знаю.
@user-fg4og7mh1n
@user-fg4og7mh1n Жыл бұрын
Здравствуйте Андрей! Отличный собес получился! Можете посоветовать книгу по питону только про ООП?)
@AndyPronin
@AndyPronin Жыл бұрын
Отдельно по ООП не скажу Python. К вершинам мастерства. (спасибо подписчикам за помощь с приобретением) Есть прям неплохие места. Но стоит с компьютером в руках читать и самомоу пределывать код 2й том Лутца про ООП
@user-gq6kf4yc2z
@user-gq6kf4yc2z 8 ай бұрын
Имеет ли смысл реализовать класс карта с помощью паттерна Приспособленец, чтобы не создавать и хранить кучу однотипных объектов? А в класс deck можно прокидывать параметр, в зависимости от которого будут валидироваться исходные данные, так как по сути колоды отличаются только картами, которые могут в них присутствовать.
@GuitaruSan
@GuitaruSan Жыл бұрын
Еще не посмотрел, а от Михаила уже несёт мудростью и эрудированностью❤
@user-iu2df5ey2v
@user-iu2df5ey2v Жыл бұрын
Вот гад, не слушайте его, он проплаченный
@Maine__Coon__1
@Maine__Coon__1 Жыл бұрын
😶‍🌫 спасибо 👍👍
@capstanfearless
@capstanfearless 7 ай бұрын
Андрей, хочу изучить питон и фастапи. Очень долгое время писал на Php. Какие практические вещи стоит написать для начала? Может какой-то ряд задач интересных для новичков
@AndyPronin
@AndyPronin 7 ай бұрын
t.me/KZbinPronin тут много интэерсного)
@seoonlyRU
@seoonlyRU Жыл бұрын
лукас от СЕООНЛИ!
@vegzuzvegzuz2866
@vegzuzvegzuz2866 11 ай бұрын
Никак не могу понять для чего отдельный класс Карта? У него нет ни атрибутов, ни методов. И не подразумевается что появятся.
@furiousrunner4388
@furiousrunner4388 11 ай бұрын
Представление модели: есть Колода с атрибутом кейс - в нем содержатся значения класса Карта, а Карта в свою очередь описывается наличием масти и номинала, т.е. два атрибута в элементе Карты уже есть)
@nariztan8505
@nariztan8505 Жыл бұрын
Ждем барышней, а особенно улыбашку)
@AndyPronin
@AndyPronin Жыл бұрын
Улыбашка в большом Яндексе сейчас. (
@ivanabdullaev859
@ivanabdullaev859 11 ай бұрын
Ты их в реальной жизни увидишь еще на собесах.
@user-bu6iq2ot8k
@user-bu6iq2ot8k Жыл бұрын
Когда будут джуны с проектами хотя бы на 5к строк?)
@AndyPronin
@AndyPronin Жыл бұрын
У Михаила бот вполне себе. Если бы добавил тесты, было бы 5К)
@user-jf8fp2um9s
@user-jf8fp2um9s 9 ай бұрын
21 минута задачка с степика😁 сегодня решал ее)
@AndyPronin
@AndyPronin 9 ай бұрын
90 процентов задач оттуда
@user-jf8fp2um9s
@user-jf8fp2um9s 9 ай бұрын
@@AndyPronin Прикольно) Постараюсь хотя бы через годик тоже на собес попасть
@silkcode3178
@silkcode3178 Жыл бұрын
Барышень надо оставить , куда без них?
@usernoname-wv6of
@usernoname-wv6of Жыл бұрын
А как на счет такого варианта? Есть атрибуты класса это набор всех размерность карт, всех мастей и колода которая из них получается - все три атрибута представлены последовательностями. При создании экземпляра колоды наполняется сама колода. При инициализации экземпляра колода перемешивается в хаотичном порядке. Через интерфейс take_card получаем любое количество карт, по умолчанию 1 карта. Возвращает текущее состояние 'руки' игрока. Если карты кончились получаем уведомление, что колода кончилась и вывод всей руки игрока. Колоды различаются по набору размеров карт, можно добавлять новые типы колод, наследую от базовой колоды и определяя набор величин карт. from abc import ABC class BaseDeck(ABC): default_cards_suits = ["\u2663", "\u2665", "\u2666", "\u2660"] default_deck = [] def __new__(cls, *args, **kwargs): for card in cls.default_cards: for suit in cls.default_cards_suits: cls.default_deck.append(card + ' ' + suit) return super().__new__(cls, *args, **kwargs) def __init__(self): self.deck = self.shuffle_deck self.player_hand = [] @property def shuffle_deck(self): deck_set = set(self.default_deck) deck = list(deck_set) return deck def take_card(self, quantity=1): for _ in range(quantity): try: card = self.deck.pop() self.hand.append(card) except IndexError: return f'{self.player_hand} Deck is over. Get shuffle it again' return self.player_hand class FranceDeck(BaseDeck): default_cards = [str(x) for x in range(2, 11)] + ['J', 'Q', 'K', 'A'] class RussianDeck(BaseDeck): default_cards = [str(x) for x in range(6, 11)] + ['J', 'Q', 'K', 'A'] deck = RussianDeck() deck.take_card(3) deck.take_card(1) ...
@usernoname-wv6of
@usernoname-wv6of Жыл бұрын
Только заметил, что метод перетасовки нужно скорректировать. Дефолтную колоду (условно после покупки колоды она упорядочена) нужно копировать а не работать с ней напрямую. тусовка shuffle модуля random. Руку игрока нужно обнулять (сборка карт для тусовки колоды). Вроде все работает, можно симулировать процесс, как в жизни. Если колода кончилась, карты собираются и тусуются. Если карты не кончились, также можно собрать карты и перетусовать в любой момент. @property def shuffle_deck(self): deck = copy(self.default_deck) random.shuffle(deck) self.deck = deck self.hand = [] return deck
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
С лету оптимизация: здесь требуется всего один атрибут и один проход по картам. Никаких внешних дополнительных элементов создавать нельзя, пользоваться атрибутом и методом извне нельзя, кроме свойств, задавать новые атрибуты нельзя, практически ни под один критерий твой код не попадает... Надо в общем ещё помыслить, вариант твой не годен, но развитие есть, потому как проперти используешь и более менее суть задания уловил)
@usernoname-wv6of
@usernoname-wv6of Жыл бұрын
@@furiousrunner4388 спасибо. Помозгую еще)
@usernoname-wv6of
@usernoname-wv6of Жыл бұрын
@@furiousrunner4388 1 проход по колоде. 1 атрибут. Единственное я не совсем понял "пользоваться ... методом извне нельзя" - то есть методом (в моем случае) take_card нельзя вызывать следующую карту? Если так, то есть еще второй вариант Вариант 1. import random from abc import ABC class BaseDeck(ABC): cards_collection = None def __init__(self): cards_suits = ["\u2663", "\u2665", "\u2666", "\u2660"] self.cards_collection = [] for card in self.cards_weight: for suit in cards_suits: self.cards_collection.append(card + ' ' + suit) random.shuffle(self.cards_collection) @property def take_card(self): while True: try: return self.cards_collection.pop() except IndexError: return 'Deck is over' class FranceDeck(BaseDeck): cards_weight = [str(x) for x in range(2, 11)] + ['J', 'Q', 'K', 'A'] class RussianDeck(BaseDeck): cards_weight = [str(x) for x in range(6, 11)] + ['J', 'Q', 'K', 'A'] deck = FranceDeck() for _ in range(52): print(deck.take_card) print(deck.take_card) # output: Deck is over Вариант 2. next(deck), где deck экземпляр класса Deck, вызывается следующая карта из последовательности import random from abc import ABC class BaseDeck(ABC): cards_collection = None def __init__(self): cards_suits = ["\u2663", "\u2665", "\u2666", "\u2660"] self.cards_collection = [] for card in self.cards_weight: for suit in cards_suits: self.cards_collection.append(card + ' ' + suit) random.shuffle(self.cards_collection) def __iter__(self): return self def __next__(self): if not self.cards_collection: raise StopIteration return self.cards_collection.pop() class FranceDeck(BaseDeck): cards_weight = [str(x) for x in range(2, 11)] + ['J', 'Q', 'K', 'A'] class RussianDeck(BaseDeck): cards_weight = [str(x) for x in range(6, 11)] + ['J', 'Q', 'K', 'A'] deck = FranceDeck() for card in deck: print(card) # output every card until deck is over
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
Есть колода, это объект, у него есть один атрибут - сама сущность колоды - её карты, которые в свою очередь описаны такими особенностями как масть и номинал. Теперь моделируй, ты берёшь карту из колоды, у колоды минус одна карту у тебя плюс одна. Метод использовать такое себе потому что ты просто берёшь карту. Значит, тебе надо сделать такое свойство, чтобы ты мог получить (getter) карту из колоды, которая в свою очередь защищена от переопределения и изменения извне, понял намёк? Один атрибут колоды, два доп. атрибута карты для описания карты в руке (побочная реализация), один проход по колоде, и одно свойство, которым тебе позволено получить карту из колоды. Колода -> Карта -> Игрок. Колода кончилась, объекта нет, аллес)
@sergiybustrov8831
@sergiybustrov8831 6 ай бұрын
Так дико смотрится, что парень лишний раз чтоб не прописывать какое-либо слово ищет его в коде, копирует и вставляет, а потом еще редактирует его. Неужели так удобнее? Там же VScode сам предлагает варианты.
@Konstantin_Stalnov
@Konstantin_Stalnov Жыл бұрын
Одно не могу понять, как при таком почти нулевом знании базы программировании, можно писать что-то большое, типа AI бота или чего-то на Django! Я вот всё понять не могу! Обращу внимание на барражирующую ошибку из видео в видео: ___init___ - это не конструктор, а Инициализатор состояния, а вот ___new___ - это Конструктор
@memesforbro
@memesforbro Жыл бұрын
Ai бота написать очень легко, тупо через апи опенэйай принимаешь/отправляешь запросы. Django так же легкие но если углубится будет уже сложнее
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
Он свой проект месяцами писал, по сути это его входная работа, но то что с такими знаниями работает как на собесе тут - то мне нужно в миддлы сразу)))
@Konstantin_Stalnov
@Konstantin_Stalnov Жыл бұрын
@@furiousrunner4388 Попробуй на Мидла! Это не шутка.
@user-iu2df5ey2v
@user-iu2df5ey2v 11 ай бұрын
При чём тут знания ооп если джун работает только с готовыми библиотеками? Не задо умть дать определение полиморфизму чтобы унаследоваться от класса, добавить ему или переопределить метод и запихать в прод. ООП надо знать если ты проектируешь архитектуру на тысячи человек онлайна или пишешь библиотеку
@wrestler91100
@wrestler91100 11 ай бұрын
Вообще видно что у кандидата есть некоторый опыт разработки, но блин, так плавать в базовом python, то есть не помнить как __init__() и __str__() работает, не помнить методы списка. Немного это все удивляет.
@atlant1707
@atlant1707 6 ай бұрын
Интересно сколько человек должен потратить времени, чтобы стать джуном. По этому интервью нужно знать git+docker+теств+ооп+лист коомпрехеншн+ стандартные вещи типа списков, вложеных функций и тд.+ Базы данных+ алгоритмы+практика, а не только теория+ проекты. Кажется года на это все будет мало. Получается судя по видео- джун это человек который больше года должен работать в этой теме.
@AndyPronin
@AndyPronin 6 ай бұрын
Если пря копать по 3-4 часа в день, думаю, за полгода можно. Но таки да. Требования высоки нынче
@bixber819
@bixber819 10 ай бұрын
Нужно оставить HR, я считаю
@virnus1
@virnus1 11 ай бұрын
Скрипач не нужен! Без вопросов от хрюш об любимом цвете или любимом блюде эти ролики явно немного потеряют.
@wonderwn3350
@wonderwn3350 Жыл бұрын
опять странные оценки какие-то. почему этот разработчик получает "нет", при условии что человек и позапрошлого собеса получил "да, ты бы у меня прошел на следующий этап" (kzbin.info/www/bejne/rYjdnGWgZc52Z7M), когда Михаил из этого видоса был значительно лучше чем человек из того видоса про который я говорил. я не говорю что Михаил сделал все идеально и ответил на все вопросы, я его сравниваю с тем кто прошел дальше, и считаю что это прям совсем необъективно. может стоит ввести систему баллов какую-то и по ней решать прошел/не прошел, а то выглядит будто все зависит от настроения
@AndyPronin
@AndyPronin Жыл бұрын
В голодных играх попробуем иначе сделать. Спасибо
@ivanabdullaev859
@ivanabdullaev859 11 ай бұрын
@@AndyPronin что за голодные игры? Это эже теперь официально процесс набора дешевой раб силы в ит так называют? Я - то в шутку так раньше говорил.
@AndyPronin
@AndyPronin 11 ай бұрын
@@ivanabdullaev859 не сказать, что дешёвой
@memesforbro
@memesforbro Жыл бұрын
Ему нужно прочитать про ооп :). Люблю писать ботов но уже тошнит(. ООП знаю немного лучше и видимо этот кандидат очень волновался раз уж забыл основы
@user-iu2df5ey2v
@user-iu2df5ey2v 11 ай бұрын
Я эти основы нафиг забыл за пол года практики. Ни разу не пришлось писать класс и инитом за 3 месяца работы)
@memesforbro
@memesforbro 11 ай бұрын
@@user-iu2df5ey2v Ты надеюсь смотрел его интервью? Он там все темы проверяет а ты без ооп пошел
@user-iu2df5ey2v
@user-iu2df5ey2v 11 ай бұрын
@@memesforbro Смотрел, но мне некогда да и не охота было заново в это залезать. От этого собеса ничего не зависело, так что я просто пришёл с тем что было)
@memesforbro
@memesforbro 11 ай бұрын
Это глупо, потому что к собесу всегда нужно относится серьезно
@user-iu2df5ey2v
@user-iu2df5ey2v 11 ай бұрын
@@memesforbro у меня работа после которой не охота готовиться к ничего не значещему собесу. Я был готов когда подавал заявку - в феврале)
@user-rl4pv9bh7z
@user-rl4pv9bh7z 11 ай бұрын
МНОГО БАРЫШЕНЬ!
@Konstantin_Stalnov
@Konstantin_Stalnov Жыл бұрын
Очень Слабо!
@0ver4ance
@0ver4ance Жыл бұрын
Андрей привет! Оцени мою реализацию. Мне показалось более интересно сделать так, что мы не просто берем случайную карту из колоды и потом обратно ее помещаем, а берем с концами. Таким образом колода будет со временем пустеть и для ее восстановления в исходное состояние необходимо применить соотвествующий метод в родительском классе. С такой колодой можно хотя бы в Блэк Джэк попробовать рубануться) from random import shuffle class DeckEmptyError(Exception): pass class Card: def __init__(self, rank, suit): self.rank = rank self.suit = suit def __repr__(self): return f'{self.rank} {self.suit}' class CardDeck: high_ranks = 'JQKA' suits = 'DHCS' def __init__(self): self.init_deck() def init_deck(self): ranks = (*self.low_ranks, *self.high_ranks) self.deck = [Card(rank, suit) for suit in self.suits for rank in ranks] shuffle(self.deck) def get_random_card(self): if self.deck: return self.deck.pop() raise DeckEmptyError('Deck is empty. If you if you want to create a new deck, use method "init_deck"') class RussianCardDeck(CardDeck): low_ranks = range(6, 11) class FrenchCardDeck(CardDeck): low_ranks = range(2, 11)
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
Сразу скажу: можно обойтись одним атрибутом, плюс я легко хакну твою программу, плюс где наследование с такой реализацией? Плюс многие методы можно сделать в один сеттинг, тобишь меню выбора колоды, очень много воды в общем у тебя и мало творчества, учись еще и будет тебе счастье)
@just_arthur_fu
@just_arthur_fu Жыл бұрын
Про первую задачу, вот так норм? import random class Deck: def __init__(self): self.card_deck = [] chars = ['Kresti', 'Peki', 'Chervi', 'Bubi'] for i in chars: for j in range(1, 15): self.card_deck.append(self.num_to_men(j) + ' ' + i) random.shuffle(self.card_deck) def num_to_men(self, n): if n == 11: return 'J' if n == 12: return 'Q' if n == 13: return 'K' if n == 14: return 'T' return str(n) def get_card_by_index(self, idx): if idx >= len(self.card_deck): return 'f u' out = self.card_deck[idx] self.card_deck.pop(idx) return out def get_random_card(self): idx = random.randint(0, len(self.card_deck) - 1) out = self.card_deck[idx] self.card_deck.pop(idx) return out Просто первое решение которое пришло в лоб
@AndyPronin
@AndyPronin Жыл бұрын
Кажется, стоит ещё подумать
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
from random import shuffle class Deck: __slots__ = (__case) def __init__(self, num_rank_range=(2,3,4,5,6,7,8,9,10,'J','Q','K','A'), suits=('s','c','d','h')): if isinstance(num_rank_range,(tuple,list)) and isinstance(suits,(tuple,list)): self.__case : iter = iter(Deck.__shuffle_deck([(n,s) for n in num_rank_range for s in suits])) else: raise ValueError('Колода задана некорректно') @property def take(self): try: return next(self.__case) except StopIteration: return 'Карты закончились' @property def case(self): return list(self.__case) @staticmethod def __shuffle_deck(deck): shuffle(deck) return deck def __str__(self): return f"Карт осталось: {len(tuple(self.__case))}" # время на реализацию с подготовкой: до 15 минут
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
@@AndyPronin Солидарен с вами, причем основательно думать;)
@just_arthur_fu
@just_arthur_fu Жыл бұрын
Немного подумал, использовал ABC, добавил комментарии, добавил наследование import random from abc import ABC, abstractmethod class Deck(ABC): def __init__(self): """ Инициализируем колоду """ self.deck = [] rng = self.get_card_range() for i in ['Heart', 'Diamonds', 'Spades', 'Clubs']: for j in rng: if j == 11: self.deck.append(f'J {i}') elif j == 12: self.deck.append(f'Q {i}') elif j == 13: self.deck.append(f'K {i}') elif j == 14: self.deck.append(f'T {i}') else: self.deck.append(f'{j} {i}') def pick_random_card(self): """ Берем случайную карту """ if self.is_empty(): return None card = random.choice(self.deck) self.deck.remove(card) return card def is_empty(self): """ Пустая ли колода """ return len(self.deck) == 0 @abstractmethod def get_card_range(self): """ Переопределяемая функция для других колод """ return range(1, 15) class FrenchDeck(Deck): def get_card_range(self): return range(1, 15) class RussianDeck(Deck): def get_card_range(self): return range(6, 15) print('Creating deck') my_deck1 = RussianDeck() print('picking cards') length = 0 card = my_deck1.pick_random_card() while card: length += 1 print('I pick', card) card = my_deck1.pick_random_card() print(' Length: ', length)
@furiousrunner4388
@furiousrunner4388 Жыл бұрын
@@just_arthur_fu все равно не то)
Алтынбаев Артур python разработчик собеседование
52:07
Собеседование на позицию Backend Developer Python Middle #8
28:29
Python собеседования
Рет қаралды 8 М.
La final estuvo difícil
00:34
Juan De Dios Pantoja
Рет қаралды 26 МЛН
Trágico final :(
01:00
Juan De Dios Pantoja
Рет қаралды 32 МЛН
Dynamic #gadgets for math genius! #maths
00:29
FLIP FLOP Hacks
Рет қаралды 17 МЛН
ПЕЙ МОЛОКО КАК ФОКУСНИК
00:37
Masomka
Рет қаралды 10 МЛН
КОД КАК У СЕНЬОРА. РЕФАКТОРИНГ
22:59
ITentika Online
Рет қаралды 62 М.
Домрачев Дмитрий python developer собеседование
1:13:04
Андрей += Пронин
Рет қаралды 6 М.
Хочу стать Junior Python
16:29
Y_LAB University
Рет қаралды 1,5 М.
Собеседование junior python разработчик | Сергей Афонин
1:15:20
Собеседование Python. Разбор вопросов
2:24:59
Python собеседование Александр Воробьёв
53:52
Андрей += Пронин
Рет қаралды 44 М.
Айрат Сахибгареев собеседование python разработчик
1:12:57
La final estuvo difícil
00:34
Juan De Dios Pantoja
Рет қаралды 26 МЛН