Как написать программу на Python
В прошлой статье я рассказал как установить Python и среду разработки PyCharm. В этой статье поговорим о том, как написать программу на Python.
5K открытий
Что для этого нужно?
Для того, чтобы написать программу на любом языке программирования нужно знать, что мы хотим сделать.
Давайте для начала напишем самую простую программу, которая просто выводит сообщение в консоль. По традиции, этим сообщением является «Hello world!».
Функция print
Функция print() выводит сообщение в консоль. В скобках в качестве параметра передается сообщение и/или переменные.
1. Создаем файл с расширением .py
2. Пишем в нем строку
Если мы запустим этот файл двойным нажатием левой кнопкой мыши, то он быстро закроется, и мы не успеем разглядеть наше сообщение.
Для того, чтобы этого не происходило добавим функцию input()
Функция input
Функция input() предназначена для считывания данных с клавиатуры. В скобках передается сообщение, которое будет выведено в консоль.
Добавим в конце нашей программы input(«Нажмите enter для продолжения. «), и тогда наша программа не закроется. Код будет выглядеть так:
print(«Hello World!»)
input(«Нажмите enter для продолжения. «)
Я не буду писать программу, а запущу Python из командной строки, чтобы показать вам, что всё работает.
Заключение
1. Для того, чтобы написать программу на Python, нужно сформулировать, что мы хотим сделать (в нашем примере мы захотели вывести сообщение «hello world» в консоль)
2. Нужно знать синтаксис языка программирования Python (благо, он не такой сложный, в отличии от некоторых других языков программирования)
Чтобы изучать программирование на языке Python было проще, специально для вас я создал ютуб-канал «Русский питонист», на котором уже опубликовал плейлист по основам Python.
Написание простой программы
Рассмотрим сначала простую задачу вычисления площади круга. Как написать программу для решения этой проблемы?
Алгоритм
Написание программы включает в себя разработку алгоритмов и перевод алгоритмов в инструкции программирования или код. Алгоритм описывает, как проблема решается путем перечисления действий, которые необходимо предпринять, и порядка их выполнения. Алгоритмы могут помочь программисту распланировать программу, прежде чем писать ее на языке программирования.
Псевдокод
Алгоритмы могут быть описаны в естественных языках или в псевдокоде (естественный язык, смешанный с некоторым программным кодом). Алгоритм вычисления площади круга можно описать следующим образом:
1. Прочитать радиус круга.
2. Вычислить площадь используя следующую формулу:
площадь = радиус * радиус * π
3. Показать результаты.
Совет: всегда полезно описать свою программу (или ее основную проблему) в виде алгоритма перед началом кодирования.
Когда вы кодите, то есть, когда вы пишете программу, вы переводите алгоритм в программу. Вы уже знаете, что каждая Java программа начинается с определения класса, в котором за ключевым словом class следует имя класса. Предположим, что вы выбрали ComputeArea как имя класса. Схема программы будет выглядеть так:
public class ComputeArea < // Подробности будут даны позже >
Как вы знаете, каждая программа Java должна иметь основной (main) метод, в котором начинается выполнение программы. Следовательно, программа расширяется следующим образом:
public class ComputeArea < public static void main(String[] args) < // Шаг 1: Считать радиус // Шаг 2: Рассчитать площадь // Шаг 3: Показать площадь >>
Программе необходимо прочитать радиус, введенный пользователем с клавиатуры. Это поднимает два важных вопроса:
- Чтение радиуса.
- Сохранение радиуса в программе.
Сначала рассмотрим второй вопрос. Чтобы сохранить радиус, программе нужно объявить символ, который называется переменной. Переменная представляет значение, хранящееся в памяти компьютера.
Вместо использования x и y в качестве имен переменных выбирайте описательные имена: в этом случае radius для радиуса и area для площади. Чтобы компилятор знал, чем являются radius и area, укажите их типы данных. Это тип данных, хранящихся в переменной, будь то целое, действительное число или что-то еще. Это называется объявлением переменных. Java предоставляет простые типы данных для представления целых чисел, действительных чисел, символов и булевых типов. Эти типы известны как примитивные типы данных или фундаментальные типы.
Реальные числа (т. е. числа с десятичной точкой) представлены с использованием метода, известного в компьютерах как плавающая точка. Таким образом, реальные числа также называются числами с плавающей точкой. В Java вы можете использовать ключевое слово double для объявления переменной с плавающей запятой. Объявите radius и area как double. Следовательно, программа может быть расширена следующим образом:
public class ComputeArea < public static void main(String[] args) < double radius; double area; // Шаг 1: Считать радиус // Шаг 2: Рассчитать площадь // Шаг 3: Показать площадь >>
Программа объявляет переменные radius и area. Зарезервированное слово double указывает, что radius и area являются значениями, которые хранятся на компьютере с плавающей запятой.
Первый шаг – предложить пользователю обозначить радиус круга. Вскоре вы узнаете, как запрашивать у пользователя информацию. Пока, чтобы узнать, как работают переменные, вы можете назначить фиксированное значение радиусу (переменной radius) в программе при написании кода; позже вы измените программу, чтобы запросить у пользователя это значение.
Второй шаг – посчитать площадь и присвоить результат выражения radius * radius * 3.14159 переменной area.
На последнем этапе программа отобразит значение area на консоли с помощью метода System.out.println.
В результате полная программа имеет вид:
public class ComputeArea < public static void main(String[] args) < double radius; // Объявить radius double area; // Объявить area // Присвоить значение радиуса radius = 20; // теперь радиус равен 20 // Посчитать площадь area = radius * radius * 3.14159; // Показать результаты System.out.println("Площадь круга с радиусом " + radius + " равна " + area); >>
Программа показывает площадь круга:


