автордың кітабын онлайн тегін оқу Python без проблем: решаем реальные задачи и пишем полезный код
Переводчик С. Черников
Даниэль Зингаро
Python без проблем: решаем реальные задачи и пишем полезный код. — СПб.: Питер, 2023.
ISBN 978-5-4461-1920-2
© ООО Издательство "Питер", 2023
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Моему отцу, который научил понимать компьютеры, и моей матери, которая научила понимать людей.
Об авторе
Доктор Даниэль Зингаро — адъюнкт-профессор информатики и преподаватель в Университете Торонто, обладатель множества наград. Его основная область исследований — образование в сфере информатики и вопросы, связанные с тем, как студенты осваивают (пусть порой и плохо) информатику. Даниэль написал книгу Algorithmic Thinking1 (No Starch Press, 2021), которая помогает студентам изучать и использовать алгоритмы и структуры данных.
1Зингаро Д. Алгоритмы на практике. — СПб.: Питер, 2023.
Зингаро Д. Алгоритмы на практике. — СПб.: Питер, 2023.
О научном редакторе
Люк Савчак — редактор-фрилансер и программист-любитель. Ему нравится превращать прозу в стихи, он написал пособие по нарезанию нужного количества кусочков торта и заумную версию Boggle, разобраться в которой сможет только преподаватель математики. Сейчас он преподает французский и английский языки на окраине Торонто. Люк также пишет стихи и сочиняет музыку для фортепиано, чем с удовольствием зарабатывал бы себе на жизнь, если бы мог. Его сайт: https://sawczak.com/.
Благодарности
Неужели мне снова довелось поработать с ребятами из No Starch Press? Барбара Йен и Билл Поллок предложили мне написать эту книгу. Алекс Фрид, ведущий редактор, помог в работе над рукописью. Я благодарю всех, кто участвовал в создании книги, включая редактора Кима Вимпсетта, выпускающего редактора Кэсси Андредис и дизайнера Роба Гейла. Мне очень повезло с ними.
Спасибо Университету Торонто, который предоставил мне время и место для написания книги. Я благодарю Люка Савчака, моего научного редактора, за исчерпывающую рецензию.
Я благодарен всем, кто занимался решением задач, описанных в этой книге, и соревновательным программированием в целом. Спасибо администраторам DMOJ за поддержку моей работы.
Благодарю своих родителей за то, что они поистине способны на все. А меня они просили лишь об одном — учиться.
Спасибо Дояли за то, что позволила мне уделить достаточно времени написанию книги и понимала, как много для этого требуется.
Наконец, благодарю всех вас за то, что вы купили эту книгу и хотите учиться.
Введение
Компьютеры нужны нам для выполнения каких-то задач и решения проблем. Наверняка вы использовали текстовый редактор, чтобы написать эссе или письмо. Возможно, вы пользовались программами для работы с электронными таблицами, чтобы свести дебет с кредитом. Быть может, с помощью графического редактора чуть-чуть обрабатывали свои фотографии. Сейчас трудно себе представить, как можно было бы сделать все это без компьютера. И текстовые процессоры, и электронные таблицы, и графические редакторы невероятно полезны.
Эти программы — инструменты общего назначения, предназначенные для выполнения широкого круга задач. Вот только написали их другие люди, не мы. А что делать, если имеющаяся программа не дает нам всего необходимого?
В книге наша цель — понять свой компьютер и выйти за рамки того, что пользователь может сделать с помощью уже существующих программ. Если точнее, вы будете писать собственные программы. Но это не будет текстовый или графический редактор либо же редактор таблиц. Это огромные задачи, которые, к счастью, до нас уже решили. Вы всего лишь научитесь писать небольшие программы для решения задач, с которыми в ином случае не справились бы. Я помогу вам научиться давать компьютеру команды, которые подскажут ему, как шаг за шагом решить вашу задачу.
Чтобы отдать компьютеру команду, мы пишем код на языке программирования. Он определяет правила написания кода и действия компьютера в ответ на этот код.
Вы будете учиться программировать на языке Python. Это серьезный навык, который не стыдно будет упомянуть в резюме. Но помимо освоения самого Python, вы научитесь тому типу мышления, который необходим для решения проблем с помощью компьютера. Языки программирования появляются и исчезают, а вот алгоритмический подход к задачам — нет. Я надеюсь, что эта книга поможет вам превратиться из конечного пользователя в программиста и вы получите удовольствие от изучения предложенного материала.
Интернет-ресурсы
Ресурсы для работы с книгой, включая примеры кода и дополнительные упражнения, можно скачать, перейдя по ссылке https://nostarch.com/learn-code-solving-problems/ .
Для кого предназначена книга
Эта книга для всех, кто хочет научиться писать компьютерные программы для решения своих задач.
Во-первых, вы, возможно, слышали о языке программирования Python и хотите научиться писать код на нем. В следующем разделе я объясню, почему именно Python отлично подходит в качестве первого языка программирования для изучения. Здесь вы много узнаете о Python и позже сможете прочесть более сложные книги об этом языке.
Во-вторых, если вы не слышали о Python или просто хотите узнать, что такое программирование, не волнуйтесь, вам эта книга тоже подойдет! Она научит вас понимать суть программирования. У программистов есть свои методы разбивать задачи на небольшие части и находить их решения с помощью кода. На этом уровне не имеет значения, какой именно язык программирования используется, потому что мышление программиста не привязано к какому-либо определенному языку.
И в-третьих, вам может быть интересно изучить какой-нибудь другой язык программирования, например C ++, Java, Go или Rust. Многое из того, что вы узнаете в ходе изучения Python, будет полезно при усвоении других языков программирования. Кроме того, Python сам по себе заслуживает изучения. А почему именно он — об этом дальше.
Зачем изучать Python
За годы преподавания я понял, что Python отлично подходит в качестве первого языка программирования. По сравнению с кодом на других языках код Python часто бывает лучше структурирован и более удобочитаем. Как только вы привыкнете к нему, окажется, что зачастую он читается почти как обычный английский!
Кроме того, у Python есть то, чего нет в других языках, например мощные инструменты для управления данными и их хранения. Многие из этих инструментов мы будем использовать в книге.
Python — это не только отличный язык для обучения, но еще и один из самых востребованных языков программирования в мире. Его используют для написания веб-приложений, игр, средств визуализации, ПО для машинного обучения и многого другого.
В итоге получаем язык, который и для обучения хорош, и для профессиональной деятельности полезен. О большем и мечтать нельзя!
Установка Python
Чтобы начать программировать на Python, нужно его сперва установить. С этого и начнем.
В основном используются две версии языка: Python 2 и Python 3. Python 2 — это более старая версия, которая больше не поддерживается. В этой книге мы будем работать с Python 3, именно ее следует установить на свой компьютер.
Python 3 далеко шагнул по сравнению с Python 2, но и в версии 3 он постоянно меняется. Первой версией Python 3 был Python 3.0. Затем выпустили Python 3.1, Python 3.2 и т.д. На момент написания книги последней версией Python 3 был Python 3.9. Для решения примеров из этой книги достаточно будет версии Python 3.6, но я рекомендую установить последнюю версию Python и поработать с ней.
Чтобы установить Python, выполните приведенные далее инструкции для вашей операционной системы.
Windows
В ОС Windows Python по умолчанию не установлен. Чтобы установить его, на сайте https://www.python.org/ перейдите в раздел Downloads. Вам будет предложено загрузить последнюю версию Python для Windows. Щелкните на ссылке, чтобы загрузить Python, а затем запустите установщик. На одном из первых экранов процесса установки выберите опцию AddPython3.9toPATH или AddPythontoenvironmentvariables — это значительно упрощает запуск. (При обновлении Python вам может потребоваться нажать кнопку Customizeinstallation, чтобы увидеть этот вариант.)
macOS
В macOS по умолчанию Python 3 не установлен. Чтобы установить его, на сайте https://www.python.org/ перейдите в раздел Downloads. Вам будет предоставлена возможность загрузки последней версии Python для macOS. Щелкните на ссылке, чтобы загрузить Python, а затем запустите установщик.
Linux
В Linux Python 3 установлен по умолчанию, но это может быть более старая версия, чем нам нужно. Инструкции по установке могут различаться в зависимости от того, какой дистрибутив Linux вы используете. Установить новейшую версию Python можно с помощью диспетчера пакетов.
Как читать эту книгу
Если вы прочитаете эту книгу от корки до корки за один присест, то мало чему научитесь. Это все равно что пытаться научиться играть на фортепиано, пригласив домой пианиста и посмотрев на него часик-другой, а затем выгнать его, радостно напевая песенку. Практические навыки так не усваиваются.
Я расскажу, как стоит читать эту книгу.
• Распределите работу равномерно. Усваивать информацию большими порциями гораздо менее эффективно, чем разбив работу на маленькие фрагменты. Как только почувствуете усталость, сделайте перерыв. Никто не сможет сказать вам, сколько времени нужно работать до перерыва. И точно так же никто не может предугадать, сколько времени потребуется на изучение всей книги. Это зависит от ваших возможностей.
• Делайте паузы, чтобы проверить, все ли вы поняли. Читая что-то новое, мы часто думаем, что поняли новый материал лучше, чем это есть на самом деле. Приходится тратить время на согласование того, что мы знаем и что мы думаем, что знаем. Именно поэтому я добавил к ключевым моментам каждой главы парочку вопросов с несколькими вариантами ответов, которые помогут вам понять, что к чему. Отнеситесь к ним серьезно! Прочтите каждый вопрос и дайте ответ, не проверяя ответы на компьютере. Затем прочтите мой ответ и пояснение к нему. Это позволит убедиться, что вы на правильном пути. Если же ответили неправильно или ответили правильно, но по неправильной причине, устраните пробелы в знаниях, прежде чем двинуться дальше. Возможно, вам придется еще поупражняться с соответствующей функцией Python или перечитать материал из книги, поискать в Интернете дополнительную информацию или примеры.
• Практикуйтесь в программировании. Практика во время чтения поможет вам закрепить понимание ключевых моментов. Но вам нужно нечто большее, чтобы искусно решать задачи и стать программистом. Вам нужно попрактиковаться в использовании Python для решения задач, которых в этой книге не будет, которые окажутся новыми и незнакомыми. В конце каждой главы приведен список практических упражнений. Постарайтесь выполнить как можно больше.
Чтобы научиться программировать, требуется время. Не расстраивайтесь, если вы будете двигаться слишком медленно или станете делать слишком много ошибок. И не пугайтесь напыщенных павлинов, которых немало в Интернете. Лучше побольше общайтесь с людьми, которые могут вам помочь.
Сайты с задачами для программистов
За основу для этой книги я взял задачи из онлайн-задачников для программистов. На таких сайтах есть репозитории задач по программированию, которые решают любители со всего мира. Вы можете отправить туда свое решение в виде кода Python — и сайт протестирует его. Если код даст правильный ответ для всех тестов, то, скорее всего, ваше решение правильное. Если же он дает неправильный ответ для одного или нескольких тестовых примеров, значит, его требуется доработать.
Есть ряд причин, по которым именно сайты с задачами для программистов нравятся мне больше других сайтов для обучения программированию.
• Быстрая обратная связь. Быстрая и целенаправленная обратная связь имеет решающее значение на ранних этапах обучения программированию. Ответ можно получить сразу же, как только вы отправите свой код.
• Качественные задачи. Я считаю, что задачи по программированию на таких сайтах действительно хороши. Одни использовались на различных соревнованиях по программированию. Другие написаны людьми, которые связаны с такими сайтами или просто хотят помочь всем желающим в обучении.
• Количество задач. В онлайн-задачнике вы найдете сотни задач. Для этой книги я отобрал лишь малую их часть. Если вам нужно побольше практики, поверьте, на таком сайте вы найдете все необходимое.
• Помощь сообщества. Сайт с задачами для программистов позволяет пользователям читать комментарии и отвечать на них. Если вы застряли на какой-то проблеме, просмотрите комментарии — и найдете в них подсказки, оставленные другими. Если это не помогает, можете написать собственный комментарий и попросить людей о помощи. Но даже после успешного решения задачи ваше обучение не заканчивается, ведь онлайн-задачник позволяет просматривать код, присланный другими. Изучите уже опубликованные материалы и сравните их со своим решением. Всегда есть несколько способов справиться с задачей. Возможно, поначалу вы будете принимать решения интуитивно, но позже вам откроются новые возможности. Общение — важный шаг в овладении программированием.
Создание учетной записи
По ходу книги мы будем пользоваться сразу несколькими сайтами с задачами для программистов. Все дело в том, что на каждом из них размещены уникальные задачи, которых нет на других сайтах, так что потребуется несколько онлайн-задачников, чтобы охватить все темы, которые я хотел бы осветить.
Далее приведены сайты, с которыми мы будем работать:
• DMOJ — https://dmoj.ca/;
• Timus — https://acm.timus.ru/;
• USACO (USA Computing Olympiad) — http://usaco.org/.
На каждом сайте вам нужно будет создать учетную запись, прежде чем вы сможете отправлять код. Поговорим о процессе создания учетной записи и больше узнаем о каждом из сайтов.
DMOJ
Сайтом DMOJ мы будем пользоваться по ходу книги чаще всего. Вам стоит уделить побольше времени его изучению и узнать о том, что на нем имеется.
Чтобы создать учетную запись на сайте DMOJ, перейдите по ссылке https://dmoj.ca/ и нажмите кнопку Signup. На странице регистрации введите свои имя пользователя, пароль и адрес электронной почты. Здесь же можете выбрать язык программирования по умолчанию. В этой книге мы будем применять исключительно язык программирования Python, поэтому выберите Python3. Нажмите Register!, чтобы завершить создание учетной записи. После регистрации вы сможете заходить на DMOJ с помощью своих имени пользователя и пароля.
Все задачи в книге начинаются с указания веб-сайта, на котором вы найдете саму задачу и код для доступа к ней. Например, первая задача, над которой мы будем работать в главе 1, находится на DMOJ и доступна по коду dmopc15c7p2. Чтобы найти ее в DMOJ, щелкните на кнопке Problems, введите код dmopc15c7p2 в поле поиска и нажмите Go. Перед вами появится соответствующая задача. Щелкнув на заголовке, вы должны увидеть саму задачу.
Когда будете готовы отправить свой код Python с решением, найдите задачу и щелкните на кнопке Submitsolution. На открывшейся странице вставьте код в текстовое поле и нажмите Submit!. Он будет оценен, и вы увидите результаты.
Timus
Чтобы создать учетную запись на сайте Timus, перейдите по ссылке https://acm.timus.ru/ и нажмите кнопку Register. На открывшейся странице регистрации введите свои имя, пароль, адрес электронной почты и прочую запрашиваемую информацию. Нажмите кнопку Register, чтобы создать учетную запись. Затем проверьте свою электронную почту на наличие сообщения от Timus со своим уникальным идентификатором. При отправке кода Python он вам понадобится.
На этом сайте пока нет возможности установить язык программирования по умолчанию, поэтому при каждой отправке кода обязательно выбирайте доступную версию Python 3.
С сайтом Timus мы будем работать лишь один раз, в главе 6, поэтому пока что разговор о нем отложим.
USACO
Чтобы создать учетную запись на сайте USACO, перейдите по ссылке http://usaco.org/ и нажмите на кнопку RegisterforNewAccount. На открывшейся странице регистрации введите свои имя пользователя, адрес электронной почты и прочую информацию. Нажмите кнопку Submit, чтобы создать учетную запись. Затем проверьте свою электронную почту на наличие сообщения от USACO, содержащего пароль. Получив его, вы можете заходить на USACO с помощью своих имени пользователя и пароля.
На этом сайте пока нет возможности установить язык программирования по умолчанию, поэтому при каждой отправке кода обязательно указывайте доступную версию Python 3. Вам также нужно будет выбрать файл с кодом Python, а не вставлять сам код в текстовое поле.
Мы не будем использовать сайт USACO до главы 7, поэтому пока что отложим разговор о нем.
Об этой книге
Все главы книги построены вокруг двух-трех задач с одного из сайтов с задачами для программистов. Фактически глава будет начинаться с постановки первой задачи, и уже после этого вы начнете изучать Python! Моя цель — побудить вас изучить функции Python, необходимые для решения задачи. Не беспокойтесь, если решение задачи не придет вам в голову сразу после прочтения ее описания (ведь если вы еще не можете решить задачу, значит, читаете нужную книгу!). Если же понимаете, что нужно делать, чтобы ее решить, то все отлично. Мы будем изучать Python и вместе решать задачи. Следующие задачи будут нацелены на использование дополнительных возможностей Python или закрепление и расширение того, что вы узнали в первой задаче. Каждая глава завершается упражнениями, которые вы должны будете выполнить самостоятельно, чтобы попрактиковаться в применении вновь обретенных навыков.
Приведу краткое описание каждой главы.
• Глава 1. Приступим к работе. Существует немало вводных понятий, которые нужно будет изучить, прежде чем вы сможете решать какие-либо задачи с помощью Python. В этой главе мы рассмотрим их, начиная с написания простейшего кода Python, затем перейдем к работе со строками и числами, использованию переменных, чтению ввода и записи вывода.
• Глава 2. Принятие решений. В этой главе вы узнаете об операторе if, который позволяет программе решать, что делать, в зависимости от истинности или ложности того или иного условия.
• Глава 3. Повторяющийся код: определенные циклы. Многие программы работают некоторое время, пока не закончатся входные данные. В этой главе мы изучим цикл for, который позволяет программам обрабатывать входные данные, пока работа не будет выполнена.
• Глава 4. Повторяющийся код: неопределенные циклы. Иногда мы не знаем заранее, сколько раз программа должна будет выполнить некоторые действия. Циклы for для такого рода задач не подходят. В этой главе мы поговорим о цикле while, который повторяет код, пока выполняется определенное условие.
• Глава 5. Упорядоченные значения и списки. Списки в Python позволяют использовать одно имя и ссылаться с его помощью на целую последовательность данных. Списки помогают организовать данные, в Python предусмотрены удобные операции обработки списков, такие как сортировка и поиск. В этой главе вы узнаете все о списках.
• Глава 6. Пишем собственные функции. Большая программа со значительным количеством кода без должной его организации может стать громоздкой. В этой главе вы узнаете о функциях, которые помогают разбивать программы на небольшие автономные фрагменты кода. Применение функций позволяет писать программы, которые намного легче читаются и редактируются. Мы также поговорим о нисходящем проектировании — подходе к разработке программ с функциями.
• Глава 7. Чтение из файлов и запись в них. Для передачи данных программам или сохранения результатов их работы удобно использовать файлы. В этой главе вы узнаете, как читать данные и записывать их в файлы.
• Глава 8. Организация данных с помощью множеств и словарей. Когда мы начинаем решать все более сложные задачи, важно правильно организовать хранение данных. В этой главе поговорим о двух новых инструментах для хранения данных в Python — множествах и словарях.
• Глава 9. Разработка алгоритмов полного поиска. Программисты не придумывают решение каждой задачи с нуля. Вместо этого они стараются тем или иным способом использовать общий шаблон решения — алгоритм. В этой главе вы узнаете об алгоритмах полного поиска, которые можно задействовать для решения широкого круга задач.
• Глава 10. «О большое» и эффективность программ. Иногда нам удается написать программу, которая выполняет задачу правильно, но слишком медленно, из-за чего оказывается бесполезной. В этой главе мы обсудим, как определить эффективность программ, и поговорим об инструментах, которые можно использовать для написания более эффективного кода.
От издательства
В книге приведены ссылки на англоязычные сайты-задачники. Вы можете работать с их переводами, воспользовавшись сайтом https://translate.yandex.ru/translate.
Например, задача по адресу https://dmoj.ca/problem/ccc06j1 на русском языке будет выглядеть так: https://translated.turbopages.org/proxy_u/en-ru.ru.c31992eb-62d7fa12-e0216655-74722d776562/https/dmoj.ca/problem/ccc06j1.
Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
1. Приступим к работе
Программирование — это написание кода для решения некоторой задачи. Этим мы и займемся. Поэтому не будем сначала изучать концепции Python, а затем формулировать задачи. Напротив, я сформулирую задачу, а уже на ее основе стану вводить концепции, которые нужно изучить.
В этой главе мы решим две задачи: определим количество слов в строке (этим же занимаются функции подсчета слов в текстовом редакторе) и вычислим объем конуса. Для этого вам придется познакомиться с несколькими концепциями Python. В какой-то момент вы можете почувствовать, что вам нужно больше подробностей, чтобы полностью понять приведенный материал и то, как все это сочетается друг с другом при разработке программы на Python. Не волнуйтесь: в следующих главах мы вернемся к наиболее важным понятиям и подробно остановимся на них.
Что мы будем делать
Как упоминалось во введении, мы будем решать задачи из области соревновательного программирования с использованием языка Python. Все представленные задачи по соревновательному программированию можно найти на одном из сайтов с задачами для программистов. Я предполагаю, что вы следовали инструкциям, приведенным во введении: установили Python и зарегистрировались на сайтах.
Мы напишем программы для решения всех приведенных задач. У каждой из них есть входные данные (ввод) определенного типа, которые программа будет получать, и ожидаемые выходные данные (вывод), тоже определенного типа. Будем считать, что программа правильно решает задачу, если может принимать любые допустимые входные данные и выдает в ответ правильные выходные данные.
В целом возможных входных данных могут быть миллионы или миллиарды. Каждый вариант входных данных называется экземпляром задачи. Например, в первой задаче, которую мы решим, входные данные — это строка текста, например hellothere или bbaabbbaaabab. Наша цель — подсчитать и вывести количество слов в строке. Одна из самых крутых вещей в программировании заключается в том, что зачастую небольшой объем универсального кода позволяет решить бесконечное количество типовых задач. И не имеет значения, будет в строке два слова, три или 50 — программа всегда будет делать это правильно.
Наши программы будут выполнять три задачи.
• Чтение входных данных. Необходимо определить конкретный экземпляр задачи, которую требуется решить, поэтому сначала мы считываем предоставленные входные данные.
• Обработка. Мы обрабатываем входные данные, чтобы определить правильные выходные данные.
• Запись вывода. Решив задачу, выдаем желаемый вывод.
Границы между шагами бывают размытыми — иногда нам, возможно, придется чередовать обработку с получением результата. Но все равно работа в целом делится на эти три этапа.
Вы, вероятно, ежедневно пользуетесь программами, работающими в соответствии с моделью «ввод — обработка — вывод». Рассмотрим программу-калькулятор: вы вводите формулу (входные данные), программа обрабатывает числа (обработка), а затем отображает ответ (выходные данные). Или вспомним о поисковых системах в Интернете: вы вводите поисковый запрос (входные данные), поисковая система определяет наиболее релевантные результаты (обработка) и отображает их (выходные данные).
Сравните приведенные примеры программ с интерактивными программами, которые также выполняют ввод, обработку и вывод. Например, для набора текста этой книги я использую текстовый редактор. Когда я набираю символ, редактор в ответ добавляет его в мой документ. И мне не нужно печатать сразу весь документ, чтобы увидеть результат, — редактор интерактивно отображает его по мере печатания. В этой книге мы не будем писать интерактивные программы, но если после изучения этой книги вы заинтересуетесь их созданием, то радуйтесь: Python определенно подходит для этого.
Тексты всех задач можно найти здесь и на сайте. Однако они не всегда совпадают, потому что я переписал их ради единообразия внутри книги. Но не волнуйтесь: в моих формулировках вы найдете ту же информацию, что и в официальной постановке задачи.
Оболочка Python
Для каждой задачи из книги мы хотим написать программу и сохранить ее в отдельном файле. Но для начала неплохо было бы знать, какую программу писать! Для решения многих задач вам нужно будет изучить пару новых функций Python.
Лучший способ поэкспериментировать с функциями Python — использовать оболочку Python. Это интерактивная среда, в которой можно ввести Python и нажать клавишу Enter, а Python в ответ выведет результат. Как только вы получите достаточно знаний, чтобы решить текущую задачу, можно будет перестать работать с оболочкой и начать писать решение в текстовом файле.
Для начала создайте на рабочем столе новую папку и назовите ее programming. Будем использовать ее для хранения результатов работы по ходу изучения книги.
Сейчас мы откроем эту папку и запустим оболочку Python. Чтобы запустить оболочку Python в своей операционной системе, выполните следующие действия.
Windows
Если вы работаете в Windows, сделайте следующее.
1. Удерживая нажатой клавишу Shift, щелкните правой кнопкой мыши на папке с вашими программами, например programming.
2. В появившемся меню выберите пункт OpenPowerShellwindowhere (Открыть окно PowerShell здесь). Если в контекстном меню нет такого пункта, выберите Opencommandwindowhere (Открыть окно команд здесь).
3. В появившемся окне вы увидите строку, которая заканчивается знаком «больше» (>). Это приглашение операционной системы, и теперь она ждет, когда вы наберете команду. Вводить здесь нужно именно команды операционной системы, а не код Python. Обязательно нажимайте клавишу Enter после каждой команды.
4. Вы находитесь в папке programming. Можете ввести команду dir (от англ. directory — «папка»), если хотите посмотреть содержимое папки. Впрочем, пока вы не увидите никаких файлов, потому что мы их еще не создавали.
5. Введите команду python для запуска оболочки Python.
Запустив оболочку Python, вы увидите что-то вроде этого:
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:30:23)
[MSC v.1928 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Здесь важно, чтобы в первой строке была указана версия Python не ниже 3.6. Если у вас установлена более старая версия, особенно 2.x, или Python не загружается вообще, установите последнюю версию Python, следуя инструкциям, приведенным во введении.
Внизу этого окна вы увидите приглашение вида >>>. Здесь мы будем писать код Python. Никогда не вводите символы >>> сами. Закончив писать программу, вы можете нажать сочетание клавиш Сtrl+Z, а затем Enter, чтобы выйти.
macOS
В macOS сделайте следующее.
1. Откройте приложение Terminal. Для этого нажмите сочетание клавиш Command+Пробел, введите слово terminal, а затем дважды щелкните на результате.
2. В открывшемся окне вы увидите строку, оканчивающуюся символом доллара ($). Это приглашение операционной системы, теперь можете ввести команду. Здесь вводятся именно команды операционной системы, а не код Python. Обязательно нажимайте клавишу Enter после каждой команды.
3. Можете ввести команду ls, чтобы получить список файлов, находящихся в текущей папке. Вы увидите свой рабочий стол.
4. Введите команду cdDesktop, чтобы перейти в папку рабочего стола. Команда cd означает change directory, то есть «перейти в другую папку».
5. Введите команду cdprogramming, чтобы перейти в папку programming.
6. Теперь введите команду python3, чтобы запустить оболочку Python (можно попробовать ввести просто python, но в результате может запуститься старая версия Python 2, которая не подходит для работы с этой книгой).
Когда вы запустите оболочку Python, появится что-то вроде этого:
Python 3.9.2 (default, Mar 15 2021, 17:23:44)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Здесь важно, что в первой строке указана версия Python не ниже 3.6. Если у вас более старая версия, особенно 2.x, или Python не загружается вообще, установите последнюю версию Python, следуя инструкциям, данным во введении.
Внизу этого окна увидите приглашение >>>. Здесь вы набираете код Python. Никогда не вводите символы >>> самостоятельно. Если закончили программирование, можете нажать сочетание клавиш Ctrl+D, чтобы выйти.
Linux
Порядок действий для Linux таков.
1. Щелкните правой кнопкой мыши на папке programming.
2. В появившемся меню выберите пункт OpeninTerminal (Открыть в терминале) (а можно сначала открыть консоль и перейти в папку programming, если вам так удобнее).
3. В открывшемся окне вы увидите строку, оканчивающуюся символом доллара ($). Это приглашение операционной системы, теперь можете ввести команду. Здесь вводятся именно команды операционной системы, а не код Python. Обязательно нажимайте клавишу Enter после каждой команды.
4. Вы находитесь в папке programming. Можете ввести команду ls, чтобы просмотреть ее содержимое. Но пока никаких файлов в ней быть не должно, потому что мы их еще не создавали.
5. Теперь введите команду python3, чтобы запустить оболочку Python (можно попробовать ввести просто python, но в результате может запуститься старая версия Python 2, которая не подходит для работы с этой книгой).
Когда вы запустите оболочку Python, появится что-то вроде этого:
Python 3.9.2 (default, Feb 20 2021, 20:57:50)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Важно, чтобы версия Python в первой строке была не ниже 3.6. Если у вас более старая версия, особенно 2.x, или Python не загружается вообще, установите последнюю версию Python, следуя инструкциям, приведенным во введении.
Внизу этого окна вы увидите приглашение Python вида >>>. Здесь мы будем писать код Python. Никогда не вводите символы >>> сами. Закончив писать программу, можете нажать сочетание клавиш Сtrl+D, чтобы выйти.
Задача 1. Количество слов
Пришло время для нашей первой задачи! На Python напишем небольшую программу для подсчета слов. Вы узнаете, как считывать входные данные пользователя, обрабатывать их для решения задачи и выводить результат. А также узнаете, как управлять текстом и числами в своих программах, использовать встроенные операции Python и сохранять промежуточные результаты на пути к решению.
Это задача с сайта DMOJ, код dmopc15c7p2.
Постановка задачи
Подсчитайте количество слов во входных данных. В этой задаче словом будет считаться любая последовательность строчных букв. Например, «привет» — это слово, но и всякие бессвязные наборы букв вроде «ыфафыва» тоже считаются словами.
Входные данные
Входными данными будет одна строка текста, состоящая из строчных букв и пробелов. Между каждой парой слов будет ровно один пробел, при этом перед первым словом и после последнего слова их не будет.
Максимальная длина строки — 80 символов.
Выходные данные
Количество слов в строке.
Строки
Фундаментальным строительным блоком программ на Python являются значения. У каждого значения есть тип, определяющий операции, которые над ним можно проводить. В задаче подсчета слов мы работаем со строкой текста. В Python текст хранится как строковое значение, поэтому нам нужно побольше узнать о том, что это значит. Чтобы решить задачу, требуется узнать количество слов в тексте, а для обозначения количества следует узнать о числовых значениях. Начнем со строк.
Представление строк
Строка — это тип в Python, который используется для работы с текстом. Чтобы записать строковое значение, нужно поместить его в одинарные кавычки. В оболочке Python введите следующее:
>>> 'hello'
'hello'
>>> 'a bunch of words'
'a bunch of words'
Оболочка Python повторяет за мной все, что я ввел.
А что, если в строке будет одинарная кавычка как ее часть?
>>> 'don't say that'
File "<stdin>", line 1
'don't say that'
^
SyntaxError: invalid syntax
Одиночная кавычка в слове don't завершает строку. Остальная часть уже не войдет в строку, поэтому наш ввод вызывает синтаксическую ошибку. Синтаксическая ошибка означает, что мы нарушили правила Python и написали неправильный код Python.
Чтобы исправить положение, можем воспользоваться двойными кавычками, которые тоже подходят для разделения строк:
>>> "don't say that"
"don't say that"
Но если в рассматриваемой строке нет одинарных кавычек, то применять двойные кавычки без причины я не буду.
Строковые операторы
Именно строки подойдут для хранения текста, количество слов в котором мы хотим подсчитать. Чтобы считать слова или вообще что-либо делать со строками, придется научиться работать с ними.
Над строками можно выполнять множество операций. Для некоторых из них используются специальные символы, вставляемые между операндами. Например, оператор + служит для конкатенации строк:
>>> 'hello' + 'there'
'hellothere'
Ах да, нам же нужен пробел между словами. Добавим его в конец первой строки:
>>> 'hello ' + 'there'
'hello there'
А еще есть оператор *, который размножает строку на указанное количество раз:
>>> '-' * 30
'------------------------------'
Здесь 30 — это целое число. О числах подробнее поговорим в ближайшее время.
Проверим знания
Что выведет следующий код?
>>> '' * 3
А.''''''
Б.''
В. Этот код вызывает синтаксическую ошибку (недопустимый код Python).
Ответ: Б. '' — это пустая строка — строка без символов. Трехкратное повторение пустой строки остается пустой строкой!
Строковые методы
Метод — это операция, выполняемая над определенным типом значений. У строк, в частности, много методов. Например, есть метод с именем upper, который превращает все буквы строки в прописные:
>>> 'hello'.upper()
'HELLO'
Информация, которую мы получаем от метода, называется возвращаемым значениемметода. Например, в предыдущем примере мы могли бы сказать, что метод upper вернул строку 'HELLO'.
Выполнение метода над значением называется вызовом метода. Вызывается он с помощью точечной нотации (.) между значением и именем метода. Также нужно после имени метода указать круглые скобки. У некоторых методов, например у upper, эти скобки остаются пустыми.
А для некоторых методов можно передать в скобках информацию. Остальные методы требуют информации и без нее просто не работают. Информация, которую мы включаем при вызове метода, называется его аргументами.
Например, у строк есть метод strip. Если вызывать его без аргументов, он удаляет из строки все начальные и конечные пробелы:
>>> ' abc'.strip()
'abc'
>>> ' abc '.strip()
'abc'
>>> 'abc'.strip()
'abc'
Но мы также можем передать ему в качестве аргумента строку. Если сделать это, аргумент скажет методу, какие именно символы нужно удалить слева и справа:
>>> 'abc'.strip('a')
'bc'
>>> 'abca'.strip('a')
'bc'
>>> 'abca'.strip('ac')
'b'
Поговорим еще об одном строковом методе — count. Мы передаем ему строковый аргумент, и он сообщает, сколько вхождений этого аргумента найдено в строке:
>>> 'abc'.count('a')
1
>>> 'abc'.count('q')
0
>>> 'aaabcaa'.count('a')
5
>>> 'aaabcaa'.count('ab')
1
Если вхождения строки-аргумента перекрываются, учитывается только первое:
>>> 'ababa'.count('aba')
1
В отличие от прочих методов, которые я описал, метод count пригодится для поставленной задачи с подсчетом слов.
Сами подумайте: строка состоит из нескольких слов. Обратите внимание на то, что после каждого слова стоит пробел. Фактически, если бы вам нужно было подсчитать количество слов вручную, пробелы могли бы подсказать, где заканчивается каждое слово. А что, если мы посчитаем количество пробелов в строке? Для этого можем передать методу count символ пробела. Это выглядит так:
>>> 'this is a string with a few words'.count(' ')
7
Мы получили значение 7. Это не соответствует количеству слов, ведь их в строке восемь, но значение близко. Почему мы получили 7 вместо 8?
Причина в том, что пробел стоит после каждого слова, кроме последнего. Это значит, что при подсчете пробелов не учитывается последнее слово. Чтобы внести поправки, нам нужно научиться обращаться с числами.
Целые числа и числа с плавающей точкой
Любое выражение состоит из значений и операторов. Рассмотрим, как писать числовые значения и комбинировать их с операторами.
В Python есть два разных типа для работы с числами: целые числа (без дробной части) и числа с плавающей точкой (с дробной частью).
Целочисленные значения пишутся без десятичной точки. Вот несколько примеров:
>>> 30
30
>>> 7
7
>>> 1000000
1000000
>>> -9
-9
Значение само по себе — простейший вид выражения.
Привычные нам математические операторы позволяют работать с целыми числами. Оператор + выполняет сложение, - — вычитание, * — умножение. С их помощью можно писать более сложные выражения.
>>> 8 + 10
18
>>> 8 - 10
-2
>>> 8 * 10
80
Обратите внимание на пробелы вокруг операторов. Хотя для Python выражения 8+10 и 8+10 одинаковы, написание с пробелами упрощает чтение.
В Python есть два оператора деления! Оператор // выполняет целочисленное деление, при котором остаток отбрасывается, а результат округляется вниз:
>>> 8 // 2
4
