Скринкаст на тему: "Алгоритм Дейкстры. Поиск кратчайшего пути в графе" проведу в конце недели. Готовлю материал. Ссылку на трансляцию добавлю примерно за сутки.
Ссылка на обещанный минивебинар:
https://www.youtube.com/watch?v=BE5Xx6PXScs
Начало 04 августа в 10.00 по Москве.
#видео #алгоритмы #графы
https://www.youtube.com/watch?v=BE5Xx6PXScs
Начало 04 августа в 10.00 по Москве.
#видео #алгоритмы #графы
YouTube
Алгоритм Дейкстры. Поиск кратчайшего пути в графе
Планы на утро субботы.
anonymous poll
Посмотреть скринкаст про алгоритм Декстры – 19
👍👍👍👍👍👍👍 50%
Заняться своими делами, а видео посмотрю в записи – 13
👍👍👍👍👍 34%
Много дел. Видео посмотрю когда-нибудь в светлом будущем – 6
👍👍 16%
👥 38 people voted so far. Poll closed.
anonymous poll
Посмотреть скринкаст про алгоритм Декстры – 19
👍👍👍👍👍👍👍 50%
Заняться своими делами, а видео посмотрю в записи – 13
👍👍👍👍👍 34%
Много дел. Видео посмотрю когда-нибудь в светлом будущем – 6
👍👍 16%
👥 38 people voted so far. Poll closed.
Начинаем обходить граф точно по расписанию, через 10 минут.
Всем доброго утра и отличного настроения. Прокачаем мозги 😉
P.S. Ссылка на трансляцию находится чуть выше.
Всем доброго утра и отличного настроения. Прокачаем мозги 😉
P.S. Ссылка на трансляцию находится чуть выше.
Всех, кто не знает или знал, но забыл - приглашаю на вебинар сегодня в 20.00
https://geekbrains.ru/go/Fmbnia
https://geekbrains.ru/go/Fmbnia
Сегодня отличный день, чтобы вернуть канал к жизни. Тем более историй за последние годы накопилось предостаточно.
В планах уйти от вебинаров (но не забрасывать их на совсем), добавить немного кода, историй... Чтобы было что почитать, поделиться с друзьями.
#intro
В планах уйти от вебинаров (но не забрасывать их на совсем), добавить немного кода, историй... Чтобы было что почитать, поделиться с друзьями.
#intro
👍4
И вот вам история из практики преподавания.
Однажды студент пожаловался, что не может написать рабочую функцию. Попросив код, с лёгкостью запустил его в своей IDE. У меня работает. 🤔 Спустя почти час переписки со студентом, танцев с бубном вокруг проверок интерпретатора, IDE, переменных окружения, версий и прочих безумных гипотез, причина была найдена. Ответ на картинке. 😉
#истории #lifehack
Однажды студент пожаловался, что не может написать рабочую функцию. Попросив код, с лёгкостью запустил его в своей IDE. У меня работает. 🤔 Спустя почти час переписки со студентом, танцев с бубном вокруг проверок интерпретатора, IDE, переменных окружения, версий и прочих безумных гипотез, причина была найдена. Ответ на картинке. 😉
#истории #lifehack
😁4
Привет.
Поздравляю всех с Днём Победы. Счастья, радости, здоровья, мира и благополучия вам.
И ловите немного приветов миру 🕊
Традиционно изучение языка программирования начинают с вывода Hello world! И есть один классический способ для Python.
Лично я знаю ещё парочку.
И секретный способ.
У кого есть другие варианты, делитесь в комментариях. 😉
#познавательно
Поздравляю всех с Днём Победы. Счастья, радости, здоровья, мира и благополучия вам.
И ловите немного приветов миру 🕊
Традиционно изучение языка программирования начинают с вывода Hello world! И есть один классический способ для Python.
print('Hello world!')Лично я знаю ещё парочку.
input('Hello world!')И секретный способ.
import __hello__
У кого есть другие варианты, делитесь в комментариях. 😉
#познавательно
👍6🔥3
Что быстрее?
Вопрос не про время набора, конечно же, а про время выполнения кода.
Ответ очевиден, если заглянуть под капот операции через модуль
С квадратными скобками получаем:
Функция
А если вам интересно продолжение этой истории, ставьте 👍 Тогда с меня подробные исследования в следующем выпуске.
#структуры_данных #познавательно
data_one = []
data_two = list()
Вопрос не про время набора, конечно же, а про время выполнения кода.
Ответ очевиден, если заглянуть под капот операции через модуль
dis.С квадратными скобками получаем:
1 0 BUILD_LIST 0
2 STORE_NAME 0 (data_one)
4 LOAD_CONST 0 (None)
6 RETURN_VALUE
Функция
list отработает чуть медленнее. Смотрите сами:1 0 LOAD_NAME 0 (list)
2 CALL_FUNCTION 0
4 STORE_NAME 1 (data_two)
6 LOAD_CONST 0 (None)
8 RETURN_VALUE
А если вам интересно продолжение этой истории, ставьте 👍 Тогда с меня подробные исследования в следующем выпуске.
#структуры_данных #познавательно
👍57🔥1
Продолжение истории про
А тем, кто недавно заглянул на огонёк сброшу ссылку на свой плейлист на YouTube. Если (а точнее когда) буду проводить вебинары, видео обязательно буду дублировать туда 👇
https://youtube.com/playlist?list=PL2Bb1BU5KbvphJCe7ZyOA611wXyRUQiux
#intro #видео
list() и [] оказалось длинным и с картинками. Пока решаю где её удобнее разместить. Продолжение однозначно следует... А тем, кто недавно заглянул на огонёк сброшу ссылку на свой плейлист на YouTube. Если (а точнее когда) буду проводить вебинары, видео обязательно буду дублировать туда 👇
https://youtube.com/playlist?list=PL2Bb1BU5KbvphJCe7ZyOA611wXyRUQiux
#intro #видео
🔥5
Одна из историй преподавания или часть 1. Пара слов о рекурсии в Python
- Рекурсивный код предполагает вызов функцией самой себя.
Следовательно нам нужна функция
- Рекурсия обязана иметь базовый случай, когда она возвращает ответ. Без него получаем переполнение стека функций. А это страшнее зависания в бесконечном цикле 😈
Следовательно нам нужен
- Вызов функцией самой себя должен упрощать задачу, приближать вычисления к базовому случаю.
Следовательно нам нужны передача аргументов
и вызов себя с более простой задачей
Собрав пункты вместе получим рекурсивный алгоритм. Например так можно считать сумму натуральных чисел от 1 до n через рекурсию:
А если у вас не работает, ответ лежит 👉 тут 👈
- Рекурсивный код предполагает вызов функцией самой себя.
Следовательно нам нужна функция
def func():- Рекурсия обязана иметь базовый случай, когда она возвращает ответ. Без него получаем переполнение стека функций. А это страшнее зависания в бесконечном цикле 😈
Следовательно нам нужен
return result
- Вызов функцией самой себя должен упрощать задачу, приближать вычисления к базовому случаю.
Следовательно нам нужны передача аргументов
def func(*args, **kwargs):и вызов себя с более простой задачей
return func(*spam, **eggs)Собрав пункты вместе получим рекурсивный алгоритм. Например так можно считать сумму натуральных чисел от 1 до n через рекурсию:
def func(n):
if n == 1:
return n
return n + func(n - 1)
А если у вас не работает, ответ лежит 👉 тут 👈
👍6😁3❤1🔥1
Одна из историй преподавания или часть 2. Пара слов про ленивые and и or в Python
Для повышения быстродействия при проверке условий в
Вначале рассмотрим
А теперь читайте медленно слева направо. Замечаете? Если первым идёт
А теперь аналогичная "лень" для
В случае
Вывод. В 2-х случаях из 4-х проверки через
Ленивый
В этом примере когда
Для повышения быстродействия при проверке условий в
if, Python ленится, когда условий несколько в связке с and и/или or.Вначале рассмотрим
and.True and True == True
True and False == False
False and True == False
False and False == False
А теперь читайте медленно слева направо. Замечаете? Если первым идёт
False, то в итоге всегда будет False независимо от второго значения.А теперь аналогичная "лень" для
or.True or True == True
True or False == True
False or True == True
False or False == FalseВ случае
or если слева идёт True, то и в результате будет True.Вывод. В 2-х случаях из 4-х проверки через
and и or знают ответ заранее, не глядя на второе условие. Так зачем тратить вычисления.if False and 2 + 2 == 4:
print("Этот текст никогда не будет выведен!")Ленивый
if помогает экономит ресурсы ☝️. Но новички легко наступают на грабли, не продумав все последствия 👇if a > 0 or a / b > 1:
print("Текст")В этом примере когда
b = 0 получим ошибку деления на ноль. Но не всегда, а только если a <= 0.👍8🔥2
Одна из историй преподавания или часть 3. Как благодаря ленивому and функция работает рекурсивно
Перед нами квинтэссенция рекурсии и лени. При любом натуральном x функция рекурсивно досчитывает до нуля, который и возвращает.
1. Функция получает на вход натуральное число, например так
2. Происходит неявное преобразование целого числа 5 из
3. Функция переходит к проверке выражения после
4. Переходим к пункту 1.
4.1 В какой-то момент
5 (он же новый п. 2). Происходит неявное преобразование целого числа 0 из
6. Ленивый
7. Happy end и ответ в виде нуля при любом натуральном
def a(x):
return x and a(x - 1)
Перед нами квинтэссенция рекурсии и лени. При любом натуральном x функция рекурсивно досчитывает до нуля, который и возвращает.
1. Функция получает на вход натуральное число, например так
print(a(5))2. Происходит неявное преобразование целого числа 5 из
int в логический True.3. Функция переходит к проверке выражения после
and и вызывает сама себя. Но число передаётся на единицу меньше.4. Переходим к пункту 1.
4.1 В какой-то момент
x уменьшается до нуля. 5 (он же новый п. 2). Происходит неявное преобразование целого числа 0 из
int в логический False.6. Ленивый
if отказывается идти дальше and. Никакого нового вызова функции не происходит. Возвращается ноль.7. Happy end и ответ в виде нуля при любом натуральном
x на входе. Если конечно мы не переполняем стек вызова функций. Но это уже другая история... 😉👍5👏5❤2
Одна из историй преподавания или часть 4. Что за стек вызова функций из 1 и 3 части?
Каждый запуск функции кладёт на стек информацию о ней. Удаление информации происходит после завершения работы функции. И обычно стек почти пустой. Ведь даже в крутом выводе на печать списка уникальных элементов из введённой пользователем строки всего 6 функций максимально на стеке. 👇
С рекурсией ситуация хуже. Пример рекурсивного подсчёта суммы от 1 до n 👉 этот 👈 сломается на любом
Впрочем, ограничение можнообойти изменить в большую сторону. Достаточно задать новый лимит через встроенную в модуль
Но помните. С большим стеком приходит большая ответственность. 🕸
Каждый запуск функции кладёт на стек информацию о ней. Удаление информации происходит после завершения работы функции. И обычно стек почти пустой. Ведь даже в крутом выводе на печать списка уникальных элементов из введённой пользователем строки всего 6 функций максимально на стеке. 👇
print(list(set(map(str, input("Filter unique simbols: ")))))С рекурсией ситуация хуже. Пример рекурсивного подсчёта суммы от 1 до n 👉 этот 👈 сломается на любом
n больше ≈995. Стек не резиновый, ОЗУ не бесконечна. Стандартное ограничение в Python составляет 1000 элементов на стеке.Впрочем, ограничение можно
sys функцию.sys.setrecursionlimit(new_limit)Но помните. С большим стеком приходит большая ответственность. 🕸
👍6🔥3
Чем заняться в выходные? Может почитать одно старое, но от этого ничуть не утратившее актуальность интервью со мной. 🤓
Хотя. Оно скорее не обо мне, а о Python. Но и вы собрались в канале ради языка программирования. Так что смело click по ссылке. 💻
https://habr.com/ru/company/habr_career/blog/454182/
Комментарии можно и туда, и сюда 🔁
Хотя. Оно скорее не обо мне, а о Python. Но и вы собрались в канале ради языка программирования. Так что смело click по ссылке. 💻
https://habr.com/ru/company/habr_career/blog/454182/
Комментарии можно и туда, и сюда 🔁
🔥3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Изначально завершить историю о рекурсии хотел рассказом о хвостовой рекурсии и крутым приёмом по её реализации в Python. Да, язык изначально её не поддерживает. Но чем больше статей по оптимизации хвостов рекурсии в Python читал, тем больше слёз от костылей, кривокода и плясок с бубном текло из моих глаз 😢
В итоге пришёл к двум выводам.
1. Гвидо шикарный программист и я полностью согласен с его нежеланием заниматься Устранением хвостовой рекурсии.
2. Если есть рекурсивное решение задачи, но оно может переполнить стек, задачу надо переписать через циклы.
Было:
Стало:
Или даже так, в Python Style:
В итоге пришёл к двум выводам.
1. Гвидо шикарный программист и я полностью согласен с его нежеланием заниматься Устранением хвостовой рекурсии.
2. Если есть рекурсивное решение задачи, но оно может переполнить стек, задачу надо переписать через циклы.
Было:
def func(n):
if n == 1:
return n
return n + func(n - 1)
Стало:
def func(n):
res = n
while n != 1:
n -= 1
res += n
return res
Или даже так, в Python Style:
def py_func(n):
return sum(range(1, n + 1))
🔥7
Если ваш код на Python активно взаимодействует с операционной системой... Или вы решили сделать простенький эмулятор терминала для прокачки навыков программирования. В любом случае обратите внимание на функцию system из модуля os.
os.system('python --version')
Быстро, просто, коротко.👍5
Простенький эмулятор терминала ver_1.0.alpha из прошлого поста
Та неловкая ситуация, когда комментарии интереснее, чем сам пост. 😊
import osUPD 12:30
print('OS terminal started')
while True:
cmd = input('>>> ')
os.system(cmd)
Та неловкая ситуация, когда комментарии интереснее, чем сам пост. 😊