Листинг в NetBeans (с номерами строк):

Переменные, такие как radius и area, соответствуют местам памяти. Каждая переменная имеет имя, тип, размер и значение. Строка под номером 5 объявляет, что radius может хранить значение double. Значение не определено, пока вы его неназначили. Строка 9 назначает 20 в переменную radius. Аналогично, строка 6 объявляет переменную area, а строка 12 присваивает значение area. В следующей таблице показано значение в памяти для radius и area при выполнении программы. Каждая строка в таблице показывает значения переменных после выполнения оператора в соответствующей строке в программе. Этот метод рассмотрения работы программы называется трассировкой программы. Программы трассировки полезны для понимания того, как работают программы, и они являются полезными инструментами для поиска ошибок в программах.

Объединение строк
Знак плюс (+) имеет два значение: одно – это сложение, а второе – это конкатенация (объединение) строк. Знак плюса (+) в строках 15-16 называется оператором конкатенации строк. Он соединяет две строки в одну.
Объединение строк с числами
Если строка соединяется с числом, то число конвертируется (преобразовывается) в строку и объединяется с другой строкой. Следовательно, знак плюс (+) в строках 15-16 конкатенирует строки в одну более длинную строку, которая отображается в выводе. Строки и объединение строк будет рассмотрено в одной из последующих глав.
Внимание: в исходном коде строка не может быть разбита на несколько строк. Следовательно, следующая инструкция приведёт к ошибке компиляции:
System.out.println("Программирование на Java, вместе с Java9");
Для исправления этой ошибки, разбейте строку на две отдельные подстроки и используйте оператор конкатенации (+) для их объединения:
System.out.println("Программирование на Java, " + вместе с Java9");
Проверь себя:
Найдите и исправьте ошибки в следующем коде:
public class Test < public void main(string[] args) < double i = 50.0; double k = i + 50.0; double j = k + 1; System.out.println("j is " + j + " and k is " + k); >>
7 правил написания программ, которые не умрут вместе с вами
Ваши программы – это ваше наследие. Решайте сами, как долго оно будет существовать.
Жизнь заканчивается, но программы не обязательно должны умирать.
После серии моих твитов на тему того, как нужно писать программы, меня попросили раскрыть эту тему. Предупреждаю, что редко в каком проекте удаётся чётко следовать всем семи правилам. У меня самого это часто не получается. Но чем больше правил вы соблюдаете, тем больше ваши программы проживут. Каждый символ добавляет что-то к общей экосистеме, и наша задача, как инженеров, поддерживать экосистему в чистоте и порядке.
Что можно получить, выдавая хороший код? Разве не имеет права на жизнь подход в обучении под названием «двигайся быстрее, ломая всё на своём пути?» Нет. Обучиться писать код – это навык, это доступно каждому. Обучиться писать хороший код – это искусство. Это требует усилий, времени и целеустремлённости.
Разве вы хотите оставить после своей смерти миру ещё больше SEGFAULT-ов? Хотите ли вы, чтобы сисадмины занимались починкой систем, которые сломались из-за вашего дерьмового кода? Чтобы ваш менеджер проектов вспоминал вас как инженера, работа которого бесила пользователей?
Ничего плохого в быстром продвижении вперёд нет, но в какой-то момент нужно осознать, что низкокачественный код далеко вас не уведёт.
Когда вы приходите к врачу, тот сначала задаёт вам много вопросов, чтобы понять, что с вами случилось. Он не выписывает лекарства перед постановкой диагноза. Точно так же важно разобраться, действительно ли с вашим кодом что-то не так.
1. Накат обновлений отнимает много времени и сил?
2. Система рушится даже от небольшого обновления?
3. Выкатывали ли вы когда-нибудь сломанный код на продакшн, причём это становилось известно только после жалоб пользователей?
4. Знаете ли вы, что именно нужно делать, когда система падает? Как добраться до бэкапов и восстановиться из них?
5. Проводите ли вы больше времени за сменой окружений, повторных выполнений одних и тех же команд, запуска каких-то утилит – чем за самим написанием программ?
Если вы ответили «да» – эта статья для вас. Читайте, а лучше прочтите два раза.
1. Делите на модули
Мозг человека – сложное устройство, сложнее любого процессора, при этом он не справляется с решением сложных задач. Допустим, сложно сразу умножить 13*35. Но если разделить эти операции на простые: 35*10 + 30*3 + 5*3 = 455, то подсчёт упрощается. Разбивая задачу на простые и независимые, мы приходим к ответу.
Так же и с программами. Разбейте программу на несколько частей, файлов, директорий. проектов. Все зависимости выведите в одно место, используйте принцип MVC или его вариант. Такой код и читать проще, и отлаживать легче. В большинстве случаев отладка приведёт вас к нескольким строкам кода, а не к файлу из тысячи строк. Накатывая апдейты одного модуля, вы не сломаете всю остальную систему.
2. Тестируйте
Фу, тесты. Брррррр!
Такая реакция естественна, потому что нас учили, будто тесты не являются частью программирования. Вас учат шаблонам в С++, но не тому, как их тестировать. В этом и проблема. Некоторые считают, что тесты над писать до самой программы.
Мне всё равно, когда вы пишете тесты, если вы их пишете. Не надо геройствовать, начните с простого (print(add(1, 1) == 2)), а затем уже переходите на фреймворк для тестов в вашем языке.
Тогда вы начнёте понимать сложность вашей программы, учиться делить её на модули, части, которые можно тестировать по отдельности. Получается, что используя тесты, вы уже будете выполнять два из семи правил.
3. Непрерывная интеграция
Тесты должны успешно отрабатывать, причём в разных окружениях (например, в разных версиях Python). Также тесты надо проводить после каждого изменения. Вместо того, чтобы делать это вручную из командной строки, удобнее и быстрее создать платформу для непрерывной интеграции.
Непрерывная интеграция (НИ) – это практика разработки, при которой код интегрируется в репозиторий несколько раз в день. Каждый раз проверяется автоматически, что позволяет отслеживать проблемы на ранней стадии.
Для своих проектов я использую TravisCI и Drone.io. Когда я делаю новое дополнение кода, платформа делает билд и выполняет тесты.
4. Автоматизируйте
У больших проектов всегда есть куча мелких вспомогательных задач. Некоторые люди делают текстовики с командами и копируют их оттуда. Но проще освоить скрипты на bash (и/или Python). Вот некоторые задачи, которые необходимо автоматизировать скриптами:
— преобразование README.md в другие форматы
— автоматическое тестирование (включая создание тестовых серверов и данных, удаление временных файлов и т.д.)
— заливка кода на сервер разработки
— размещение программы на продакшене
— автоматическое обновление зависимостей
5. Избыточность
Первое, что вы видите на git-scm.com:
Git – бесплатная распределённая система контроля версий с открытым исходным кодом, предназначенная для работы как с малыми, так и очень большими проектами, с высокой скоростью и эффективностью.
Распределённая. Это ключевое слово. Ущипните себя, если вы хоститесь только на гитхабе. Потому, что это единая точка отказа. Если гитхаб падает, или во время push-операции вы повредили файлы, ваш процесс разработки останавливается.
Залогиньтесь на Bitbucket и выполните следующее в вашем репозитории:
# rename origin remote git remote rename origin github # add the gitlab remote (for the love of everything that’s holy, use ssh) git remote add bitbucket # push existing code to new remote git push -u bitbucket —all # let’s magic git config -e # add this in the file [remote “origin”] url = git@github.com:username/reponame.git url =
Теперь, когда вы заливаете код, изменения идут как на Github, так и на Bitbucket. Никогда не знаешь, когда что-либо сломается. И всегда полезно иметь бэкапы. Вот, как это работает у меня:
— весь код живёт в директории Codebase в Dropbox. Автоматическая синхронизация.
— почти весь код живёт на Github
— самый важный код живёт на двух частных зеркалах – одно в школе, другое на моём AWS
Я потеряю свой код, только если настанет конец света.
6 Коммиты
Это должно быть вам знакомо. Загляните в историю, и вы увидите что-то вроде:
«исправил ошибку в модуле»
Исправил? Какую ошибку? В каком модуле?
Многие расценивают систему контроля версий как бэкап, а не как способ хранить историю. История из таких сообщений бесполезна. Допустим, через неделю после этого коммита вы решили что-то вернуть назад, потому что оно привнесло в проект новый баг. Но поскольку описания действия нет, вам нужно просматривать все изменения. Именно для предотвращения этого и создавались системы контроля версий.
Чтоб не напрягаться, просто воспользуйтесь следующей шапргалкой:
— у каждого коммита должен быть смысл. Исправление ошибки, добавление новой функции, удаление существующей?
— только одно изменение на один коммит
— включайте номер проблемы в сообщение о коммите
— включайте описание изменений. Это зависит от правил текущего проекта, но обычно вы упоминаете, что приводило к ошибке, как вы её исправили и как это тестировать
— пишите осмысленное сообщение:
добавил новую форму в заголовок, чтобы было легче собирать ссылки. закрыл #3
удалил всякое, ибо почему бы и нет, хех
7. Планируйте
Даже если вы выполняете все предыдущие правила и чувствуете себя богом программирования, всё равно может случиться всё, что угодно. Имейте план на самый плохой случай. Что, если трафик побьёт рекорды? Откуда вы возьмёте бэкапы, если система упадёт? Кому звонить ночью, если сервер навернётся?
Продумайте, но не перестарайтесь. Автоматизируйте всё, что возможно. Затем задокументируйте всё подробно. Так, чтобы тот, кто получит ваш код, тоже смог следовать плану. Иметь план – не только значит выглядеть умнее, это значит реально быть умнее.

Вот такие правила и определяют хорошую программу. Если вас они не убедили, ответьте мне на два вопроса:
1. Ожидаете ли вы от новичка, присоединившегося к вам, что он поймёт существующий код с лёгкостью?
2. Является ли рефакторинг кода простым и быстрым делом?
Если нет – перечитайте заново. Сохраните, поделитесь с командой.
Эти правила поначалу могут показаться очевидными. Так и есть. Плохой код постоянно создают, и, в конце концов, он умирает. Ваши программы – это ваше наследие. Решайте сами, как долго оно будет существовать.
- правила программирования
- github
- тесты
Как начать писать программу и не пожалеть
Это текст для тех, кто решил написать программу для людей — сервис, приложение или что-то подобное. То есть не просто «Хеллоу ворлд», а что-то полезное, функциональное и потенциально пользующееся спросом. Может быть, вы на этом даже планируете зарабатывать. Вот на что обратить внимание на старте: подводные камни, ошибки и нюансы.
Нужно ли это писать?
Вот простой способ понять, нужно ли писать эту программу. Задайте себе вопрос: «Делают ли сейчас вручную то, что я хочу зашить в программу?»
В этом вопросе сразу два компонента:
- Люди уже делают то, что будет улучшать ваша программа. То есть существует некоторый спрос на эту работу.
- Люди делают это руками, а значит, они хотели бы это автоматизировать.
Распространенная ошибка — делать программу для того, что люди сейчас не делают в принципе.
Например, вы придумали программу для ведения бюджета: туда нужно вводить данные о ваших покупках по категориям, а она бы складывала траты за месяц. Делают ли это люди? Вроде делают, но до поры. Обычно человек начинает вести бюджет, два месяца что-то пишет, а потом забрасывает, потому что денег от этого больше не становится. А еще есть приложения банков, которые сами считают статистику трат. Маловероятно, что очередной менеджер личного бюджета как-то изменит ситуацию.
✅ А вот что люди часто делают руками, так это регулярно оплачивают разные счета: за связь, интернет и коммуналку. И многие не любят настраивать автоплатежи, чтобы никто не смог с них списать ничего лишнего. Еще они регулярно подают сведения по коммуналке. И наверняка есть еще какие-то дела, которые они делают раз в месяц, раз в квартал или раз в год. Можно было бы поставить себе напоминание в календарь, но его легко проглядеть и забыть. Вот бы была напоминалка, которая ходит за тобой, пока ты не сделаешь дело, — был бы кайф.
Полезное ядро
Как часто делают: в голове рождается задумка программы, автор садится её писать и начинает буквально с начала — с экрана логина, первого интерфейса, первого экрана, в общем, чего-то первого. Необязательно на этом экране будет происходить основная работа программы. Просто по задумке этот экран должны увидеть первым.
Как лучше: понять, что будет полезным ядром программы, и сначала убедиться, что вы можете его реализовать. Потом завернуть это ядро в модуль или функцию и уже поверх него написать интерфейс, окна, экраны и всё что угодно.
✅ Например, в приложении для напоминаний полезное ядро — само напоминание, которое вываливается в нужный момент. Потом, может быть, нужно дать напоминанию статус «Я это уже сделал в этом месяце» или «Напомни мне через. » и опцию повторного срабатывания через какое-то время.
А вот интерфейс установки напоминания и инфраструктура для хранения напоминаний не так важны на первом этапе.
Часто такое же полезное ядро уже реализовал кто-то другой в виде бесплатной библиотеки. Это большая удача: взяли, изучили, допилили — быстро выпустили свой продукт.
На каком языке?
Есть технологии и языки, которые совсем не подходят для вашей задачи: например, Python совсем не нужен для десктопных приложений. В остальном большинство популярных языков мало-мальски могут всё.
На старте обычно рекомендуют не гоняться за идеальным языком, а, наоборот, взять тот язык, которым вы уже владеете, и попробовать реализовать задумку на нём. И, если это точно не подходит, искать другие технологии.
Не подменяйте программирование поиском идеальной технологии.
