Please open Telegram to view this post
VIEW IN TELEGRAM
В Python блок
else
может использоваться не только в условных конструкциях if
, но и с циклами for
и while
. Блок else
в цикле выполняется, если цикл завершился "нормально", то есть без прерывания с помощью оператора break
. Если же цикл был прерван с помощью break
, блок else
не выполнится. Это позволяет, например, выполнить определенный код в конце цикла, если цикл не был прерван.for i in range(5):
if i == 3:
print("Цикл прерван на итерации:", i)
break
else:
print("Цикл завершился без прерываний")
В этом цикле блок кода после
else
не выполнится. Но следующий цикл "переживет" все итерации и блок else
выполнится:for i in range(5):
print("Текущая итерация:", i)
else:
print("Цикл завершился без прерываний")
———
Good coding
#python #else #for #while #short
Please open Telegram to view this post
VIEW IN TELEGRAM
Перевод и решение задачи посвящается прекрасной кошке Асе. На самом деле с коробками любит играть кот Арсений. Поэтому у Аси не нашлось фото с коробкой
Сложность для junior: 4 / 10
Задача с решением на русском здесь
* Прежде чем смотреть готовое решение,желательно потратить 2-3 часа на самостоятельные попытки. И если не получится, то переходить к анализу ответа.
———
Good coding
#python #problem #list
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Задача: Кошка Ася играет с коробками
Сложность: 4 / 10 Оригинал: https://dmoj.ca/problem/ecoo18r1p1 Художница Даша покупает коробки для своих проектов, но ее кошка Ася играет с коробками перед тем, как Даша сможет их использовать. Условия и переменные Кошка играет с каждой коробкой T дней Если…
Открываем терминал в корне проекта и прописываем —
python -m venv venv
— Флаг -m используется для запуска venv как исполняемого модуля.
— Первое написание venv является командой, а второе можно заменить на удобное название, под которым будет хранится директория виртуального окружения.
— Проходим по пути settings - project:<your_project> - python Interpreter для открытия окна с настройками виртуального окружения
— Нажимаем справа сверху add Interpreter и выбираем add local Interpreter
— Настройте интерпретатор и нажмите OK. По сути в Base Interpreter просто выберите доступный интерпретатор и это все настройки
Что бы активировать окружение на windows введите
.\venv\Scripts\activate
, где venv название директории с виртуальным окружением.Для активации на mac и linux введите
source venv/bin/activate
Если вы используете git bash, то команда активации будет следующей —
source venv/Scripts/activate
Что бы отключить окружение введите
deactivate
———
Good coding
#python #memo #venv
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача о том, как программисты добывают себе одежду
Сложность для 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…
Вы можете никогда не использовать 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
Представим что у на есть некоторый 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