Задача о том, как программисты добывают себе одежду
Сложность для junior: 7 / 10
Задача с решением на русском здесь
* Прежде чем смотреть готовое решение,желательно потратить 2-3 часа на самостоятельные попытки. И если не получится, то переходить к анализу ответа.
———
Good coding
#python #problem #list
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Задача: Большая стирка
Сложность: 7 / 10 Оригинал: https://dmoj.ca/problem/ecoo19r1p1 В течении года в стране проводятся разные мероприятия по программированию, которые может посетить любой желающий, проверить свои навыки, пообщаться с единомышленниками, а самое главное - выиграть…
Что может быть интересного в столь простой и уже не популярной игре, как крестики-нолики? Игра элементарна и наверное навсегда останется украшением школьных парт и полей тетрадей. Ну и какой программист не писал крестики нолики на этапе обучения?
Играя в карты можно быть уверенным, что каждая партия уникальна и никогда не повториться. А общее количество уникальных партий в крестики нолики, учитывающих победы и ничьи, составляет 26 830.
Довольно скромно
Недавно я прочитал книгу. Называется 'Математика с дурацкими рисунками'. Оттуда и узнал про интересную модификацию крестиков-ноликов.
Суть в том, что поле игры всё так же состоит из 9 квадратов, но теперь каждый квадрат является самостоятельным полем крестиков-ноликов размером 3x3. В итоге поле представляет собой 9 отдельных "классических" игр в крестики-нолики.
Как программисты мы можем представить такое поле в виде трехмерной матрицы:
game_board = [
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']]
]
Весь game play строится на том, что поле, в котором игрок будет делать ход, зависит от хода его соперника. Например: если первый игрок поставил X в центральную клетку одного из малых полей, то следующий игрок должен поставить свой O на центральное большуо поле.
Подробные правила читайте тут — тык
В классическом варианте игры, при должном терпении, мы могли бы сыграть 26 830 возможных уникальных партий и сказать, что мы видели всё и нам скучно. Но в мега варианте такой роскоши себе позволить нельзя. Здесь мы получаем приморно 10^30 уникальных партий. Это вот такое число 1000000000000000000000000000000, которое называется нониллион. Даже если прожить 100 лет и каждую секунду играть уникальную партию, нам не удастся перебрать даже 1% возможных вариантов.
Меня всё это увлекло и я попробовал написать игру. Как сказано выше, здесь мы имеем дело с трехмерной матрицей, но при этом не имеем никакой сложной навигации, что даёт возможность для практики новичкам.
Игру можно посмотреть в репазитории.
Если кому то будет интересно, можно дописать к ней интерфейс. Сейчас весь game play осуществляется только через консоль.
Буду рад комментариям, оценкам, критике и исправлениям.
Также ссылка на вдохновившую меня книгу — Математика с дурацкими рисунками
———
Good coding
#python #list #matrix #game #offtop
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Правила игры: Мега крестики нолики
Игровое поле: Поле состоит из 9 больших квадратов (игровых досок), каждая из которых является самостоятельным полем крестиков-ноликов размером 3x3. В итоге поле представляет собой 9 отдельных "классических" игр в крестики-нолики. Очередность ходов: Как и…
Представьте что вы попали на необитаемый остров. Чем бы занялись? Можно добыть еды или обустроить жилище, а можно как наш герой наблюдать за приливами и отливами
Сложность для junior: 5 / 10
Задача с решением на русском здесь
* Прежде чем смотреть готовое решение,желательно потратить 2-3 часа на самостоятельные попытки. И если не получится, то переходить к анализу ответа.
———
Good coding
#python #problem #list
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Задача: Приливы
Сложность: 5 / 10 Оригинал: https://dmoj.ca/problem/dmopc14c7p2 Туко застрял на острове. Преодолевая скуку он начал находить обычные вещи довольно увлекательными. Туко стал наблюдать за поведением океана и заметил, что в разное время суток уровень воды то…
Циклический сдвиг — это когда каждая итерация цикла перемещает первый элемент списка в конец, а все остальные элементы сдвигает на минус один индекс. Есть два способа сделать это.
С созданием копии списка:
my_list = [1, 5, 2, 4, 3]
new_list = my_list[:]
for i in range(len(my_list)):
my_list = new_list[i:] + new_list[:i]
Без копии:
my_list = [1, 5, 2, 4, 3]
for _ in range(len(my_list)):
my_list.append(my_list[0])
my_list.pop(0)
Выбор способа зависит от задачи.
———
Good coding
#python #short #list
Please open Telegram to view this post
VIEW IN TELEGRAM
Если для хранения данных не требуется сохранения порядка и дубликатов элементов, можно использовать множества вместо списков. Чем длиннее список элементов и чем дальше элемент поиска, тем больше преимуществ у множества.
Давайте убедимся на деле:
import time, random
# Генерируем список с дубликатами и преобразуем в множество
numbers_list = [random.randint(0, 10**6) for _ in range(10**6)]
numbers_set = set(numbers_list)
# Список случайных элементов для поиска
search_items = random.sample(range(10**6), 1000)
# Функция для замера времени поиска
def measure_search(container):
start = time.time()
for item in search_items:
item in container
return time.time() - start
# Замеры времени поиска
list_time = measure_search(numbers_list)
set_time = measure_search(numbers_set)
# Результаты
print(f"Поиск в списке: {list_time:.6f} сек") # Примерно 4.3 сек
print(f"Поиск в множестве: {set_time:.6f} сек") # Примерно 0.0009 сек
———
Good coding
#python #short #list #set
Please open Telegram to view this post
VIEW IN TELEGRAM
Предположим, что наше приложение — это что-то там связанное с английским. У нас есть некоторый словарь в котором ключ — это английское слово, а значение — перевод этого слова:
animals = {
'cat': 'кот',
'dog': 'собака',
'mouse': 'мышь',
'elephant': 'слон',
}
Нам нужно чтобы было наоборот: ключи на русском, а значения на английском. Пишем простое выражение:
print({value: key for key, value in animals.items()})
# >>> {'кот': 'cat', 'собака': 'dog', 'мышь': 'mouse', 'слон': 'elephant'}
———
Good coding
#python #short #dict
Please open Telegram to view this post
VIEW IN TELEGRAM
С помощью метода reverse()
my_position = ['first', 'second', 'third']
my_position.reverse()
print(my_position)
# >>> ['third', 'second', 'first']
С помощью функции reversed()
sequence = [1, 2, 3, 4, 5, 6]
reverse_sequence = list(reversed(sequence))
print(reverse_sequence)
# >>> [6, 5, 4, 3, 2, 1]
С помощью среза
split_name = ['r', 'd', 'n', 'a', 's', 'k', 'e', 'l', 'a']
reverse_split_name = split_name[::-1]
print(reverse_split_name)
# >>> ['a', 'l', 'e', 'k', 's', 'a', 'n', 'd', 'r']
———
Good coding
#python #short #list
Please open Telegram to view this post
VIEW IN TELEGRAM
Класс
deque
(от "double-ended queue" - двухсторонняя очередь) в Python удобен для работы с коллекцией элементов, где важны операции добавления и удаления элементов в начале и в конце списка. Обычные списки делают это медленно, так как элементы приходится смещать, а deque
оптимизирован под такие операции, выполняя их за O(1).from collections import deque
# Создаем deque и добавляем элементы
queue = deque([1, 2, 3])
queue.append(4) # добавляет 4 в конец
queue.appendleft(0) # добавляет 0 в начало
print(queue) # deque([0, 1, 2, 3, 4])
# Удаляем элементы
queue.pop() # удаляет последний элемент
queue.popleft() # удаляет первый элемент
print(queue) # deque([1, 2, 3])
———
Good coding
#python #short #list #libraries #deque #collections
Please open Telegram to view this post
VIEW IN TELEGRAM
Я славно поработал и написал 2 статьи посвященные алгоритму BFS (поиск в ширину) и алгоритму Дейкстры (поиск во взвешенных графах). Для меня лучший способ в чем то разобраться - это объяснить другим как это работает. Эти работы не исключение.
Краткая статистика
- 25 000 символов
- 3 600 слов
- 23 часа работы
———
Первая часть - Алгоритмы поиска путей на пальцах. Часть 1: Поиск в ширину
Первая часть - Алгоритмы поиска путей на пальцах. Часть 2: Алгоритм Дейкстры
———
Это всё что я использовал для написания материала и создания анимаций:
1. Алгоритмика — много материала об алгоритмах
2. Clippa — здесь можно доработать гифки
3. ChatGPT — все знают
4. Program4you — здесь можно создавать и анимировать графы
5. Теория графов — хороший материал для прочной базы
6. Двусторонняя очередь — статья о классе deque
7. Кучи и приоритетные очереди — статья о модуле heapq
———
Good coding
#python #info #algorithms #dijkstra #bfs #graphs #habr #articles
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Алгоритмы поиска путей на пальцах. Часть 1: Поиск в ширину
Давайте представим, что вы устроились много лет назад в 2GIS и вам выпала честь написать алгоритм, который будет прокладывать самый короткий автомобильный маршрут от точки A к точке B. Вы...
Когда самостоятельно изучаешь программирование, в какой-то момент сталкиваешься с кризисом, когда нужно двигаться дальше, а что конкретно делать не понятно.
Эта книга будет хорошим продолжением, если вы только закончили изучение базового синтаксиса и хотели бы повторить и закрепить материал.
Автор книги изложил материал следующим образом:
1. Каждая глава начинается с урока. Не расстраивайтесь если вы уже знакомы с материалом. Каждый учитель объясняет по своему и всегда есть возможность узнать что то новое.
2. После каждого урока автор подробно разбирает несколько задач (2 - 3). Советую сначала пробовать решать их самостоятельно, а потом сверяться с решением автора.
3. В конце каждой главы приведен список задач, которые вы сможете решить усвоив материал из пройденного урока.
———
Книга на Яндекс Книгах — здесь
Купить бумажную версию — здесь
Английская версия бесплатно — здесь
Русская версия бесплатно — здесь
———
Также оставлю свой репазиторий с решенными задачами. Их около 100 там. Сверяйтесь и изучайте, но не списывайте.
Репозиторий
———
#python #book #problems
Please open Telegram to view this post
VIEW IN TELEGRAM
books.yandex.ru
Читать «Python без проблем: решаем реальные задачи и пишем полезный код». Зингаро Д. в Яндекс Книгах
«Python без проблем: решаем реальные задачи и пишем полезный код» Зингаро Д. читать полную версию книги на сайте или в приложении электронной онлайн библиотеки Яндекс Книги.
Если вы вдруг решили написать в том или ином виде генератор паролей/токенов или других случайных значений, имеющих высокие требования к безопасности, не идите очивидным путем и не используйте модуль
random
.Используйте модуль
secrets
. Почуму? Если коротко, то random
создан для симуляции, а результат работы довольно предсказуем. А secrets
используется для генерации криптографически надёжных случайных чисел.Короткое объяснение — тут
Документаци — тут
———
#python #secrets #random
Please open Telegram to view this post
VIEW IN TELEGRAM
blog.mnislam.dev
Random or Secrets which module to use for critical information?
Random module vs Secrets module for security in python
Моя подборка, которая поможет, как мне кажется, найти работу в сфере аналитики данных. Я сейчас сам всё это изучаю. Базовый Python уже понятен, нужно было выбирать направление для роста.
1. Актуальный, англоязычный курс — FREE Data Analyst Bootcamp. Если плохо с английским, открывайте плейлист в Яндекс браузере и слушайте в переводе.
2. Подробная карта для изучения инструментов связанных с аналитикой данных — Data Analyst Roadmap
3. Репозиторий с большой подборкой общедоступных наборов данных — awesome-public-datasets
4. Статья на Хабр с подборкой наборов данных - 52 датасета для тренировочных проектов
5. Сайт с большим количество датасетов — kaggle-datasets
———
#python #resources #datasets #data_analyst
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
FREE Data Analyst Bootcamp!!
Take my Full Courses and Practice Technical Question on Analyst Builder: https://www.analystbuilder.com/
Link to Data Analyst Bootcamp Playlist: https://bit.ly/3HHqwcr
In this video we walk through the Free Data Analyst Bootcamp right here on my YouTube…
Link to Data Analyst Bootcamp Playlist: https://bit.ly/3HHqwcr
In this video we walk through the Free Data Analyst Bootcamp right here on my YouTube…
Знаете почему западный рынок софта более свободный, открытый и продуктивный, чем наш? Ответ лежит в вопросе: потому что он более свободный и открытый.
Это выводы, основанные исключительно на собственном опыте, без детального анализа.
Как только зарубежные компании стали покидать Россию, так или иначе у нас (или в Китае) начали готовить аналоги разных продуктов. Речь именно об инструментах для разработки, бизнеса или ведения дел в том или ином виде.
Меня вскрыло в момент, когда я хотел найти российский аналог популярных BI систем, таких как power bi или tableau. Такие существуют. Но что бы попробовать хотя бы демку, вам нужно оставить свою почту, потом вам напишут, скажут условия, дадут ссылки и тд. Вы такое в последний раз когда видели?
На сайтах нет ни тарифов, ни руководств, ничего. Максимум чахлый блог для продвижения и промо страница.
По моему такой способ взаимодействия стоит на уровне холодных звонков. В чем проблема сразу обозначить цену за продукт, если у него нет бесплатных пакетов? А если есть демка, в чем проблема дать возможность ее скачать после регистрации?
Power bi и tableau были доступны для изучения, даже для работы. Хочешь расширяться, вот тебе тарифы, покупай. Пользуешься бесплатно — согласись на обработку данных.
У наших же какой-то красный флаг на «открытые отношения».
Почему мы делаем аналоги, иной раз чуть ли не под чистую копируя оригинал, но не копируем модель распространения? Китай например копирует. Дак и получается, что российскими продуктами я до сих пор не пользуюсь, а китайскими уже пользуюсь. А причина лишь в том, что к «чужим» товарам доступ проще. Меня там не заставляют ждать почты, тыкать демку, покупать сразу что-то.
Ни кто особо не хочет пользоваться отечественными продуктами, потому что они пишутся на коленке под эгидой альтернативы, а потом принудительно внедряются в гос учреждения что бы хоть как то продаваться.
Программой хочется пользоваться, потому что она хорошо работает, а не потому что она «НАША».
Все наши энтузиасты участвуют в разработке западных open source проектов, потому что в России при всем желании некуда податься в этом поле. Разработчики у нас хорошие, любопытные и деятельные, а бизнес жадный, скупой и безинициативный.
Единственная компания, которая мне приходит на ум, у которой есть бесплатный продукт и которая не задушит тебя рекламой — это лаборатория Касперского. По моему еще Битрикс довольно лояльны к начинающим пользователям.
Право предпринимателя решать, каким образом распоряжаться своим продуктом. Но если единственной целью всегда будет конечный потребитель, то ничего светлого нашей айтишке ждать не придется. Так и будем копировать и продавать.
———
#it #hate
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы можете никогда не использовать tkinter напрямую, но есть библиотеки, которые используют его по умолчания. Например matplotlib — библиотека для визуализации графиков.
Сегодня столкнулся с такой ошибкой:
...
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
...
paths
...
This probably means that Tcl wasn't installed properly.
В моем случае это произошло, потому что вместе с Git я поставил MinGW, который идет вместе с пакетом Git for Windows. А MinGW поставляется с библиотеками Tcl/Tk. Из-за этого возник конфликт в переменных среды. Как я понял, если Git устанавливается на ПК вперед Python, то такого не происходит.
1. Нажать win+i, что бы открыть настройки
2. Далее путь: Система — О системе — Дополнительные параметры системы — Переменные среды
3. Нажимаем создать в области системных переменных
4. Ввести название переменной:
TCL_LIBRARY
5. Указать путь до папки. Что узнать путь, зайдите в диск, на который вы установили Python. Затем в поиске введите tlc. Найдите папку, которая находится в директории Python, а не в Git. В папке будут еще папки. Вам нужна с названием (на момент создания поста) tlc8.6.
В моем случае путь был такой:
C:\Users\Yastrebov\AppData\Local\Programs\Python\Python313\tcl\tcl8.6
6. Осталось сохранить, перезапустить IDE и если у вас была такая же проблема, то она должна решиться
———
#python #error #tlc #tkinter #matplotlib
Please open Telegram to view this post
VIEW IN TELEGRAM
Пока проходил курс, познакомился с одним ресурсом, похожим на LeetCode, только предназначенный да аналитиков данных.
Ресурс новый, задач мало, бесплатных еще меньше, но тем не менее он узконаправлен и развивается. Но функционально очень круто сделано, советую.
Ссылка на сайт
Также ряд задач с курса на знание SQL запросов:
Easy
1. Apply Discount
2. Car Failure
Moderate
1. Tech Layoffs
2. Separation
Hard
1. Kelly's 3rd Purchase
2. Temperature Fluctuations
———
#SQL #problems #interview #resource #data_analytics
Please open Telegram to view this post
VIEW IN TELEGRAM
Analyst Builder
Analyst Builder is your all in-one platform to become a Data Analyst! Learn technical skills and practice for your technical interviews all in one place.
Представим что у на есть некоторый dataset c неопределенным количеством столбцов:
[..., 'Category', 'Region', 'Inventory Level', ...]
Задача: построить сводную таблицу (как на изображении), для отображения остатков (Inventory Level) во всех регионах для каждой категории и отобразить сумму остатков для каждой категории и каждого региона.
В Excel мы бы создали сводную таблицу, перетащили бы Category в область "Cтроки", Region в область "Столбцы", а Inventory Level в область "Значения".
import pandas as pd
df = pd.read_csv('retail_store_inventory.csv')
pivot_table = df.groupby(['Category', 'Region'])['Inventory Level'].sum().reset_index()
pivot_result = pivot_table.pivot(index='Category', columns='Region', values='Inventory Level')
pivot_result['Total'] = pivot_result.sum(axis=1)
pivot_result.loc['Total'] = pivot_result.sum(axis=0)
Dataset
Ссылка на набор данных
———
#python #pandas #data_analitycs #excel
Please open Telegram to view this post
VIEW IN TELEGRAM
data.rar
132.6 KB
В общем пытался устроится на должность аналитика данных в сеть магазинов, где я когда то поваром работал. Было бы забавно мне кажется. Так на любой вакансии, где есть пук про АЙ ТИ, конкуренция безумная, я решил не ограничиваться отправкой резюме.
Так как в вакансии было указано, что нужно знать pandas, я решил спарсить данные о продуктах с сайта и как раз с помощью pandas что то почистить, проанализировать. Бонусом сделал небольшую презентацию на 5 слайдов с не графиками и аналитикой.
В итоге даже не заслужил фразы "Мы одобрили другого кандидата, а ваше резюме отложили. Если вакансия снова откроется, то мы вам напишем".
Но никакого расстройства, прикольная практика вышла.
Репозиторий
Данные в прикрепе
———
#python #pandas #data_analitycs #resources #dataset
Please open Telegram to view this post
VIEW IN TELEGRAM