Задача по программированию. Тривиальная задача сравнения метода вычисления факториал с помощью цикла и метода вычисления факториала с помощью рекурсии. Берется некоторое число n, для которого вычисляем факториал разными способами. Вычисления засовываем в цикл с 1000 итераций, чтобы снизить погрешность. Засекаем время с помощью метода Milliseconds() (библиотека Utils). Выводим результаты. В большинстве случаев рекурсия выполняется быстрее. Предлагаю обсудить, почему так происходит?
[ Язык реализации: Pascal ]
Обсуждение задачи: vk.com/wall-51126445_30047
Полный код: https://pastebin.com/UzPkbXDa
#репетитор #mentor #программирование #физика #математика #it #информатика #pascal #задачи #профилирование
[ Язык реализации: Pascal ]
Обсуждение задачи: vk.com/wall-51126445_30047
Полный код: https://pastebin.com/UzPkbXDa
#репетитор #mentor #программирование #физика #математика #it #информатика #pascal #задачи #профилирование
Товарищи, сейчас немного отдаленный пост от основной тематики. Но всё же. Когда я сам в первый раз столкнулся с этим вопросом, то натыкался либо на статьи с очевидными и слишком обобщенными советами, либо на какую-то ерунду с маркетинговыми терминами, которые приходилось гуглить. И мне надоело это дерьмо! Напишу рабочие советы раскрутки из своей практики. Без сложных терминов. Простыми словами.
💡Читать статью📝
#it #реклама #раскрутка
💡Читать статью📝
#it #реклама #раскрутка
💡 Репетитор VS Инфоцыган: как начать и сколько брать
Как начать? Какую ставку поставить? Как не попасться на уловки инфоцыган с их супер-курсами, обещающими сделать из вас миллионеров? Всё это вы найдете в этой статье. Собрали вопросы молодежи о работе репетитором и отвечаем на них. Давайте вместе разберемся со страхами, сомнениями и ошибками.
✏️ Читать статью полностью
#репетитор #егэ #огэ #образование #работа #it #наука
Как начать? Какую ставку поставить? Как не попасться на уловки инфоцыган с их супер-курсами, обещающими сделать из вас миллионеров? Всё это вы найдете в этой статье. Собрали вопросы молодежи о работе репетитором и отвечаем на них. Давайте вместе разберемся со страхами, сомнениями и ошибками.
✏️ Читать статью полностью
#репетитор #егэ #огэ #образование #работа #it #наука
👍12🔥7
📕 Рецензия на книгу "Совершенный код" Стива Макконнелла
(найти книгу можно в подборке: 📖 Книги, которые стоит прочитать каждому программисту 📚 )
Несмотря на то что первые 50 страниц книги наполнены информацией, которая может показаться очевидной любому мыслящему человеку, книгу стоит прочесть до конца. Наполненная множеством интересных примеров, книга действительно способна навести на путь мудрого программирования. Примеры в данной книге более приближены к реальному коммерческому коду, чем игрушечные примеры из книг и методичек преподавателей информатики в школах и вузах.
Для себя можно найти много правил о том, как именно нужно писать код, как его нужно форматировать и делегировать функциональность своего кода, чтобы в дальнейшем его было просто сопровождать и находить в нем ошибки.
Подробно написано о структурах данных и в каких случаях какие структуры лучше всего применять. К каждому правилу автор приводит практический пример.
Самыми полезными с практической точки зрения мне показались главы о рефакторинге, стратегиях оптимизации кода и о методиках оптимизации кода. А последняя часть книги под названием "Мастерство программирования" помогает понять, как именно развиваться в этой области.
И, конечно, хочется привести парочку самых ярких мотивационных моментов данной книги.
В 1972 году, на лекции, посвященной получению премии Тьюринга, Эдсгер Дейкстра заявил, что большинство аспектов программирования являет собой попытки компенсации строго ограниченных способностей разума. Самые лучшие программисты — те, кто понимают, насколько ограничены их возможности. Они скромны. Худшие программисты отказываются признать, что их способности не соответствуют задаче. Характер не позволяет им стать отличными программистами. Чем усерднее вы работаете над компенсацией ограниченных возможностей своего разума, тем лучше будете программировать. Быстрота вашего развития напрямую зависит от вашей скромности.
По моему субъективному мнению, данная книга должна быть первой (или одной хотя бы второй, когда вы читаете свою первую книгу по какому-то языку программирования). В некоторых моментах книга Макконнелла может показаться сложной, если у вас нет достаточного опыта. Особенно это связано с примерами на C++ и Assembler. Но всё равно эта книга должна быть первой, потому что лучше вырабатывать хорошие привычки с самого начала своего самообразования.
#рецензия #программирование #рефакторинг #it
(найти книгу можно в подборке: 📖 Книги, которые стоит прочитать каждому программисту 📚 )
Несмотря на то что первые 50 страниц книги наполнены информацией, которая может показаться очевидной любому мыслящему человеку, книгу стоит прочесть до конца. Наполненная множеством интересных примеров, книга действительно способна навести на путь мудрого программирования. Примеры в данной книге более приближены к реальному коммерческому коду, чем игрушечные примеры из книг и методичек преподавателей информатики в школах и вузах.
Для себя можно найти много правил о том, как именно нужно писать код, как его нужно форматировать и делегировать функциональность своего кода, чтобы в дальнейшем его было просто сопровождать и находить в нем ошибки.
Подробно написано о структурах данных и в каких случаях какие структуры лучше всего применять. К каждому правилу автор приводит практический пример.
Самыми полезными с практической точки зрения мне показались главы о рефакторинге, стратегиях оптимизации кода и о методиках оптимизации кода. А последняя часть книги под названием "Мастерство программирования" помогает понять, как именно развиваться в этой области.
И, конечно, хочется привести парочку самых ярких мотивационных моментов данной книги.
В 1972 году, на лекции, посвященной получению премии Тьюринга, Эдсгер Дейкстра заявил, что большинство аспектов программирования являет собой попытки компенсации строго ограниченных способностей разума. Самые лучшие программисты — те, кто понимают, насколько ограничены их возможности. Они скромны. Худшие программисты отказываются признать, что их способности не соответствуют задаче. Характер не позволяет им стать отличными программистами. Чем усерднее вы работаете над компенсацией ограниченных возможностей своего разума, тем лучше будете программировать. Быстрота вашего развития напрямую зависит от вашей скромности.
По моему субъективному мнению, данная книга должна быть первой (или одной хотя бы второй, когда вы читаете свою первую книгу по какому-то языку программирования). В некоторых моментах книга Макконнелла может показаться сложной, если у вас нет достаточного опыта. Особенно это связано с примерами на C++ и Assembler. Но всё равно эта книга должна быть первой, потому что лучше вырабатывать хорошие привычки с самого начала своего самообразования.
#рецензия #программирование #рефакторинг #it
👍25🔥2
💡 Какой язык программирования выбрать в качестве первого ?
Недавно мне стало интересно собрать небольшую статистику среди подписчиков канала Physics.Math.Code в telegram. Ядро аудитории канала составляют физики, математики, разработчики со стажем, учителя, научные работники и другие люди, интересующиеся Computer Science и точными науками. Поэтому для подходящей аудитории был создан подходящий опрос. И вот какие получились результаты...
👨🏻💻 Читать статью полностью
#программирование #it #работа #образование #самообразование #языки
Недавно мне стало интересно собрать небольшую статистику среди подписчиков канала Physics.Math.Code в telegram. Ядро аудитории канала составляют физики, математики, разработчики со стажем, учителя, научные работники и другие люди, интересующиеся Computer Science и точными науками. Поэтому для подходящей аудитории был создан подходящий опрос. И вот какие получились результаты...
👨🏻💻 Читать статью полностью
#программирование #it #работа #образование #самообразование #языки
👍8⚡7👎1
reduce()
? Давайте сразу напишем такой пример:
numbers = [1, 11, 12, 13, 18, 9, 8, 6]
from functools import reduce
func = lambda acc, cur : acc + cur
total = reduce(func, numbers, 0)
print('Встроенная reduce: ',total)
def _reduce(callback, collection, init = 0):
acc = init
for k in collection:
acc = callback(acc, k)
return acc
_total = _reduce(func, numbers)
print('Моя reduce: ',_total)
Теперь объясним параметры и работу конструкции:
result = reduce( function, iterable[, initializer] )
:▫️
function
— функция, применяемая к элементам итерации. Она должна принимать два аргумента.▫️
iterable
— итерируемый объект, элементы которого вы хотите уменьшить. Это может быть список, кортеж или любой другой итерируемый объект.▫️
initializer
— (необязательно): начальное значение аккумулятора (накопителя). Оно используется в качестве первого аргумента при первом вызове функции, если оно предусмотрено.⚠️ Обработка пустых итераций: Одной из распространенных ошибок при использовании функции
reduce()
является обработка пустых итераций. Передача пустой итерации в reduce()
без инициализатора вызывает Ошибку типа поскольку нет начального значения для запуска процесса сокращения. Чтобы избежать этого, всегда указывайте инициализатор, когда итерируемый объект может быть пустым.⚙️ Производительность:
▫️ Эффективность
reduce()
по сравнению с циклами: Функция reduce()
может быть более эффективной, чем явные циклы, потому что она реализована на C, что может обеспечить преимущества в производительности. Однако это преимущество часто незначительно и зависит от сложности применяемой функции.▫️Преимущества использования встроенных функций в производительности: Встроенные функции, такие как
sum()
, min()
, и max()
высоко оптимизированы с точки зрения производительности. Они реализованы на C и могут выполнять операции быстрее, чем эквивалентный код Python с использованием reduce()
.reduce()
? Функция reduce() полезна при итеративной обработке данных, избегая явных циклов и делая код более читаемым и кратким. Некоторые распространенные варианты использования включают:▫️ Суммирование чисел в списке: Быстрое суммирование всех элементов.
▫️ Умножение элементов итеративного элемента: Вычисление произведения элементов.
▫️ Объединение строк: Объединение нескольких строк в одну.
▫️ Нахождение максимального или минимального значения: Определение самого большого или самого маленького элемента в последовательности.
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍5❤3🤯2
В этой заметке рассмотрим задачу с реального собеседования на Python-разработчика
Мы уже ознакомились с lambda-функциями и где они используются. Сейчас же исследуем вырванный из контекста реальный код и задания к нему.
🖥 Исходный код:
▪️ Что не так с кодом ? Если мы запустим в таком виде, то получим
▪️ Что код делает ? Есть некоторая функция, которая принимает в себя callback-функцию predicate и набор объектов (пустой по дефолту). Далее у нас как-то формируется список помеченных объектов, которые попадают в новый список только в том случае, если callback-функция возвращает для них
▪️ Что выведет на экран, если его исправить? Судя по тестовым параметрам, переданная lambda-функция ни на одном из элементов объекта
▪️ Функция оптимизирована? Нет. Дело в том, что она перебирает все остальные элементы (тратит память и время выполнения), когда мы можем ограничиться рассмотрением первого подходящего. Тогда код можно исправить так:
▪️ Какая сложность выполнения данной функции? В худшем случае: O(n) ; в лучшем случае : O(1).
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Мы уже ознакомились с lambda-функциями и где они используются. Сейчас же исследуем вырванный из контекста реальный код и задания к нему.
def get_first_matching_object(predicate,objects=[]):
matching_objects = (obj for obj in objects if predicate(obj))
if matching_objects:
object = matching_objects[0]
return object
return None
print(get_first_matching_object(lambda x: x == 1, [2, 3, 4]))
▪️ Что не так с кодом ? Если мы запустим в таком виде, то получим
TypeError: 'generator' object is not subscriptable
. Это означает, что объект-генератор matching_objects
представляет собой итератор: он генерирует значения в том порядке, в котором они запрашиваются циклом for или вызовом next(matching_objects)
. Однако, дальше по коду пытаются получить доступ по индексу так, как будто это список или любой другой Sequence-тип, который позволяет получать доступ к произвольным k-м элементам через matching_objects[k]
. Если мы хотим, чтобы всё работало, нам нужно преобразовать в список list() или закрыть генератор в квадратные скобки: matching_objects = [obj for obj in objects if predicate(obj)]
▪️ Что код делает ? Есть некоторая функция, которая принимает в себя callback-функцию predicate и набор объектов (пустой по дефолту). Далее у нас как-то формируется список помеченных объектов, которые попадают в новый список только в том случае, если callback-функция возвращает для них
True
. Следующая конструкция говорит нам о том, что если полученный список matching_objects
не пустой, то мы выделяем первый входящий в него объект и возвращаем его. В противном случае возвращается None. Но последняя строчка не является обязательной. Потому что, в случае НЕсрабатывания условного оператора, у нас итак вернется None
.▪️ Что выведет на экран, если его исправить? Судя по тестовым параметрам, переданная lambda-функция ни на одном из элементов объекта
[2, 3, 4]
не вернет True. Поэтому список matching_objects
окажется пустым, в итоге нам вернется None. ▪️ Функция оптимизирована? Нет. Дело в том, что она перебирает все остальные элементы (тратит память и время выполнения), когда мы можем ограничиться рассмотрением первого подходящего. Тогда код можно исправить так:
def get_first_matching_object(predicate,objects=[]):
for obj in objects:
if predicate(obj):
return obj
return None
print(get_first_matching_object(lambda x: x == 1, [1, 2, 3, 4])) # 1
▪️ Какая сложность выполнения данной функции? В худшем случае: O(n) ; в лучшем случае : O(1).
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6❤4