Привет, друзья! Я — JavaScript-разработчик. Код пишу в основном на React (иногда на Vue), немного на TypeScript, немного на Node, немного знаю SQL, но... Короче говоря, сложно было не заинтересоваться Python. Как известно, лучший способ научиться "кодить" — это писать код. Предлагаю вашему вниманию 50 популярных в сфере программирования задач, решенных с помощью Python и JavaScript. Цель — сравнить языки на предмет предоставляемых ими возможностей. Задачки не очень сложные, хотя имеется парочка из категории продвинутых. Предполагается, что вы владеете хотя бы одним из названных языков на среднем уровне. Я старался комментировать ключевые моменты. Однако, это не гайд по JavaScript или Python, поэтому за подробностями работы той или иной функции или метода вам придется обращаться к другим источникам (в конце концов, что это за разработчик, который не умеет гуглить). Если вы найдете более оптимальное или эффективное с точки зрения производительности решение, поделитесь им в комментариях или пришлите мне в личку, я обязательно добавлю его в список. Единственное условие — решение должно быть не просто другим, а лучшим по объективным причинам. Я старался выбирать задачи, которые, во-первых, можно без особого труда (т.е. без "плясок с бубном") решить на обоих языках, во-вторых, можно решить аналогичным или хотя бы похожим образом. Отчасти поэтому некоторые решения могут выглядеть нетипичными для того или иного языка. Это опять же обусловлено сравнением между функционалом и конструкциями JavaScript и Python. Приветствуются любые конструктивные замечания и предложения. Python JavaScript Фраза "Hello world" переводится не как "Привет, мир", а как "Привет всем" или, если быть более аутентичным, "Привет, народ". Вы знали об этом? Python JavaScript Python JavaScript Здесь можно почитать про различные способы вычисления площади треугольника. Если a, b и c — три стороны треугольника, то согласно формуле Герона для того, чтобы вычислить площадь треугольника, p — это полупериметр, а s — площадь. Python JavaScript Python JavaScript Python В Python для этого существует специальный модуль: JavaScript В JS готовой функции для этого нет, поэтому придется реализовать ее самостоятельно: Python JavaScript Python JavaScript Python JavaScript Python JavaScript Раз уж мы заговорили про наличие 2 операторов равенства в JS, здесь же обращу ваше внимание на следующее: Високосным является год, который делится на 4 без остатка, за исключением столетий (оканчивающихся на 00). В последнем случае год будет високосным, если делится без остатка на 400. Python JavaScript Python JavaScript Простым является число, которое больше 1 и делится только на себя и 1. Простыми являются числа 2, 3, 5, 7 и т.д. А число 6, например, таковым не является, поскольку является составным: 2 * 3 = 6. Python JavaScript Python JavaScript Факториал — это произведение всех целых чисел от 1 до указанного. Например, факториалом числа 6 является 1 * 2 * 3 * 4 * 5 * 6 = 720. "Указанное число" должно быть положительным. В качестве небольшой оптимизации следует принять во внимание, что факториалом чисел 1 и 2 являются, соответственно, 1 и 2. Python JavaScript Python JavaScript Последовательность Фибоначчи — это последовательность целых чисел 0, 1, 1, 2, 3, 5, 8 и т.д. Два первых числа — это 0 и 1. Последующие числа — это результат сложения двух предыдущих. Python JavaScript Натуральные числа — числа, возникающие естественным образом при счете (1, 2, 3, 4, 5, 6, 7 и т.д.). Python JavaScript Python JavaScript Python JavaScript Наибольший общий делитель (он же наивысший общий фактор) — это положительное целое число, на которое без остатка делятся 2 (и более) других числа. Например, число 12 является НОД чисел 36 и 48. Python JavaScript Наименьшее общее кратное — это положительное целое число, которое делится без остатка на два (и более) других числа. Например, число 84 является НОК чисел 12 и 14. Python JavaScript Python JavaScript Почему бы не реализовать его на классах? Python JavaScript Лично я предпочитаю функциональный стиль программирования, поэтому классов в примерах больше не будет. Такое преобразование выполняется посредством деления числа на 2 с выводом остатка в обратном порядке. Проще показать: 
Python JavaScript Матрица может быть представлена в виде вложенного списка (массива), где каждый элемент — это строка матрицы. Пример матрицы 3x2, где 3 — это количество строк, а 2 — количество столбцов: Доступ к первой строке матрицы x можно получить через x[0], а доступ к первому элементу первой строки — через x[0][0]. Обратите внимание: эта задача относится к категории продвинутых. Можете пропустить ее, если читаете статью в первый раз. Python JavaScript Транспонированная матрица — это матрица, полученная из исходной посредством замены строк на столбцы. Обратите внимание: эта задача относится к категории продвинутых. Python JavaScript Палиндром — это строка (слово, число и т.д.), которая читается одинаково в обоих направлениях. Примеры: "borrow or rob", "а роза упала на лапу Азора". Python JavaScript Python JavaScript Python JavaScript Python JavaScript Обратите внимание: эта задача (точнее, 3 задачи) относятся к категории продвинутых. Это последняя относительно сложная задача, дальше будет намного проще. Половина пирамиды Python JavaScript Перевернутая половина пирамиды Python JavaScript Полная пирамида Python JavaScript На JS я решу эту задачу не таким лаконичным, но более понятным способом: Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python JavaScript Python В JS не существует такого типа данных, как перечисление, но его можно сымитировать, "заморозив" объект: JavaScript Два слова являются анаграммами, если состоят из одинаковых букв. Например, анаграммами являются слова "binary" и "brainy", или "раздвоение" и "дозревание". Python JavaScript Обратите внимание: при сравнении строк, состоящих из нескольких слов, необходимо также удалять из них все пробелы. Классика. Python В JS отсутствует встроенный метод для капитализации строки. JavaScript Python JavaScript Python JavaScript Пусть 2 последних задачки будут посвящены бэку. Python JavaScript Обратите внимание: приведенный код должен запускаться с помощью команды node filename. При этом файл должен быть модулем, т.е. иметь расширение .mjs или же в ближайшем package.json должно содержаться поле type со значением module. Предположим, что у нас имеется директория files с тремя файлами в формате TXT. Как нам получить названия этих файлов? Python JavaScript Фух… это было утомительно, но, вместе с тем, невероятно увлекательно, не правда ли? Как видите, синтаксические конструкции и основной функционал JavaScript и Python являются очень похожими, а во многом даже идентичными (без учета некоторых незначительных отличий), что при необходимости позволяет с относительной легкостью перейти с одного языка на другой. Вопрос в том, имеется ли необходимость в такой "миграции"? Обратите внимание: дальше я выскажу собственное мнение с позиции веб-разработчика. Существенное преимущество JavaScript заключается в том, что он не нуждается в интерпретаторе, т.е. код на JS выполняется браузером напрямую. Это очень сильно облегчает разработку веб-приложений. Если мы говорим о REST API, то реализовать его на Express, например, намного проще, чем на Django или FastAPI, хотя последний синтаксически схож с сочетанием Express и TypeORM или Prisma (во многом благодаря широкому использованию декораторов). С другой стороны, если мы говорим о реализации, скажем так, продвинутого сервера, то благодаря огромному количеству, в том числе, встроенных модулей, Python имеет некоторые преимущества перед Node.js. Есть мнение, что у Python имеются некоторые проблемы с асинхронностью — у меня не было возможности в этом убедиться. В свою очередь, в Node.js в последнее время царит некоторая неразбериха за счет одновременного существования двух разных подходов к разработке: одного, основанного на колбеках, который считается устаревшим, и другого, основанного на промисах и async/await, который требует дополнительных усилий по настройке окружения и не в полной мере заменяет первый подход. Благодарю за внимание и хорошего дня!  JavaScript Developer