Вы находитесь на странице: 1из 226

ИЛЛЮ СТРИРОВАННОЕ РУКОВОДСТВО ДЛЯ ДЕТЕЙ

Перевод с английского
Станислава Ломакина

Москва
«Манн, Иванов и Фербер»
2018
УДК 087.5:004.43 Penguin
ББК 39.973.26-018.1 Random
П78 House

Издано с разрешения Dorling Kindersley Limited


На русском языке публикуется впервые
Возрастная маркировка в соответствии с Федеральным законом №436-ФЗ: 0+

А вторы : Кэрол Вордерман, Крэйг Стили, Клэр Квигли, Мартин Гудфеллоу,


Дэниел Маккафферти, Джон Вудкок

Программирование на Python : иллюстрированное руководство для детей / К. Вордерман, К. Стили,


П78 К. Квигли, М. Гудфеллоу, Д. Маккафферти, Дж. Вудкок; пер. с англ. С. Ломакина. — М .: Манн, Иванов
и Фербер, 2018. — 224 с .: ил.

ISBN 978-5-00117-399-1

В этой книге собраны 16 проектов с пошаговыми инструкциями, примерами кодов, блок-схемами


и забавными сюжетными иллюстрациями. Следуя подробным указаниям, ребенок освоит базовые
принципы программирования на одном из самых популярных компьютерных языков — Python,
создаст программы и игры на внимание и быстроту реакции, в которые сам же потом и поиграет.
Программы можно дорабатывать и изменять. Эта тренировка подарит уверенность в своих силах
и стимул создавать собственные уникальные проекты.
Для детей от 10 лет и взрослых, которые делают первые шаги в программировании.
УДК 087.5:004.43
ББК 39.973.26-018.1

Издание для досуга Все права защищены.


Для широкого круга читателей Никакая часть данной книги
не может быть воспроизведена
Кэрол Вордерман и др.
в какой бы то ни было форме
ПРОГРАММИРОВАНИЕ НА PYTHON без письменного разрешения
Иллюстрированное руководство для детей владельцев авторских прав.

Главный редактор Артем Степанов Оригинальное название:


Руководитель направления Анастасия Троян Computer Coding Python Projects for Kids
Ответственный редактор Анна Шахова © 2017 Dorling Kindersley Limited
Научный редактор Георгий Гаджиев A Penguin Random House Company
Верстка обложки Елизавета Краснова © Издание на русском языке, перевод.
Верстка Дмитрий Колесников «Манн, Иванов и Фербер», 2018
Корректоры Елена Бреге, Олег Пономарев,
Дарья Балтрушайтис Подписано в печать 08.02.2018.
Формат 84 х 108/16. Гарнитуры Myriad,
ООО «Манн, Иванов и Фербер»
Andale Mono. Бумага мелованная.
www.mann-ivanov-ferber.ru
Печать офсетная. Уел. печ. л. 23,52.
www.facebook.com/mifdetstvo
Тираж 5000 экз.
www.vk.com/mifdetstvo
www.instagram.com/mifdetstvo Отпечатано вТВВ, a. s., Словакия.

ISBN 978-5-00117-399-1
КЭРОЛ ВОРДЕРМАН — одна из самых популярных британских телеведущих,
известная своими познаниями в математике, кавалер ордена Британской
империи. Вела телешоу, посвященные науке и технике, такие как Tomorrow's
World и How 2. На протяжении 26 лет была соведущей интеллектуальной
математической телеигры Countdown. Кэрол — выпускница Кембриджа,
она страстно увлекается популяризацией науки и программирования.

КРЭЙГ СТИЛИ — учитель информатики и проект-менеджер в CoderDojo


Scotland — сети бесплатных секций по программированию для молодежи.
Ранее Крэйг работал в Raspberry Pi Foundation, в Научном центре Глазго,
а также участвовал в проекте телеканала ВВС micro:bit. Первым компьютером
Крэйга был ZX Spectrum.

КЛЭР КВИГЛИ — изучала информатику в Университете Глазго, получила


степени бакалавра и доктора наук. Работала в компьютерной лаборатории
Кембриджского университета и в Научном центре Глазго, сейчас занята
в проекте по созданию музыкального и технологического порталов
для начальных классов школ Эдинбурга. Наставник в CoderDojo Scotland.

МАРТИН ГУДФЕЛЛОУ — имеет докторскую степень по информатике


и опыт обучения программированию вплоть до университетского уровня.
Разрабатывал обучающее ПО для CoderDojo Scotland, Skills Development
Scotland, Glasgow Life и Highlands and Islands Enterprises, консультировал
телеканал ВВС по вопросам работы с цифровыми данными.

ДЭНИЕЛ МАККАФФЕРТИ — окончил Университет Стратклайда по специальности


«Информатика». Разрабатывал ПО для больших и малых компаний из разных сфер,
от банковского дела до телевидения. Дэниел живет в Глазго, обучает детей
программированию, а свободное время посвящает семье и велопрогулкам.

ДЖОН ВУДКОК — изучал физику в Оксфордском университете и вычисли­


тельную астрофизику в Лондонском университете. Начал программировать
в восемь лет, работал на самых разных компьютерах: от одночиповых микро­
контроллеров до суперкомпьютеров мирового класса. Джон — соавтор
бестселлера «Программирование для детей» и других книг издательства DK.
Содержание
8 ВВЕДЕНИЕ

ЗНАКОМСТВО С PYTHON

12 Программирование

14 Знакомься: Python

16 Установка Python

18 Работа с IDLE
ЧЕРЕПАШЬЯ ГРАФИКА

72 «Сборщик роботов»

82 «Радуга-пружинка»
ПЕРВЫЕ ШАГИ 90 «Звездное небо»

22 Первая программа 98 «Безумная радуга»

24 Переменные

28 Принятие решений

32 Циклы

36 Тест «Животные»
ЗАБАВНЫЕ
ПРОГРАММЫ
44 Функции

48 Исправление ошибок 110 «Календарь ожидания»

52 «Генератор паролей» 120 «Знаток»

58 Модули 130 «Тайная переписка»

60 «Девять жизней» 142 «Экранный питомец»


ИГРЫ НА PYTHON

158 «Гусеница»

168 «Снэп»

180 «Мемори»

190 «Яйцелов»

СПРАВОЧНЫЕ

МАТЕРИАЛЫ

202 Коды проектов

220 Глоссарий

222 Предметный указатель


Введение

Мы живем в цифровом мире, в котором от компьютеров никуда не скрыться.


Не так давно эти машины были громоздкими и шумными, теперь же это тихие
компактные устройства, которые работают в автомобилях, телевизорах,
телефонах и даже часах. Они помогают нам трудиться, читать, играть,
смотреть фильмы, совершать покупки, общаться с родными и друзьями.

Современные компьютеры настолько просты в управлении, что пользоваться


ими может каждый. Однако написать компьютерную программу способны
далеко не все. Начав программировать, ты узнаешь принцип работы
компьютера, а немного попрактиковавшись, сможешь создавать собственные
приложения и игры, а также дорабатывать чужие программы.

Программирование — это не только увлекательное хобби, но и навык,


востребованный сейчас во многих областях жизни: науке, искусстве, спорте
и бизнесе.

В мире существуют сотни разных языков программирования — от простых


графических вроде Scratch до веб-языков, таких как JavaScript. Эта книга —
про Python, один из самых популярных компьютерных языков. При всей его
мощности и гибкости Python легко изучить, поэтому его любят и профессионалы,
и новички. Если ты только начинаешь программировать или уже знаком с другим
языком, в любом случае решение освоить Python — отличная идея!
Лучший способ научиться программировать — сразу приступить к делу. Следуя
пошаговым инструкциям из этой книги, ты сможешь создать приложения и игры.
Учиться проще, когда тебе нравится результат, вот почему мы постарались сделать
проекты как можно более интересными.

Если ты новичок в программировании, начни с первого проекта и постепенно


продвигайся вперед. Не волнуйся, если что-то не понимаешь до конца:
чем больше ты напишешь кодов, тем лучше все усвоишь. И не переживай,
если программа не заработает сразу, — ошибки делают даже профессионалы.

В конце описания каждого проекта есть список советов по доработке программы.


Не бойся воплощать в жизнь и собственные идеи. Возможности программиста
безграничны — нужно лишь немного знаний и воображения!

КЭРОЛ ВОРДЕРМАН
Знакомство
с Python
Программирование
Программист — это человек, составляющий
инструкции для компьютеров. Он может придумать
такую программу, которая будет сама писать
музыку, или управлять домашним роботом,
или отправлять на Марс космические корабли.

Глупые я щ и к и Дрессированный зверек


Компьютер — это всего лишь железный ящик. Освоив язык программирования,
ты сможешь создавать программы
Он не знает, что делать, если ему не объяснить.
для компьютера, а он будет их выпол­
Поскольку компьютеры не умеют думать, программистам нять — словно электронный зверек,
приходится делать это за них, а затем писать подробные которого ты обучил разным трюкам!
инструкции — программы.

Я зы ки п р о г р а м м и р о в а н и я
Чтобы посылать компьютеру команды, нужно
освоить какой-нибудь язык программирования.
Визуальные языки хороши для новичков,
а профессионалы используют текстовые языки.
В этой книге мы расскажем о Python — популярном
текстовом языке программирования.

Scratch Python
Scratch — это визуальный язык программирования. Он подходит Python — это текстовый язык программи­
для создания игр, мультфильмов и интерактивных мультимедийных рования. Программы на Python состоят
проектов. Код на Scratch составляют из разноцветных командных из слов, букв, чисел и других символов.
блоков. Чтобы ввести код, программисты набирают
его на клавиатуре.

Оба этих кода >>> 3 + 3


делают одно и то же.
6

Результат работы Чтобы увидеть результат, нужно,


программы — находясь в окне консоли, нажать
это появившееся ENTER.
на экране «облачко»
с цифрой 6.
П р о гр а м м и р о в а ть м о ж е т к а ж д ы й
Чтобы стать программистом, изучи основные правила
и команды и начинай создавать программы, которые
интересны лично тебе. Если увлекаешься наукой,
напиши программу, рисующую графики по итогам
твоих экспериментов. А если у тебя хороший вкус,
создай волшебный мир для собственной видеоигры.

Больше логики Внимание к деталям


Чтобы писать хорошие программы, программист Если ты легко находишь отличия на похожих
должен мыслить ясно и рассуждать логически. картинках, у тебя есть все шансы стать отличным
Если инструкции расплывчаты, программа будет программистом. Умение находить в коде баги очень
работать неверно. Обдумывай каждое действие важно, ведь даже малюсенькой ошибки достаточно,
и следи за верной последовательностью команд: чтобы нарушить работу всей программы. Зоркие
ты ведь не надеваешь трусы на брюки! программисты неустанно высматривают в кодах
опечатки и логические ошибки. Порой это нелегко,
но учиться на своих ошибках — верный способ
прокачать профессиональные навыки.

СЛЕНГ
Баги
Н ачни п р о гр а м м и р о в а ть
Багами называют ошибки в коде, Программирование может показаться
из-за которых программы работают
непростым делом, но учиться программи­
неверно. Слово bug переводится как «жук».
Дело в том, что первые компьютеры порой ровать легко — надо лишь начать. Эта книга
сбоили из-за насекомых, застрявших предлагает тебе попробовать свои силы
между контактами. в несложных проектах. Приступай к созда­
нию игр и приложений прямо сейчас!
Знакомься: Python СЛЕНГ
О тк уд а н а зв а н и е ?
Python — один из самых популярных Python был назван вовсе не в честь
языков программирования. Появился питона, а в честь британской комик-
он в 1990-х годах, а сейчас на нем работают группы «Монти Пайтон». Создатель
языка Гвидо ван Россум — ее большой
миллионы приложений, игр и веб-сайтов. поклонник. Python-программисты
часто отдают этому должное
и включают в код шутки и цитаты
П о ч е м у P y th o n ? из телепередачи «Летающий цирк
Python отлично подходит для знакомства Монти Пайтона».
с программированием. Его изучают во многих
школах и университетах. Вот несколько причин
его популярности. Батарейки в комплекте
«Батарейки в комплекте» — говорят
программисты про Python, потому что
вместе с языком в установочных файлах
имеется все необходимое, чтобы сразу
приступить к программированию.

Легко читать, легко писать


Python — текстовый язык программирования.
Его инструкции состоят из английских и русских
слов, знаков препинания, символов и чисел.
Поэтому программы на Python легко читать,
писать и понимать.

Удобные инструменты
Python укомплектован множеством полезных
инструментов и готовых фрагментов кода,
вместе составляющих стандартную библиотеку.
С ее помощью писать программы гораздо проще.

Отличная поддержка
Работает везде Python отлично докумен­
Код на Python является переносимым: его можно тирован. Документация
писать и запускать на самых разных компьютерах. включает руководство
Один и тот же код подходит для операционных для начинающих, справоч­
систем Windows, macOS, Linux и даже Raspberry ный раздел и множество
Pi: он везде работает одинаково. примеров кода.
P y th o n в д е й с т в и и СОВЕТЫ ЭКСПЕРТА
Python применяют для решения Интерпретатор
множества интересных задач в области
бизнеса, науки и техники. Например, Многие языки программирования используют
интерпретатор — специальную программу,
с помощью программ, написанных
переводящую команды одного языка на другой.
на Python, можно управлять освеще­ При каждом запуске Python-программы интерпре­
нием и температурой в доме. татор строка за строкой превращает ее в особый,
понятный компьютеру машинный код.

Python и интернет
Python широко используется в сети
Интернет. На нем написаны части
поискового движка Google. YouTube
по большей части тоже работает
на Python.

Чудеса медицины
На Python пишут программы для роботов,
выполняющих сложные хирургические операции.
Робот-хирург может работать быстрее и точнее
Серьезный бизнес человека, при этом вероятность, что он допустит
Python помогает банкам следить за средствами ошибку, меньше.
на счетах вкладчиков, а сетевым магазинам —
устанавливать цены на товары.

На большом экране
На студии Disney Python помогает автоматизировать
Другие миры шаблонные задачи. Вместо того чтобы снова и снова
В Центре управления полетами NASA Python- рисовать однотипные кадры, аниматоры поручают
программы помогают космонавтам готовиться такую работу программе. Это значительно сокращает
к полетам и отслеживать ход экспедиций. время работы над мультфильмом.
Установка Python IDLE
СЛЕНГ

Для всех проектов в этой книге требуется IDLE — это бесплатная среда
Python 3. Скачай эту версию программы разработки, предназначенная
и следуй инструкциям, подходящим для для начинающих программистов.
Она устанавливается вместе
операционной системы твоего компьютера. с Python и включает в себя
простой текстовый редактор
для ввода и редактирования
P y t h o n д л я W in d o w s команд.
Прежде чем устанавливать Python 3 для Windows, узнай,
32-битная или 64-битная у тебя система. Кликни «Пуск»,
правой кнопкой мыши кликни «Компьютер» и выбери
«Свойства». Выбери «Система», если такая опция появится.

Перейди на сайт Python Скачай Python


Перейди на сайт Python по ссылке, указанной Кликни по самой свежей версии Python для
ниже. Кликни Downloads («Скачать»), чтобы Windows, номер которой начинается с цифры 3.
перейти на страницу скачивания. Запустится скачивание. Из разных форматов
инсталлятора выбери executable installer.

https://www.python.org/ Python 3.6.4 — 2017-12-19


Windows х86 executable installer
Windows x86-64 executable installer

Запусти инсталлятор
Сделай двойной клик по значку инсталлятора. Если у тебя 32-битная Если у тебя 64-битная
Выбери «Установить для всех пользователей», версия Windows, выбери версия Windows, выбери
кликни «Далее», не меняя настроек по умолчанию. этот инсталлятор. этот инсталлятор.

Кликни дважды Открой IDLE


по файлу
инсталлятора. Когда установка завершится, запусти программу
IDLE. Открой меню «Пуск», выбери «Все
программы» и кликни IDLE. Должно открыться
диалоговое окно, похожее на это.
P y th o n д л я M a c O S
Прежде чем устанавливать Python 3 на «Мак»,
узнай версию своей операционной системы.
Кликни по иконке с яблоком в левом верхнем
углу экрана и выбери пункт меню About this Mac.

Перейди на сайт Python Скачай Python


Перейди на сайт Python по ссылке, указанной Кликни по самой свежей версии Python 3,
ниже. Кликни Downloads («Скачать»), чтобы подходящей для операционной системы
попасть на страницу скачивания. macOS. Скачивание файла Python.pkg
начнется автоматически.
https://www.python.org/

Python 3.6.4 — 2017-12-19


Download macOS X 64 bit/32 bit installer
Установи Python
В папке Downloads ты найдешь файл с расширением
Номер версии может отличаться
.pkg и иконкой в виде открытой коробки, — сделай
от этого. Главное — убедиться,
по ней двойной клик. На все запросы жми «Продолжить»,
что он начинается с цифры 3.
затем кликни «Установить».

Кликни дважды, чтобы начать ВАЖНО!


установку Python 3.
Спроси разрешение
Никогда не устанавливай Python
или любые другие программы
без разрешения хозяина компьютера.
Открой IDLE Возможно, в ходе установки тебе
Когда установка завершится, запусти программу IDLE.
потребуется также узнать у него
Открой папку Applications («Приложения»), а в ней — пароль администратора.
папку Python. Двойным кликом запусти IDLE. Должно
открыться диалоговое окно, как на картинке.
Работа с IDLE
В среде разработки IDLE есть два окна.
Окно программы подходит для создания
и редактирования программ, а окно консоли —
для мгновенной проверки работы кода.

О кно консоли V Работа в окне консоли


Код, который ты введешь, запустится сразу,
После запуска IDLE откроется окно консоли.
а любые сообщения, в том числе об ошибках,
Начинать знакомство с Python лучше с него: тут же появятся на экране. В окне консоли
так тебе не придется создавать новый файл, удобно тестировать части кода перед тем,
в окне консоли код можно вводить сразу. как добавить их в большую программу.

Это номер
версии Этот текст
Python. будет зависеть
от того, какая
у тебя опера­
ционная
Вводи код система.
после знака
приглашения
>>>

Попробуй поработать в окне консоли


СОВЕТЫ ЭКСПЕРТА Введи эти строки кода в окне консоли, нажимая после
каждой клавишу ENTER. Результатом выполнения
Разные окна первой команды будет сообщение, вторая выведет
на экран число. А что сделает третья строчка кода?
Чтобы тебе было легче отличать окно
консоли от окна программы, в книге они
>>> print('Мне 10 лет')
показаны разными цветами: голубым
и фиолетовым соответственно.

>>> 123 + 456 * 7 / 8


Окно консоли
Окно программы >>> join(reversed('Время программировать'))
О кно програм м ы Окно программы
Код не сохраняется в окне консоли. Стоит его закрыть, Чтобы открыть окно программы
и все, что ты ввел, пропадет навсегда. Поэтому создавать IDLE, кликни по меню File и выбери
программу следует в окне программы. Оно позволяет New File. Появится пустое окно
программы, которое ты будешь
сохранить код, а еще имеет встроенные инструменты,
использовать для написания
облегчающие написание программ и п о и ск ошибок. и запуска проектов из этой книги.

Вводи код здесь. В верхней части окна Этот пункт меню позволяет
Эта программа отображается имя файла. запустить программу.
выдает список Меню окна программы
чисел, помечая отличается от меню
каждое как четное окна консоли.
или нечетное.

Это команда
print — с ее по­
мощью результат
работы кода вы­
водится на экран.

СОВЕТЫ ЭКСПЕРТА

IDLE автоматически выделяет Символы и имена Ключевые слова


разные части кода опреде­ Большая часть кода Некоторые слова, такие
ленными цветами. В тексте черного цвета. как if и else, являются
программы, который так ключевыми словами языка
размечен, легче разобрать­ Python. Они отображаются
ся и найти возможные Вывод оранжевым.
опечатки. Текст, который программа
выводит на экран,
выделяется синим.
Текст в кавычках
Встроенные команды Ошибки Текст в кавычках выделяется
Встроенные команды Красный цвет преду­ зеленым. Зеленая скобка
Python, такие как print, преждает об ошибках рядом с текстом означает,
выделяются фиолетовым. в коде. что ты пропустил кавычку.
Первые
шаги
Первая программа
Ну вот, у тебя установлены Python и IDLE,
а значит, можно начинать программировать.
Выполни пошагово эти действия, чтобы создать
программу, выводящую на экран приветствие.

Запусти IDLE
К а к это р аб о тае т После запуска IDLE появится окно консоли.
Программа выведет на экран фразу «Привет, Зайди в меню File и выбери New File —
мир!», а затем спросит, как тебя зовут. После откроется пустое окно программы,
в котором можно вводить код.
ввода имени она снова поздоровается,
но уже обратится к тебе лично. Программа
запоминает имя с помощью переменной.
В программировании переменные служат
для хранения информации.

Блок-схема программы
«Привет, мир!»
При написании кода програм­
мисты используют особую
диаграмму — блок-схему.
Каждый шаг программы показан
на ней в виде блока со стрелкой, Введи первую строку
ведущей к следующему блоку. Введи строку кода, показанную ниже.
Если шаг соответствует вопросу, Слово print — это команда, которая
от него может идти несколько выводит на экран данные. В нашем
стрелок, означающих разные случае — фразу «Привет, мир!».
ответы.

p r i n t ( 'П ри вет, м и р ! ' )

Сохрани файл
Открой меню File и выбери Save
(«Сохранить»).
Заверши сохранение
СЛЕНГ
Появится диалоговое окно. Введи название файла на английском
helloworld.py («привет, мир») и кликни Save. файлы .ру
Имена Python-программ
обычно оканчиваются
на «.ру», чтобы их легче
Введи здесь было отличать от других.
название При сохранении кода IDLE
программы автоматически добавляет
на английском.
к имени «.ру», так что вводить
это расширение необязательно.

Проверь код
Запусти первую строку, чтобы
проверить, работает ли программа.
Для этого открой меню Run и выбери
Run Module («Запустить модуль»).
В окне консоли должно появиться
сообщение «Привет, мир!».

Исправь ошибки
СОВЕТЫ ЭКСПЕРТА
Если код не работает, сохраняй
спокойствие! Все программисты Горячие клавиши
допускают ошибки. Чтобы стать
настоящим профессионалом, нужно Запустить код в окне программы
уметь находить баги. Проверь свой можно, нажав клавишу F5. Так
код: не пропустил ли ты скобки? получится гораздо быстрее, чем
Правильно ли введена команда открывать меню Run и выбирать
print? Исправь ошибки и снова Run Module.
запусти программу.

Добавь еще строки


p r i n t ( 'Привет, м и р !')
Вернись в окно программы и добавь еще две строчки
кода. Вторая строка должна запрашивать имя person = in p u t('К а к тебя зовут? ')
пользователя и сохранять его в переменной. Третья p r i n t ( ' Привет, ' , person)
строка — показывать это имя при выводе на экран
нового приветствия. Вводить можно полное имя,
Эта строка запрашивает имя пользователя и сохраняет
краткое или даже прозвище! его в переменной person («пользователь»).

Последний шаг
Привет, мир!
Запусти программу в окне консоли. Введи свое имя
Как тебя зовут? Дима Имя
и нажми ENTER — должно появиться приветствие
пользователя.
с обращением. Ура, ты написал свою первую Python- Привет, Дима
программу! Продолжай в том же духе!
Переменные
Чтобы программа могла воспользоваться данными,
они должны где-то храниться. Для этого и существуют
переменные. Они нужны для самых разных действий:
от подсчета очков в игре до создания списков.

К ак со зд ать п ер ем ен н ую Ящик c данными


Переменная похожа на ящик
У переменной должно быть имя. Подумай, что в ней будет
с табличкой. Ты можешь
храниться и какое слово или словосочетание лучше всего положить в него данные
напомнит тебе об этом. Напиши имя латиницей, поставь и, когда они понадобятся,
знак «равно» и укажи данные, которые ты хочешь сохранить. найти их по названию ящика.
Это называется «присвоить значение переменной».
Это значение будет храниться
в переменной.

Присвой значение
>>> age = 12
Чтобы создать переменную age
(«возраст») и присвоить ей значение,
Имя переменной.
введи в окне консоли эту строку кода.

Выведи значение на экран


>>> p rin t(a g e )
Добавь эту строку кода. Нажми ENTER
и посмотри, что получится. 12

Значение переменной аде. Команда print() выводит на экран значение


переменной, указанной в скобках.

СОВЕТЫ ЭКСПЕРТ А
Имена переменных
Переменным нужно давать понятные Как можно и как нельзя
имена, чтобы программу было легче • Имя переменной должно начинаться с латинской буквы.
читать. Например, переменную для • Имя может состоять из цифр и латинских букв.
учета жизней игрока лучше назвать • Не используй символы вроде -, /, # или
lives_remaining («оставшиеся жизни»),
• Не ставь пробелы.
а не просто lives («жизни») или
сокращенно lr. Имена могут • Пробел можно заменить подчеркиванием ( _ ) .
содержать цифры, латинские буквы • Регистр букв имеет значение. Python будет считать Score
и знак подчеркивания, однако в начале и score двумя разными переменными.
всегда должна стоять буква. Следуй • Не называй переменные так же, как ключевые слова
этим правилам, и все будет в порядке. Python, например print.
СЛЕНГ
Целые и вещественные числа
В программировании используются два
типа чисел: целые и вещественные.
Вещественные числа — это десятичные
дроби, которые записываются через точку.
Целые числа хороши для подсчета чего- 0.5 овечки
либо, а вещественные — для измерений. 1 овечка (целое число) (вещественное число)

О перации с числам и Символ Значение


В переменных можно не только хранить числа, + сложить
но и производить с ними математические операции: - вычесть
складывать, вычитать, умножать, делить и т. д. * умножить
Обрати внимание: в Python математические / разделить

символы (называемые операторами) «плюс» Некоторые операторы


и «минус» имеют привычный вид, а «умножить» языка Python.
и «разделить» отличаются от используемых в школе.
Создай переменную х и присвой ей значение 6.

Реши пример
>>> х = 6
Введи этот код в окне консоли. В нем
используются две переменные: х хранит >>> у = х * 7
число, а у — произведение двух чисел. >>> p r in t ( y )
Нажми ENTER, чтобы получить ответ.
42

Выведи на экран Умножь значение х на 7


Результат вычисления. значение переменной у. и сохрани результат в у.

Измени значение переменной


>>> х = 10
Чтобы изменить значение переменной, нужно
ввести после знака «равно» другое число. >>> p r in t ( y )
Присвой переменной х значение 10 и снова 42
выведи на экран значение у с помощью
команды print(). Как ты думаешь, что получится?
Результат остался прежним.
Сейчас разберемся почему.
Обновляет значение у.

Обнови значение
>>> х = 10
Чтобы получить правильный ответ, значение
у нужно обновить. Для этого добавь в код >>> у = х * 7
эту строчку. Теперь после изменения х >>> p r in t ( y )
переменная у примет новое значение.
70
Р аб о та со с т р о к а м и
Строками программисты называют данные,
состоящие из букв, пробелов и других знаков.
Строки используются почти в каждой про­
грамме. Это могут быть слова, предложения
или просто набор символов — тех, которые Строка — это набор символов.

можно ввести с клавиатуры, и даже тех,


которые ввести нельзя.
Кавычки означают, что в переменной
хранится строка.

Строковые переменные
>>> name = 'инопланетянин Ино'
Строки можно хранить в переменных. Введи
этот код в окне консоли: он помещает строку >>> p r i n t ( name)
'инопланетянин Ино' в переменную name инопланетянин Ино
(«имя»), а затем выводит ее на экран. Строки
всегда нужно брать в кавычки — двойные
или одинарные. Нажми ENTER, чтобы
вывести строку на экран. Не забывай
про кавычки.

Склеивание строк
>>> name = 'инопланетянин Ино'
Значения переменных часто объединяют
для получения новых значений. Результат >>> g re e tin g = 'Привет, '
объединения (склейки) двух строк можно >>> message = g re e tin g + name
поместить в новую переменную. Попробуй
ввести в окне консоли этот код. >>> p rin t(m e ssag e)
Привет, инопланетянин Ино
СОВЕТЫ ЭКСПЕРТА
Знак + склеивает
Длина строки При выводе строки строки.
на экран кавычки
Для подсчета количества символов в строке не отображаются.
(включая пробелы) есть удобная команда
len() (сокр. от length — «длина»). По сути,
len() — это так называемая функция (ты
будешь часто пользоваться функциями,
работая над проектами из этой книги).
Чтобы узнать длину строки 'Привет,
инопланетянин Ино', введи этот код
после объявления переменной message
(«сообщение») и нажми ENTER.

>>> len(message)
25

Количество
символов в строке.
С пи ски
Сохранить сразу несколько данных (особенно
если важен их порядок) поможет список.
Каждому его элементу Python присваивает
номер, означающий позицию в списке.
Содержимое списка можно изменять как
угодно и когда угодно.

Не много ли переменных?
>>> rockets_player_l = 'Рома'
Представь, что ты пишешь программу
для многопользовательской игры и хочешь >>> rockets_player_2 = 'Игорь'
сохранить в ней имена игроков двух >>> rockets_player_3 = 'Алена'
команд. Можно создать для каждого
>>> planets_player_l = 'Миша'
имени по переменной, примерно так...
>>> planets_player_2 = 'Павел'

Если в каждой команде по три игрока, >>> planets_player_3 = 'Полина'


тебе понадобится шесть переменных.

Создай список
>>> ro c k e ts _ p la y e rs = ['Р о м а ', 'И го р ь',
...но что если в каждой команде окажется
шесть игроков? Тебе будет нелегко уследить 'А л е н а ', 'Р е н а т а ', 'Саш а', 'Л ена']
за таким количеством переменных. Гораздо ,>>> p la n e ts _ p la y e rs = ['Миша', 'П авел',
проще создать список. Для этого укажи
элементы, которые в нем будут храниться, 'Полина', 'Н а с т я ', 'А н я ', 'Леша']
внутри квадратных скобок.
Этот список хранится в переменной Элементы списка нужно
planets_players («игроки команды разделять запятыми.
“Планеты”»).
Так можно получить
значение первого элемента
списка (в позиции 0).

Получи элемент из списка


>>> r o c k e ts _ p la y e r s [0]
Когда данные хранятся в виде списка,
работать с ними просто. Чтобы получить ' Рома'
значение элемента, введи имя списка >>> p la n e ts _ p la y e r s [5]
и укажи в квадратных скобках позицию
элемента. Внимание: Python считает 'Леша'
элементы с 0, а не с 1. Попробуй полу­
чить из списка имена разных игроков. Так можно получить значение
Имя первого стоит в позиции 0, имя последнего элемента списка
последнего — в позиции 5. Чтобы получить значение (в позиции 5).
элемента, нажми ENTER.
Принятие решений
Каждый день ты принимаешь решения, исходя
из ответов на вопросы. Например, таких:
«На улице дождь?», «Я сделал уроки?», «Я похож
на лошадь?». Компьютер тоже решает, что делать
дальше, на основе ответов на подобные вопросы.

Вопросы и ср авн ен и я
Вопросы, которые задает себе компьютер, обычно
подразумевают сравнение чего-то с чем-то. Например,
больше ли одно число другого. Если это так, программа
выполняет один блок кода, если нет — другой.

Булевы значения Переменная.


На вопросы, которые задает компьютер,
есть лишь два ответа: True («истина»)
>>> answer_one = True
и False («ложь»). Эти ответы называются
булевыми значениями и всегда пишутся >>> answer_two = F a ls e
с прописной буквы. Булевы значения тоже
можно хранить в переменных. Булево значение

СОВЕТЫ ЭКСПЕРТА Операторы сравнения


Символы в табличке ниже используются
Знаки «равно» для сравнения значений, — возможно, ты
встречался с ними на уроках математики.
В Python используется и одинарный знак «равно» (=), Программисты называют их операторами
и двойной (==). Смысл у них разный. Одинарный знак сравнения. Также в коде можно
позволяет присвоить переменной значение. Если ввести использовать логические операторы
age = 10, то в переменной age сохранится значение 10. and («и») и or («или»).
Двойной знак «равно» сравнивает два значения, как
в этом примере. Символ Значение
== равно
Так присваивают значение переменной. != не равно
< меньше, чем
>>> age = 10 > больше, чем
Так сравнивают значение
>>> i f age == 10: переменной с числом.
p r in t ( 'T e бe десять л е т . ' )

Эта команда выведет на экран


сообщение, если числа совпадут.
Зебры и а н а н а с ы
А теперь пример. Допустим, у тебя есть пять
ананасов и две зебры. Выразим это с помощью
переменных pineap p les («ананасы») и zebras
(«зебры»). Введи этот код в окне консоли.

>>> pineapples = 5 В этой переменной


хранится количество
>>> zebras = 2 ананасов.

В этой переменной хранится


количество зебр.

Сравнения
>>> zeb ras < pineap p les
Введи следующие строчки кода, чтобы сравнить
значения двух переменных. В конце каждой строки True
нажимай ENTER, и Python сообщит, истинно это
выражение (True) или ложно (False). Зебр меньше, чем ананасов.

Количество ананасов не равно


Ананасов больше, чем зебр.
количеству зебр.

>>> p ineapples > zebras >>> p ineap p les == zebras


True F a ls e

СЛЕНГ V Множественные сравнения


Операторы and и or позволяют объединять сравнения.
Логические операции При этом логическая операция and возвращает True,
только если оба сравнения возвращают True, a or —
Выражения, состоящие из переменных, если True возвращает хотя бы одно из двух сравнений.
их значений и логических операторов,
всегда возвращают булево значение —
>>> (p in e ap p le s == 3) and (ze b ras == 2)
True или False — и называются логическими
операциями. Все наши операции с ананасами F a ls e
и зебрами — логические.
Одно из двух сравнений (pineapples == 3)
Переменная. Логический оператор. возвращает False, поэтому выражение
в целом возвращает False.

>>> pineapples != zebras


>>> (p in e ap p le s == 3) or (zeb ras == 2)
True
True

Булево значение. Переменная. Одно из двух сравнений (zebras == 2) возвращает


True, поэтому выражение в целом возвращает True.
А м е р и к а н ск и е го р к и
Объявление в парке аттракционов гласит, что кататься
на американских горках может ребенок старше 8 лет,
рост которого больше 1,4 метра. Маше 10 лет, а ее рост
1,5 метра. Проверим в окне консоли, пропустят ли
Машу на аттракцион. В первых двух строчках кода
объяви переменные и сохрани в них возраст и рост
Маши. Затем добавь условия посещения аттракциона
(логическую операцию) и нажми ENTER.

Логическая операция,
>>> age = 10 означающая «старше
Присваивают значения >>> heigh t = 1 .5 8 лет и выше 1,4 метра:
переменным.
>>> (age > 8) and (h e ig h t > 1 .4 )
True

Ура! Маша может прокатиться


на американских горках!

В етвлен и е
Компьютеру часто приходится решать, какую часть
кода выполнять дальше: ведь большинство программ
при разных условиях должны работать по-разному.
Работа программы похожа на путешествие по дороге
с развилками, когда от выбора направления зависит,
в какое место ты попадешь.

СЛЕНГ В школу или в парк?


Представь, что ты каждый день
Условие решаешь, по какой дороге пойти,
отвечая на вопрос «Сегодня выходной?».
Условие — это логическая Если выходной, ты идешь в парк,
операция (сравнение, а если нет, то в школу. В Python разные
возвращающее True пути ведут к разным блокам кода.
или False), которая Блок может состоять из одной
помогает компьютеру или нескольких команд, отделенных
выбрать дорогу, если он от остальной части кода отступами
достиг развилки на пути в 4 пробела. С помощью вопросов
выполнения кода. (условий) компьютер решает, какие
блоки кода выполнять дальше.
Один путь Эта строка кода просит пользователя
ответить «д» (да) или «н» (нет). Условие.
Простейшее ветвление — это конструк­
ция if («если»). У нее лишь один путь,
is _ d a r k = i n p u t ('Н а улице темно? д / н ) ')
и компьютер выберет его, если условие
вернет True. Этот код спрашивает, темно i f is _ d a rk == ' д ' :
ли на улице. Если пользователь отвечает p r i n t ( 'Спокойной ночи! Х р -р -р -р -р -р .. . ' )
«да» (д), программа делает вид, что
компьютер уснул. В любом другом Этот блок кода выполняется, Сообщение, которое
случае (если условие возвращает если условие возвращает True. появится на экране.
False) сообщение «Спокойной ночи!»
не появится на экране.
Эта строка кода просит
Два пути ответить на вопрос. Условие.
Хочешь, чтобы программа выбрала один
путь, если условие возвращает True, t e n ta c le s = in p u t( 'У тебя есть щупальца? ( д / н ) ')
и другой, если False? Тогда нужна
i f te n ta c le s == ' д ' :
команда с двумя ветвлениями —
конструкция if-else («если-иначе»). p r in t ('H y и ну, осьминог за компьютером!')
Этот код спрашивает, есть ли у тебя e ls e :
щупальца. При ответе «да» (д) компьютер
p r i n t ( 'Приветствую теб я, ч е л о в е к !')
думает, что ты осьминог, иначе (н)
считает тебя человеком. В каждом
случае выводится свое сообщение. Этот блок кода выполняется, Этот блок кода выполняется,
если условие возвращает False. если условие возвращает True.

Множество путей
w eather = in p u t ('К а к а я сегодня погода? (дож дь/снег/солнце)')
Когда нужно больше двух
ветвлений, на помощь при­ Первое условие.
ходит конструкция elif (сокр. i f weather == 'дож дь': Этот блок кода выполнится,
от else-if— «еще-если»). если первое условие вернет
p r in t ('H e забудьте з о н т и к !') True.
Этот код спрашивает, какая
сегодня погода: дождь, снег e l i f weather == 'с н е г ':
или солнце. Затем он выбирает p r in t ('H e забудьте вареж ки!') Второе условие.
один из трех путей и выводит
e ls e :
на экран подходящий совет.
p r i n t ('Н е забудьте солнечные о ч к и !')

Этот блок кода выполнится,


Этот блок кода выполнится, если
если оба условия вернут False.
второе условие вернет True.

Как это работает


Конструкция elif обязательно должна стоять после
if и перед else. Здесь elif проверяет, идет ли снег,
только если условие if возвращает False. В код можно
добавить еще больше конструкций elif, проверяющих
другие варианты.
Циклы
Компьютеры умеют, не жалуясь, выполнять утомительную
работу. О программистах такого не скажешь, зато они могут
поручать однообразные задачи компьютеру, создавая для этого
циклы. Цикл выполняет один и тот же блок кода снова и снова.
В Python есть несколько типов цикла. Рассмотрим два из них.

Цикл for
Если ты знаешь, сколько раз программе нужно
выполнить блок кода, тебе подойдет цикл for («для»).
Эмма написала код, который десять раз выводит
на экран «Тайный штаб Эммы О ' Брайен!», чтобы потом
распечатать этот текст и повесить его на дверь. Попробуй
запустить ее программу в окне консоли. (Введи строки
кода и нажми ENTER, сотри пробелы, которые
добавятся автоматически, и снова нажми ENTER.)

Это — переменная цикла. Цикл повторяется 10 раз.

>>> fo r counter in ra n g e (1 , 1 1 ):
p r i n t ( 'Тайный штаб Эммы 0 \ ' Брайен! ' )

Сделай отступ Код, который повторяется в цикле,


в 4 пробела. называется телом цикла.

Переменная цикла СОВЕТЫ ЭКСПЕРТА


Переменная цикла отслеживает, сколько проходов уже сделано. Функция range()
Сначала она равна первому числу из списка, заданного командой
range (1 ,11) («диапазон»). На втором проходе в переменную цикла В Python функция range() хранит
попадает второе число из списка и т. д. Когда программа переберет в себе список чисел, который
все числа в диапазоне от 1 до 10, цикл завершится. начинается с первого указанного
в скобках числа и заканчивается
числом, на единицу меньшим
второго. Поэтому range( 1 ,4) —
это 1,2 и 3, но не 4. В программе
Эммы команда ra n g e( 1 , 11)
соответствует такому списку: 1,2,
3,4,5,6,7,8,9,10.
СОВЕТЫ ЭКСПЕРТА

Знак экранирования (\)


Фамилия 0 \ ' Брайен записана в коде через знак «обратный слеш»
Он указывает на то, что идущий следом апостроф не нужно
считать закрывающей кавычкой. Обратный слеш называют
знаком экранирования. Сам он не выводится на экран, а лишь
поясняет, как программе воспринимать следующий символ.

Ц и к л w h ile
А что если ты не знаешь, сколько раз программе
нужно повторить блок кода? Может, стоит
заглянуть в хрустальный шар и увидеть будущее?
Нет, просто воспользуйся циклом w hile («пока»).

Условие цикла
У цикла while нет переменной, которая перебирает все
значения, зато у него есть условие — логическая операция,
возвращающая True или False. Работа цикла while похожа
на работу билетного контролера. Если у тебя есть билет
(True), он тебя пропустит в зал, а если нет (False), то ты
не сможешь войти. В нашем случае если условие цикла
не вернет True, программа не сможет войти в цикл!

Башня из бегемотов
Ахмед написал программу, которая считает количество
бегемотов в акробатической пирамиде. Изучи код
и постарайся разобраться, как он работает.

Условие цикла. Переменная, в которой хранится Переменная, в которой хранится ответ


количество бегемотов. на вопрос «Добавить бегемота?».

>>> hippos = 0
>>> answer = 'д '
Эта строка кода выводит на экран
>>> w h ile answer == ' д ' : сообщение о количестве бегемотов
hippos = hippos + 1 в акробатической пирамиде.
Ответ пользователя
Добавляет еще p r i n t ( ' Бегемотов в пирамиде: ' + s t r (h ip p o s ))
становится новым
одного бегемота. answer = in p u t( 'Добавить бегемота? (д /н ) ') значением перемен­
ной answer («ответ»).
Как это работает
В коде Ахмеда условием цикла служит
логическая операция answer == 'д'. Если
она возвращает True, значит, пользователь
хочет добавить бегемота. Тогда в теле
цикла количество бегемотов увеличива­
ется на 1 и на экран выводится вопрос,
нужно ли добавить еще одного бегемота.
Если пользователь отвечает «да» (д),
условие цикла возвращает True, и цикл
повторяется. А если «нет» (н), условие
возвращает False, и программа выходит
из цикла.

Это условие никогда


Б е ско н е ч н ы й ц икл не вернет False.
Иногда бывает необходимо, чтобы
цикл повторялся все время, пока >>> w h ile T ru e :
работает программа. Такой цикл p r i n t ('Э т о бесконечный ц и к л !')
называется бесконечным. Во многих
видеоиграх используется бесконечный
Вход в бесконечность
основной цикл.
Чтобы цикл стал бесконечным, сделай его условием постоян­
ное булево значение True. Поскольку оно никогда не изменится,
цикл никогда не завершится. Запусти этот код. Условие всегда
будет возвращать True, а значит, цикл будет выводить одно
СОВЕТЫ ЭКСПЕРТА
и то же сообщение, пока ты не выйдешь из программы.
Выход из цикла
Если ты не хочешь, чтобы цикл w hile
получился бесконечным, убедись, Выход из бесконечности
что в его теле есть что-то, благодаря Бесконечный цикл можно создать специально. Например,
чему условие цикла может вернуть эта программа только и делает, что спрашивает пользователя,
False. Но не волнуйся: если ты надоела ли она ему. Если тот, устав читать одно и то же, введет
случайно создал бесконечный цикл, «д», программа скажет, что это невежливо, и выйдет из цикла
его можно остановить, нажав с помощью команды break («отмена»).
одновременно клавиши CTRL и С.
Условием цикла является булево значение True,
Возможно, это сочетание клавиш
а это значит, что цикл будет повторяться
понадобится нажать несколько раз. бесконечно, пока пользователь вводит ' н '.

>>> w h ile T ru e :
answer = in p u t('Я тебе надоела? (д /н ) ')
i f answer == ' д ' : Если пользователь
введет 'д', запустится
p r i n t ('К а к невежливо!')
блок кода с командой
break break.
Ц икл в н у т р и ц и к л а СОВЕТЫ ЭКСПЕРТА
Может ли один цикл находиться в теле Отступы в теле цикла
другого цикла? Да! Такой вложенный
цикл похож на матрешку, куклы которой Строки кода, составляющие тело цикла, нужно
вводить с отступом в 4 пробела, иначе Python
вставляются одна в другую. Получается,
выдаст ошибку и программа не запустится.
что внутренний цикл запускается внутри А если цикл вложен в другой, тело внутреннего
внешнего цикла. цикла должно идти с отступом еще в 4 пробела.
Обычно IDLE ставит отступы автоматически,
но ты все равно не забывай проверять количество
пробелов в начале каждой строки.

Переменная внешнего цикла —


pobeda_counter.

Цикл в цикле
>>> for pobeda_counter in range(l, 4):
Эмма переделала свой код
про тайный штаб так, чтобы for ura_counter in range(1, 3): Тело внешнего цикла
идет с отступом
программа трижды выводила print('ypa') в 4 пробела.
на экран «ура, ура, победа!».
Поскольку в этой фразе два print('победа!')
слова «ура», Эмма решила
использовать вложенный цикл. Переменная внутреннего цикла — Тело внутреннего цикла идет
ura_ counter. с отступом в 8 пробелов.

ура
pobeda_counter = 1 ура ura_co u n ter = 1

победа! u ra_co u n ter = 2 Как это работает


Внутренний цикл for находится
ура
в теле внешнего цикла for,
pobeda_counter = 2 ura_co u n ter = 3
ура и на каждый проход внешнего
u ra_co u n ter = 4 цикла приходится два прохода
победа!
внутреннего. Это значит, что код
ура внешнего цикла запустится
pobeda_counter = 3 ura_co u n ter = 5 3 раза, а внутреннего — 6 раз!
ура
победа! ura_co u nter = 6
Тест «Животные»
Любишь ли ты игровые тесты? А собственный создать
хочешь? Цель этого проекта — написать программу-
тест «Животные», однако тему впоследствии будет
несложно заменить.

Что п р о и с х о д и т
Программа задает игроку вопросы про животных.
Для ответа на каждый из них отводится три попытки —
тест не стоит делать чересчур сложным! За каждый
правильный ответ начисляется 1 очко. В конце теста
Так выглядит игровой
программа показывает счет игрока. тест в окне консоли.

Ответ вводим здесь.

Если ответ окажется


неправильным, нужно
ввести другой.

После трех неудачных


попыток программа
выводит на экран
правильный ответ.

Итоговый счет игрока


(максимум 3 очка).
Блок-схема теста «Животные»
Как это р а б о т а е т
Программа раз за разом проверяет, остались ли
Для создания этой программы тебе еще вопросы и использовал ли игрок все попытки.
потребуется функция — именованный блок Количество набранных очков хранится в переменной.
кода, выполняющий определенную задачу. После того как игрок ответит на все вопросы, игра
завершается.
Функция позволяет использовать код
повторно, не вводя его каждый раз заново.
В Python есть много встроенных функций,
а также возможность создавать собственные,

Вызов функции
Чтобы воспользоваться
функцией, ее надо вызвать,
написав имя и поставив скоб­
ки. Для нашего теста тебе
предстоит создать функцию,
которая будет сравнивать
ответ игрока с правильным,
и вызвать ее несколько раз —
после каждого вопроса.

СЛЕНГ
Регистр букв
Сравнивать ответ игрока с правильным
нужно без учета регистра букв: не важно,
прописными он будет написан или строчными,
лишь бы слова совпадали. Это уточнение
подходит не для всех случаев: если программа,
проверяющая пароль, не учитывает регистр
букв, подобрать пароль злоумышленнику
станет легче. Но в нашем тесте слова «Гепард»
и «гепард» лучше считать одинаковыми.
П р и сту п и м к н а п и с а н и ю
Пришло время написать код для игрового теста!
Сперва нужно ввести вопросы и создать механизм
проверки ответов. Затем — добавить код, позволя­
ющий игроку отвечать на каждый вопрос три раза.

Создай новый файл


Открой IDLE. В меню File
выбери New File. Сохрани
файл как animal_quiz.py
(«тест “Животные”»).

Создай переменную score


sco re = 0
Введи этот код, чтобы создать
переменную score («счет»)
с начальным значением 0. С помощью этой переменной ты
будешь следить за количеством
очков, набранных игроком.

Покажи название игры


score = 0
Добавь функцию print(),
выводящую на экран название p r i n t ('Т е с т «Животные»')
теста. Это будет первое, что
игрок увидит после запуска
Эта фраза появится
программы.
на экране.

Запусти программу
Запусти программу. Для этого
открой меню Run и выбери
Run Module. В окне консоли
должно появиться название
игры.

Задай вопрос и введи ответ


p r i n t ('Т е с т «Животные»')
Эта строка кода задает вопрос
и ожидает ответ пользователя. guess1 = in p u t ('Како й медведь живет за полярным кругом? ')
Ответ (пользовательский ввод)
попадает в переменную guess1
Все, что введет игрок, попадет
(«вариант 1»). Запусти код и убедись,
в переменную guess1.
что вопрос появился на экране.
Создай функцию проверки В первой строке кода
def ch e ck_g u ess(g u e ss, an sw e r): создаем функцию
Теперь нужно выяснить, правильно
и в скобках указываем
ли ответил игрок. Добавь этот код g lo b al score
ее аргументы.
в самое начало программы, перед i f guess == answ er:
строкой score = 0. Так ты создашь
p r i n t ('О тв е т верный') Эта строка кода
функцию check_guess() («прове­
означает, что пере­
рить ответ»), которая проверяет, sco re = score + 1 менная score —
совпадает ли ответ игрока с пра­ глобальная, то есть
score = 0
вильным ответом. Два слова внутри если ты изменишь
скобок называются аргументами; ее значение, это
Увеличивает. Не забудь отразится на работе
вызывая функцию, ты присваиваешь
счет на 1 очко. про скобки. всей программы.
ее аргументам значения.

Проверь ответ
guess1 = in p u t ('Какой медведь живет за полярным кругом? ')
Добавь в конец программы
вызов функции check_guess(). ch e ck_g u ess(g u e ss1 , 'белый медведь')
Ее первым аргументом должен
быть ответ игрока, а вторым —
правильный ответ «белый
медведь».

Проверь работу программы


Тест «Животные»
В окне консоли запусти код еще
раз и введи правильный ответ. Какой медведь живет за полярным кругом? белый медведь
Вот что появится на экране. Ответ верный

Добавь еще вопросы


Одного вопроса для теста недостаточно!
Добавь в код еще два вопроса, выполнив те же
шаги. Пусть ответы пользователя попадают
в переменные guess2 и guess3.

score = 0 Первый вопрос.


p r in t ('Т е с т «Животные»')
guess1 = in p u t('Какой медведь живет за полярным кругом? ') Проверка ответа,
попавшего
check_guess(guess1 , 'белый медведь')
в переменную guess1.
guess2 = in p u t('Какое сухопутное животное самое быстрое? ')
check_guess(guess2, 'ге п а р д ')
Проверка ответа,
guess3 = in p u t('Какое животное самое большое? ') попавшего
check_guess(guess3, 'синий к и т ') в переменную guess3.
Объяви счет
Следующая команда выведет на экран количество
очков, набранных игроком после ответа на все
вопросы. Добавь ее в конец кода.

guess3 = in p u t('Какое животное самое большое? ')


check_guess(guess3, 'синий к и т ')
Выводит на экран сообщение
с количеством набранных очков.

p r in t ('Вы набрали очков: ' + s t г (s c o r e ))

Как это работает


В этой команде используется функция str() (сокр. от string —
«строка»), которая преобразует тип данных «целое число»
в «строку». Это необходимо делать, поскольку при попытке
склеить строку с числом Python выдает ошибку.

Убери учет регистра


def ch e ck _g u e ss(g u e ss, a n sw e r):
А если вместо «гепард» игрок введет
«Гепард», получит ли он очко? Нет, g lo b al score
программа скажет, что ответ неверный! i f g u e s s .lo w e r() == answ er. lo w e r( ) :
Чтобы такого не произошло, код нужно
сделать умнее. В Python есть функция p r i n t ('О тв е т верный')
lower() («понизить»), превращающая sco re = sco re + 1
прописные буквы в строчные. Замени
команду if guess == answer: на ту, что
показана справа. Измени на эту
Как это работает
строку.
Перед тем как начать сравнивать
два аргумента, программа с помощью
функции lower() превратит все
прописные буквы в строчные. Тогда
Снова проверь работу программы проверка выдаст верный результат,
Запусти программу в окне консоли еще раз. Попробуй как бы ни набрал игрок название
вводить правильные ответы, чередуя строчные животного.
и прописные буквы, и посмотри, что выйдет.

Тест «Животные»
Какой медведь живет за полярным кругом? белый медведь
Ответ верный
Какое сухопутное животное самое быстрое? ГЕПАРД
Ответ верный
Какое животное самое большое? СиНиЙ кИт
Ответ верный
Вы набрали очков: 3 При проверке ответов регистр
букв не учитывается.
Дай игроку больше попыток
Сейчас у игрока есть только один шанс угадать
животное. Можно облегчить ему жизнь
и подарить не одну, а три попытки. Измени
функцию check_guess() так, как показано ниже.

В этой переменной хранится лишь одно Незабудьсохранить


из двух булевых значений: True или False. свою работу.

def ch e ck_g u ess(g u e ss, a n sw e r):


g lo b al score
Цикл while запускает код
s t ill_ g u e s s in g = True проверки три раза (если игрок
attempt = 0 не введет правильный ответ
раньше).
w h ile s t ill_ g u e s s in g and attempt < 3:
i f g u e s s .lo w e r() == a n sw e r.lo w e r( ) : Убедись, что все строчки даны
p r i n t ('О тв е т верный') с нужным количеством отступов.

sco re = sco re + 1
s t ill_ g u e s s in g = F a ls e Конструкция else позволяет игроку дать другой
ответ на тот же самый вопрос, если он не смог
e ls e : ответить правильно с первого раза.
i f attempt < 2:
guess = in p u t('О тв е т неверный. Попробуйте еще раз. ')
attempt = attempt + 1
Прибавляет 1 к количеству
использованных попыток.
i f attempt == 3:
p r i n t ( ' Правильный о тв е т: ' + answer)
Выводит на экран правильный ответ
после трех неудачных попыток.
score = 0

Как это работает


Чтобы программа могла понять,
верный ли ответ ввел игрок,
используется переменная
still_guessing («еще угадывает»).
При неверном ответе в ней остается
значение True, а если игрок угадает
слово, оно меняется на False.
Что бы изменить?
Измени свой тест! Сделай его длиннее или короче,
добавь другие типы вопросов или поменяй тему.
Внося эти изменения, сохраняй код в новых файлах,
чтобы не потерять первоначальный вариант игры.

Сделай длиннее
Добавь в свой тест еще несколько вопросов.
Например: «У какого животного есть длинный
хобот?» (слон), «Какое млекопитающее умеет
летать?» (летучая мышь). Или посложнее:
«Сколько сердец у осьминога?» (три).

С помощью обратного слеша можно


разбить длинную строку кода на две.

Предложи варианты ответа


guess = in p u t('К ако е из этих животных рыба? \
Вот пример кода для вопроса
1) Кит 2) Дельфин 3) Акула 4) Кальмар. Введите 1, 2, 3 или 4 . ') с несколькими вариантами ответа.
check_guess(guess, '3 ')

ЗАПОМНИ
Перевод строки
Вопросы с вариантами ответов
guess = in p u t('К ако е из этих животных рыба?\п \
лучше смотрятся, если ответы
стоят в столбик, как в примере 1) Кит\п 2) Дельфин\ п 3) Акула\п 4) Кальмар\ п \
справа. Набрать текст с новой Введите 1, 2 , 3 или 4 . ')
строки позволяет символ \п.
ch e ck _g u e ss(g u e ss, ' 3 ' )

Какое из этих животных рыба?


1) Кит
2) Дельфин
Так этот
3) Акула
вопрос будет
4) Кальмар выглядеть
в окне консоли.
Введите 1, 2 , 3 или 4.
Меньше попыток — больше очков
w h ile s t ill_ g u e s s in g and attempt < 3:
Поощряй игрока за угадывание с меньшего
i f g u e ss. lo w e r() == answ er. lo w e r( ) : количества попыток. Пусть за верный ответ
p r i n t ('О тв е т верный') с первого раза программа начисляет ему 3 очка,
со второго — 2, а с третьего — 1. Для этого измени
score = sco re + 3 - attempt команду, в которой обновляется счет. Теперь
s t ill_ g u e s s in g = F a ls e Код, который он будет увеличиваться на 3 очка минус число
нужно ввести неудачных попыток. Если игрок сразу ответит
e ls e :
вместо score + 1. правильно, он получит 3 - 0 = 3 очка, если
i f attempt < 2: со второй попытки, то 3 - 1 = 2 очка, а если
с третьей, то 3 - 2 = 1 очко.

Ответы типа «да — нет»


guess = in p u t('Мыши — это млекопитающие. Да или нет? ')
Вот пример кода для вопросов
с двумя вариантами ответа. ch e ck _g u e ss(g u e ss, 'Д а ')

Измени сложность
def check_g u ess(g uess, answ er):
Чтобы усложнить тест, уменьши
количество попыток ввода. Если glo bal score
это ответ типа «да — нет», не стоит s t ill_ g u e s s in g = True Измени это число.
давать игроку больше одной
попытки, а для ответа на вопрос attempt = 0
с несколькими вариантами ответа w h ile s t ill_ g u e s s in g and attempt < 3:
хватит, пожалуй, и двух попыток.
i f g u e s s .lo w e r() == answer. lo w e r()
Попробуй сам догадаться, как
нужно изменить выделенные числа p r in t ('О твет верный')
для одного и другого варианта. score = score + 1
s t ill_ g u e s s in g = F a lse
e ls e : Измени это число.

i f attempt < 2:
guess = input ('Ответ неверный. Попробуйте еще раз. ')
attempt = attempt + 1
Измени это число.

i f attempt == 3:
p r i n t ( ' Правильный о твет: ' + answer)

Измени тему
Составь тест на другую тему, например
про спорт, кино, музыку или на общую
эрудицию. Можешь придумать вопросы
про своих родных или друзей, в том числе
провокационные, например: «У кого самый
противный смех?»
Функции СЛЕНГ
У функции есть...
Программисты любят хитрости, которые Аргумент — значение, которое
облегчают написание программ. Один передается внутрь функции.
из их самых известных трюков — дать особо Возвращаемое значение —
полезному блоку кода имя. Тогда можно данные, которые можно вернуть
из функции в основной код.
не вводить этот код каждый раз заново,
Для этого служит ключевое
а просто вызывать его по имени по мере слово return («вернуть»).
необходимости. Такие именованные
блоки кода называются функциями. А еще функцию можно...

Вызвать — то есть использовать


Как п о л ь з о в а т ь с я ф у н к ц и е й в коде.

Использование функции в коде называется вызовом. Создать — когда ты после


Чтобы вызвать функцию, надо ввести ее имя и поставить ключевого слова def пишешь
код функции, это значит, что
скобки, внутри которых поместить аргументы, необхо­
ты определяешь, или создаешь,
димые для работы функции. Аргументы — это что-то функцию. Переменные тоже
вроде переменных, принадлежащих функции. Они позво­ определяют — когда впервые
ляют передавать данные между разными частями кода. присваивают им значения.
Если у функции нет аргументов, скобки оставляют пустыми.

Запрашивает имя
В стр о е н н ы е ф у н к ц и и пользователя.
В Python есть встроенные функции
для выполнения разных полезных >>> name = in p u t('К а к тебя зовут? ')
задач: от ввода информации и вывода Как тебя зовут? Сара
сообщений на экран до преобразования
>>> g re e tin g = 'Привет, ' + name
данных из одного типа в другой.
>>> p r in t (g r e e t in g )
Некоторыми встроенными функциями
ты уже пользовался, например print() Привет, Сара

и str(), другими еще нет. Посмотри


на эти примеры и попробуй ввести их Выводит на экран содержимое
переменной greeting («приветствие»).
в окне консоли.

Противоположные функции input() и print()


Функция input() позволяет вводить данные
с клавиатуры, а функция print() выводит результат
работы кода на экран, например сообщение
или результат математической операции.
Функция max() Функция min()
Функция max() находит наибольшее число Функция min() противоположна max (). Она
среди всех аргументов, которые ей передают, выбирает из аргументов в скобках наименьшее
то есть указывают внутри скобок через число. Поэкспериментируй с этими функциями
запятую. самостоятельно.

>>> max(1 0 , 16, 30, 21, 25, 28) >>> m in(1 0 , 16, 30, 21, 25, 28)
30 10

Самое большое Всегда разделяй Когда ты нажмешь ENTER, то увидишь


число среди аргументы функции на экране наименьшее число среди
всех аргументов. запятыми. всех аргументов.

Д р у го й с п о с о б в ы з о в а
У всех известных тебе типов данных — Не забудь Пустые скобки означают, что
про точку. аргументов у функции нет.
целых чисел, строк и списков — есть
собственные функции. Чтобы их вызвать,
>>> 'б аб а х' .u p p e r()
нужно ввести сами данные или имя
переменной, в которой они хранятся, 'БАБАХ'

через точку написать имя функции


и поставить скобки. Попробуй набрать Новая строка, в которой все буквы прописные.
эти примеры в окне консоли.
Функция upper()
Функция upper() («повысить») превращает
все строчные буквы в имеющейся строке
в прописные.

В переменной хранится
Эта функция принимает два аргумента. список целых чисел.

>>> message = 'Python - это весело' >>> countdown = [1 , 2, 3]


>>> m e ssa g e .re p la ce ( ' в е с е л о ', ' : D') >>> countdown. re v e rs e () Теперь числа стоят
'Python - это :D' >>> print(countd ow n) в обратном порядке.

[3, 2 , 1]
Заменяет слово «весело» на смайлик.

Функция replace() Функция reverse()


Этой функции нужны два аргумента: текст, который Используй эту функцию, чтобы изменить порядок
ты хочешь заменить, и строка, которую надо элементов в списке на обратный. В этом примере
поставить на его место. Функция возвращает функция «разворачивает» элементы списка countdown
новую строку. («обратный счет»), так что вместо [1,2,3] получается [3,2,1].
Создай функцию
С о зд а н и е ф ункци й
Создай в IDLE новый файл и сохрани его как
При создании собственных функций functions.py («функции»). Введи в окне программы
старайся называть их говорящими следующий код. Каждая строчка в теле функции
именами, поясняющими, что именно должна начинаться с отступа в 4 пробела. Снова
сохрани файл, запусти программу и посмотри,
делают функции. Чтобы создать функцию,
что произойдет.
вычисляющую количество секунд
Имя функции. У функции пока нет аргументов.
в сутках, выполни следующие шаги.
def p rin t_ s e c o n d s _ p e r_ d a y ():
hours = 24
m inutes = hours * 60
Ключевое слово def означает, что
следующий блок кода создает функцию. seconds = m inutes * 60
p rin t(s e c o n d s )
Эта команда выводит
Строчки, которые относятся к функции
на экран значение
и идут после ее имени, должны начи­ p rin t_se co n d s_p e r_d a y () переменной seconds.
наться с отступа в 4 пробела, чтобы
Python принял их за тело функции.

86400
Вызов функции.
В окне консоли отобразится количество
секунд в сутках.

Добавь аргументы
Если для работы функции нужны какие-нибудь
значения, укажи их внутри скобок в качестве аргу­
ментов. Чтобы функция print_seconds_per_day()
сообщала, сколько секунд в заданном количестве
СОВЕТЫ ЭКСПЕРТА суток, измени ее код, как показано ниже. Теперь
функция принимает аргумент days («дни»), так что
Главное правило при вызове ей нужно передавать количество суток.

Важно, чтобы функции


были созданы до их вы­ def p rin t_ s e c o n d s _ p e r_ d a y (d a y s ):
зова в основном коде. hours = days * 24 Аргумент функции.
Пока ты учишься про­
m inutes = hours * 60
граммировать на Python, В этой переменной
старайся помещать seconds = minutes * 60 используется
функции в самом нача­ аргумент days.
p rin t(s e c o n d s )
ле программы. Тогда Присваивает
ты не сможешь вызвать аргументу days
по ошибке функцию, p rin t_se co n d s_p e r_d a y (7 ) значение 7.
которая еще не создана.
Прежняя версия кода
604800 показана серым,
а изменения — черным.
Количество секунд в 7 сутках.
Верни значение
def co n ve rt_d ays_ to _se c o n d s(d a y s):
У тебя есть функция, выполняющая полезную
работу. Чтобы использовать результат ее hours = days * 24
работы в основном коде, нужно получить m inutes = hours * 60 Новое имя функции
(вернуть) значение из функции. Для этого означает «перевести
измени код так, как показано справа. Кроме seconds = minutes * 60 дни в секунды».
того, имя функции стоит поменять, чтобы re tu rn seconds
оно лучше отражало ее назначение. Пока
не пытайся запустить этот код.

Команда return возвращает Строку с вызовом функции удаляем,


из функции значение переменной поскольку имя и назначение
seconds («секунды»). функции поменялись.

Вызывает функцию, присваивая


аргументу days значение 7.

Используй возвращаемое значение


def c o n v e rt_d a y s_to _se c o n d s(d a y s):
Возвращаемое значение можно сохранить
в переменной, чтобы использовать его позже. hours = days * 24
Добавь этот код после функции. Теперь minutes = hours * 60
значение функции попадает в переменную
и используется для вычисления количества seconds = m inutes * 60
миллисекунд (тысячных долей секунды). re tu rn seconds
Проверь работу этого кода, вводя разное
количество дней.
to ta l_se c o n d s = co n ve rt_d a ys_to _se co n d s(7 )
Возвращаемое значение
m illis e c o n d s = to ta l_se c o n d s * 1000
функции попадает в переменную
total_seconds («всего секунд»). p r in t (m illis e c o n d s )
Выводит значение переменной
milliseconds («миллисекунд»)
на экран. 604800000

Это количество
Преобразует общее количество
миллисекунд в 7 сутках.
секунд в миллисекунды, сохраняя
результат в переменной milliseconds.

СОВЕТЫ ЭКСПЕРТА
Имя функции
На шаге 3 ты поменял название Тогда твой код будет гораздо проще
функции p rin t_seco n d s_p er_d ay() понять. Правила именования функций
(«напечатать количество секунд в сутках») такие же, как для переменных: имя может
на convert_days_to_seconds() («перевести содержать цифры и латинские буквы,
дни в секунды»). Так же как в случае но начинаться должно с буквы. Если
с переменными, важно, чтобы имя в имени несколько слов, разделяй их
функции точно описывало ее назначение. знаком подчеркивания.
Исправление ошибок
Если с кодом что-то не так, Python постарается выдать
сообщение об ошибке. Поначалу такие сообщения могут
сбивать с толку, однако они полезны, поскольку помогают
понять, почему код не работает и как это исправить.

Сообщ ение об ош ибке Сообщение об ошибке в окне программы


Сообщение появится во всплывающем окне.
Сообщение об ошибке может выдать и окно Кликни ОК, чтобы вернуться к коду; в месте
программы, и окно консоли. В тексте сообщения ошибки ты увидишь красную пометку.
по-английски указывается тип ошибки и место,
в котором ее нужно искать.

Сообщение об ошибке
в окне консоли
Ошибка синтаксиса
В окне консоли сообщение об ошибке означает, что
выделяется красным, а программа какая-то команда
при этом завершается. Вот пример введена неверно.
сообщения, в котором указана строка
кода с ошибкой.

>>>

Traceback (most recent c a l l l a s t ) :


F ile "U sers/C raig /D eve lo pm e n ts/to p -se cre t-p yth o n -b o o k/ag e .p y", lin e 21, in module>
print('M H e '+ age + ' л е т ')
T yp e E rro r: C a n 't convert ' i n t ' o b je ct to s t r im p lic i t ly

Обнаружена ошибка Ошибка в строке 21.


типизации (см. с. 50).
С ов ет ы Э ксп ер т а
Поиск багов
Когда в окне консоли
появится сообщение
об ошибке, кликни по нему
правой кнопкой мыши
и выбери Go to file/line.
Окно программы откроется
на проблемной строке кода.
О ш и б к а си н та к си с а Здесь не хватает закрывающей
Если у тебя высветилась ошибка круглой скобки.
синтаксиса (SyntaxError), значит,
in p u t('К а к тебя зовут?'
ты что-то неверно ввел — например,
нажал не на ту клавишу. Не волнуйся,
такой баг исправить легче всего.
Пропущена первая
Тщательно изучи весь код и найди одинарная кавычка.
опечатку.
p r i n t ( Теперь твой х о д ')

На что обращать внимание


Убедись, что у каждой скобки и кавычки Здесь опечатка: должно
есть пара. А может, ты не так написал быть short_shots.
ключевое слово? Все это может привести
к ошибке синтаксиса. t o t a l_ s c o r e = (lo n g _sh o ts * 3) + (sh o o rt_sh o ts * 2)

Блоки и отступы
О ш и б к а о тс ту п а
В Python один блок кода нередко находится
Чтобы показать начало и конец блока кода, внутри другого блока: например, частью
в Python используются отступы. Ошибка отступа функции может быть цикл. Все строки
(IndentationError) означает, что в структуре определенного блока должны идти с одинаковым
отступом. Хоть IDLE и старается ставить отступы
программы что-то не так. Запомни: если в конце
автоматически, все равно нелишним будет
строки стоит двоеточие, следующая строка проверить количество пробелов в каждом блоке.
должна начинаться с отступа. Чтобы добавить
отступ, нажми клавишу ПРОБЕЛ 4 раза.

i f weekday == T ru e :
p r i n t ('Пора в школу')

Такая запись приведет к ошибке отступа.

Отступы позволяют программе понять,


какая строка какому блоку принадлежит.

i f weekday == T ru e :
p r i n t ( ' Пopa в школу')

4 пробела. Чтобы исправить ошибку, нужно добавить


отступ в начале второй строки.
О ш ибка типизации
Ошибка типизации (TypeError) означает, что в коде что-то
не так с типами данных, например числа перепутаны
со строками. Это похоже на то, что ты пытаешься испечь
пирог в холодильнике: ничего не выйдет, ведь холодиль­
ник не печка! Не стоит удивляться такому сообщению
об ошибке, если ты просишь Python о невозможном!

budget = 'пятьдесят' * 'п я ть '


Примеры ошибок типизации
В Python можно перемножать Такие ошибки возникают, если попросить
числа, но не строки. Python о чем-то бессмысленном: например,
перемножить строки, или сравнить данные
разных типов, или найти число в списке,
состоящем из букв.
hot_day = '20 градусов' > 15

Python не может сравнить


строку с числом: это разные
типы данных.

list = [' а ' , ' б ' , 'в ' ]


find_biggest_num ber(list)

Эта функция ожидает получить список


чисел, а ей передали список букв!

Ош ибка им енования
Ошибка именования (NameError) возникнет, если ввести
в код имя еще не созданной переменной или функции.
Чтобы такого не случилось, всегда объявляй переменные
и создавай функции до того, как используешь их. Код
функции лучше вводить в самом начале программы.

Команда print() должна стоять


Ошибка именования после объявления переменной.
Ошибка именования в этом коде не позволяет
вывести сообщение «Мой город — Москва». p r i n t ('Мой город - ' + hometown)
Переменную hometown («родной город») нужно hometown = 'Москва'
объявить до ее помещения в функцию print().
Л оги че ская о ш и б к а
Иногда Python не выдает сообщений об ошибках, но ты
понимаешь: с программой творится что-то неладное —
она работает не так, как должна. Скорее всего, это значит,
что в код закралась логическая ошибка. Возможно, ты все
команды ввел правильно, но какой-то одной не хватает
или строки перепутаны местами.

Видишь ошибку?
p r in t ( ' Караул! Вы потеряли ж и зн ь !')
Этот код успешно запускается, и все же в нем
p r in t ( li v e s ) есть логическая ошибка: значение переменной
liv e s = liv e s - 1 lives выводится на экран прежде, чем количество
жизней уменьшается на 1. Игрок увидит неверное
Все команды введены правильно, число! Чтобы это исправить, команду print(lives)
но стоят не в том порядке. нужно перенести в конец кода.

Строка за строкой
Находить логические ошибки непросто,
но со временем ты научишься их вылавливать.
Для этого нужно тщательно, строка за строкой,
проверять, что делает код. Прояви терпение,
и в конце концов ты найдешь ошибку.

СОВЕТЫ ЭКСПЕРТА

Памятка по ловле багов


Порой тебе будет казаться, П ро вер ь...
что ты никогда не заставишь • Если ты ввел код из этой книги, но программа не работает, убедись,
программу работать как надо, что твой код в точности совпадает с напечатанным.
однако не сдавайся! Следуя • Нет ли в коде опечаток?
этим подсказкам, ты сможешь • Нет ли в начале строк лишних пробелов?
выловить большинство ошибок.
• Может, ты перепутал число и букву, например 0 (ноль) и О?
• Верно ли указаны прописные и строчные буквы?
• Есть ли для каждой открывающей скобки парная закрывающая? ( ) [ ] { }
• Есть ли для каждой одинарной или двойной кавычки парная
закрывающая? ' ' " "
• Сохранил ли ты файл после того, как изменил код?
• Попроси кого-нибудь еще сравнить твой код с кодом из книги.
«Генератор паролей»
Пароли позволяют защитить наши компьютеры, почтовые
аккаунты и учетные записи от посягательств посторонних
лиц. Цель этого проекта — создать инструмент для генерации
надежных и легко запоминающихся паролей.

Подсказка
Пароль хорош, если его
легко запомнить, но сложно
подобрать или угадать.
С виду этот пароль
сложен, но программа-
взломщик подберет
Имя хорошо запоминается, его за пару секунд.
но угадать его слишком
просто.

Этот пароль надежен


и легко запоминается.
Просто представь себе
Может, на разгадывание пару зевающих динозавров!
такого пароля и уйдет 1000 лет, Программа-взломщик может
но запоминается он плохо. подбирать его очень долго.

СЛЕНГ
Ч то п р о и сх о д и т
Взломщик паролей
Генератор паролей соединяет случайные
Взломщик — это программа, с помощью
слова, числа и символы в надежные
которой хакеры подбирают пароли. Некоторые
комбинации. После запуска программа взломщики выдают миллионы вариантов
создаст пароль и выведет его на экран. в секунду, составляя их из распространенных
Ты можешь запрашивать новый пароль слов и имен. Необычный пароль — лучшая
снова и снова, пока не получишь тот, защита от таких программ.
который тебе понравится.
«ГЕНЕРАТОР ПАРОЛЕЙ»

Блок-схема программы
К а к это р а б о т а е т
«Генератор паролей»
Программа случайным образом В ходе этого проекта ты научишься пользоваться
выбирает каждую из четырех частей модулем random («случайный»). С его помощью
пароля, соединяет их и выводит программа случайным образом выбирает прилагательные,
результат на экран. Если ты запросишь
существительные, числа и символы. Скоро к твоим
другой пароль, программа повторит эти
шаги, а если нет, завершит работу. услугам будут сложные, но запоминающиеся пароли
вроде «oldapple14(» или «hotgoat&»!

Признак предмета. Число от 0 до 99.

Символ вроде
Предмет. «!» или «?».

Х и т р о , н о п р о сто !
Программа составляет хитрые пароли,
но строчек кода в ней всего ничего,
так что ее написание не займет много
времени.

Создай новый файл


Открой IDLE, зайди в меню File,
выбери New File и сохрани
файл как password_picker.py
(«генератор паролей»). Модуль random нужен для выбора
случайных значений.

Добавь модули
import random
Загрузи модули string
(«строка») и random import s t r in g
из стандартной библио­
теки Python, добавив Модуль string позволяет работать
этот код в самое начало со строками — например, делить
программы. их на части или менять их вид.

Выводит на экран приветствие.


Поздоровайся
import random
Для начала создай
приветственное import s t r in g
сообщение. p r i n t ( 'Добpo пожаловать!')
Проверь работу программы
Добро пожаловать!
Запусти программу. В окне консоли
должно появиться приветствие.
Каждый элемент Разделяй
Список хранится списка является элементы
в переменной adjectives. строкой. запятыми.
Создай список прилагательных
import s t r in g
Для составления паролей понадобятся
английские прилагательные и сущест­
вительные. Удобнее всего их хранить a d je c t iv e s = [ 's le e p y ', 's lo w ', 'h o t ',
в двух списках. Сначала создай
список adjectives («прилагательные»), 'c o ld ', 'b ig ', 'r e d ',
поставив его между командой 'o ra n g e ', 'y e llo w ', 'g r e e n ',
import и вызовом функции print().
' b l u e ' , 'g o o d ', ' o l d ' ,
Затем присвой ему значение. Для
'w h it e ', 'f r e e ', 'b ra v e '] Список заключают
этого внутри квадратных скобок
в квадратные
введи элементы списка, разделив скобки.
их запятыми.
p r i n t ( ' Добpo пож аловать!')

Создай список существительных


'w h it e ', 'f r e e ', 'b ra v e ']
Теперь создай список nouns
(«существительные»), хранящий
существительные, и введи сле­ nouns = [ 'a p p le ', 'd in o s a u r ', 'b a ll',
дующий код сразу после списка
прилагательных. Не забывай 'c a t', ' g o a t' , 'd rag o n ' ,
про запятые и квадратные скобки. ' c a r ' , 'd u c k ', 'p an d a']

СОВЕТЫ ЭКСПЕРТА p r i n t ( ' Добpo пож аловать!')

Случайные числа
Случайные числа позволяют Выбери слова
имитировать вытаскивание карты Чтобы создать пароль, программе нужно выбрать случайное
из колоды, подбрасывание монетки прилагательное и случайное существительное. Получить
и т. д. Больше о случайных числах их можно с помощью функции choice() («выбрать»)
и модуле random можно узнать из модуля random. Введи этот код после команды print().
из справки (раздел Python Docs (Функция choice() возвращает случайный элемент
в меню Help). из переданного ей списка.)

p r i n t ( Д обpo пож аловать!')


Прилагательное
случайным образом
выбирается из списка
a d je c t iv e = ra n d o m .c h o ic e (a d je c tiv e s ) adjectives.
noun = random .choice(nouns)

В эту переменную попадет случайное слово


из списка существительных.
Сгенерируй число
СОВЕТЫ ЭКСПЕРТА
Получи случайное число от 0 до 99, вызвав функцию
randrange() («диапазон случайного») из модуля random. Константа
Добавь этот код в конец программы.
Константа — особый вид переменных,
содержимое которых нельзя изменять.
noun = random .choice(nouns)
Константа string.punctuation («строка,
number = random .randrange(0, 100) пунктуация») содержит строку
с символами. Чтобы ее увидеть, введи
в окне консоли import string, а затем
print(string.punctuation).
Получи символ
Снова воспользуйся функцией random.choice(),
добавив в код команду для выбора случайного >>> import s t r in g
символа. Так пароль будет еще сложнее взломать!
>>> p r in t (s t r in g .p u n c t u a tio n )
!"#$%&'( ) * + , - . / : ;<=>?@[\]˄_ ' { |}~
number = random .randrange(0, 100)
s p e c ia l_ c h a r = ra n d o m .ch o ic e (strin g . punctuation) Символы, хранящиеся в этой константе.

Это константа.
Пароль будет храниться Преобразует случайное
в этой переменной. число в строку.

Создай пароль
Пришла пора соединить все password = a d je c t iv e + noun + str(num b er) + s p e c ia l_ c h a r
имеющиеся части в один надежный p r i n t ('Новый пароль: %s' % password)
пароль. Добавь эти строчки кода
в конец программы.
Выводит на экран новый пароль.

СОВЕТЫ ЭКСПЕРТА
Строки и целые числа
Функция str() преобразует
>>> p r i n t ( 'тр асса ' + 95)
целое число в строку. Если
попытаться сложить число Traceback (most recen t c a l l l a s t ) :
и строку без этой функции, F ile ' < pyshell# 0> ' , lin e 1, in <module> Сообщение
Python выдаст ошибку. об ошибке.
p r i n t ( 'тр асса ' + 95)
Попробуй сам: введи
в окне консоли команду T y p e E rro r: C a n 't co n ve rt ' i n t ' o b je ct to s t r im p lic it ly
print ('трасса * + 95).

Чтобы исправить эту ошибку, >>> p r i n t ( ' трасса ' + s t r ( 9 5 ) )


преобразуй число в строку Число нужно написать внутри
трасса 95 скобок функции str().
при помощи функции str().
Запусти программу
Самое время запустить программу Добро пожаловать!
и посмотреть, что появится в окне консоли. Новый пароль: bluegoat92=
Если возникнут ошибки, не волнуйся,
а внимательно проверь весь код.
У тебя должен отобразиться
другой случайный пароль.
Еще один?
Чтобы программа могла генерировать новые пароли
по запросу пользователя, нам понадобится цикл while.
Добавь в программу этот код. Он спрашивает, нужно
ли подобрать другой пароль, и сохраняет ответ
Незабудь сохранить
свою работу.
пользователя в переменной response («ответ»).

p r in t ('Добро пож аловать!')

w hile True:
a d je c tiv e = ra n d o m .ch o ic e (a d je ctiv e s) Эти строчки нужно
вводить с отступом,
noun = random .choice(nouns) чтобы они попали
number = random .randrange(0, 100) в цикл while.

s p e c ia l_ c h a r = ra n d o m .c h o ic e (strin g .p u n c tu a tio n )

password = a d je c tiv e + noun + str(nu m b er) + s p e c ia l_ c h a r


p r in t ('Новый пароль: %s' % password)

response = in p u t( 'Сгенерировать другой пароль? Введите д или н: ')


i f response == ' н ' :
break

Завершает цикл while. Функция input() запрашивает При ответе «да» (д)
у пользователя ответ. цикл запустится снова,
а при ответе «нет» (н)
он завершится.
Выбери лучший пароль
Вот и всё! Теперь ты можешь создавать надежные
пароли, которые легко запоминаются!

Добро пожаловать! Чтобы получить новый


Новый пароль: yellow apple42} пароль, введи здесь «д».

Сгенерировать другой пароль? Введите д или н: д


Введи «н», чтобы выйти
Новый пароль: greenpandal3* из программы.
Сгенерировать другой пароль? Введите д или н: н
Что бы изменить?
А теперь давай усовершенствуем программу,
добавив ей новые возможности. Подумай:
как можно сделать пароль еще надежнее?

Больше слов
nouns = [ 'a p p le ', 'd in o s a u r ', 'b a ll',
Чтобы увеличить количество паролей,
которые может выдать программа, ' c a t ' , 'g o a t ', 'd ra g o n ',
добавь в списки прилагательных ' c a r ' , 'd u c k ', 'p a n d a ',
и существительных новые слова.
' te le p h o n e ' , ' banana' , ' te a c h e r']

w hile T ru e :

fo r num in ra n g e (3 ):
a d je c t iv e = ra n d o m .c h o ic e (a d je c tiv e s)
noun = random .choice(nouns)
Эти строки должны
number = random .randrange(0, 100) быть с отступом.
s p e c ia l_ c h a r = ra n d o m .c h o ic e (strin g .p u n c tu a tio n )

password = a d je c t iv e + noun + str(nu m b er) + s p e c ia l_ c h a r


p r i n t ('Новый пароль: %s' % password)

response = in p u t( 'Сгенерировать другой пароль? Введите д или н: ')

Несколько паролей
Измени код так, чтобы программа
выдавала сразу три пароля. В этом
тебе поможет цикл for. Помести
его внутрь цикла while.

Длинный пароль Добавь случайное забавное


прилагательное.
Чтобы пароль получился длиннее
(и надежнее), добавь в него еще одно
слово. Например, случайное забавное Новый пароль: hairybluepotato33%
прилагательное.
Модули
Модуль — это блок готового кода, который решает
типовую задачу. Включив в программу модули,
ты сможешь сосредоточиться на более интересных
задачах. К тому же модулями пользуется много людей,
и потому баги в них встречаются редко.

Встроенные модули I I

В комплекте с Python идет множество


модулей. Все вместе они называются
стандартной библиотекой. Вот несколько
любопытных модулей, которые могут
тебе пригодиться.
datetime
Модуль datetime («дата-
время») предназначен
для работы с датами. С его
помощью ты сможешь
узнать сегодняшнюю дату
и выяснить, сколько дней
осталось ждать какого-то
statistics события.
Модуль statistics («статистика») поможет
найти среднее значение или выяснить,
какое число чаще всего встречается
в списке. С его помощью можно, например,
узнать средний балл среди игроков.

random webbrowser
Ты уже использовал Этот модуль позволяет
этот модуль для управлять веб-браузером,
генерации случайных открывая интернет-
паролей. Он хорош, страницы прямо
если в код нужно из твоего кода.
добавить элемент
случайности.

socket
Модуль socket («разъем») позволяет
программам общаться по сети или
через интернет. Его можно использовать
при создании онлайн-игры.
И спол ьзовани е модуля
Для начала модуль нужно загрузить в программу
с помощью команды im port. Сделать это можно
разными способами, в зависимости о т того, как
именно ты хочешь его использовать.

Загружает модуль
webbrowser.

import...
>>> import webbrowser
Ключевое слово import открывает
доступ ко всему содержимому модуля, >>> webbrowser. open( ' h t t p s : //d o c s . python.o r g / 3 / lib ra ry ' )
однако название модуля придется
писать перед вызовом каждой принад­
Название модуля следует писать перед
лежащей ему функции. Этот код загру­
названием каждой принадлежащей ему
жает все функции модуля webbrowser функции.
и открывает сайт Python с помощью
функции open() («открыть»). Из модуля random загрузится
только функция choice().

from... import...
>>> from random import choice
Если тебе нужна лишь часть модуля,
ключевое слово from («из») позволит >>> d ir e c t io n = c h o i c e ( [ 'C ', 'Ю' З ', ' В ' ] )
загрузить только ее. При этом названия >>> p r in t ( d ir e c t io n ) ■Название модуля
функций можно вводить как обычно. указывать не нужно.
Вот пример загрузки из модуля random
функции choice(), которая выбирает
случайный элемент из списка. Выводит на экран случайно
выбранную сторону света.
Загружает и переименовывает
функцию time().

from... import... as...


>>> from time import time as time_now
Иногда нужно изменить имя загружае­
мого модуля или функции — например, >>> now = tim e_now()
потому что такое имя уже существует >>> p rin t(n o w ) В этой переменной сохраняется
или оно плохо запоминается. Для этого переименованная функция.
1527847928.510616
служит ключевое слово as («как»).
После него нужно написать новое имя.
Вот пример, в котором функция time()
Количество секунд, прошедших
(«время»), возвращающая текущее время,
с 00:00 1 января 1970 года.
загружается под именем time_now()
(«текущее время»). Результат работы
программы — количество секунд,
прошедших с 1 января 1970 года (даты,
от которой ведет отсчет времени
большинство компьютеров).
Знаки вопроса, Оставшиеся

«Девять жизней» заменяющие буквы, служат


подсказкой для игрока.
жизни показаны
в виде сердечек.

В этой остросюжетной игре нужно [ '? ' , '? ' , '? ' , '? ', '?']
называть буквы и угадывать слова. Осталось жизней:
Если букву угадать не получается, Угадайте букву или слово целиком: а
игрок теряет жизнь. Думай над ['?','?', '? ' , '? ', 'а']
каждым ответом, ведь когда жизни Осталось жизней:
закончатся, игра завершится! Угадайте букву или слово целиком: и
['?', ' и' , ' ? ' , ' ? ' , 'а']
Осталось жизней:
Что п р о и с х о д и т
Угадайте букву или слово целиком: у
Программа выводит на экран загаданное Неправильно. Вы теряете жизнь
слово, в котором вместо букв — знаки
['?' , ' и ' , ' ? ’ , ' ? ' , ' а ' ]
вопроса. Если ты отгадаешь букву, программа
Осталось жизней:
ее «откроет». Если же ты знаешь слово,
введи его целиком. Игра закончится, если Угадайте букву или слово целиком: ц

слово угадано либо израсходованы все [ ' ? ' , 'и', ' ц' , ' ц ' , 'а']
жизни. Осталось жизней:
Угадайте букву или слово целиком: н
При каждом правильном Неправильно. Вы теряете жизнь
ответе в слове «открывается»
угаданная буква. ['?, 'и ' , ' ц' , 'ц' , 'а']
Осталось жизней:
Если ответ неправильный, Угадайте букву или слово целиком: пицца
одно сердечко исчезает
Победа! Было загадано слово пицца
(жизнь сгорает).

Если ты знаешь слово,


введи его целиком.
Блок-схема программы
Как это р а б о т а е т Начало «Девять жизней»
Сначала нужно создать два списка: Эта блок-схема сложна на вид, однако
один для хранения секретных код игры сравнительно невелик.
слов, а второй — для подсказки Основная часть программы — это цикл,
проверяющий, есть ли указанные
в виде ряда вопросительных
буквы в загаданном слове и остались
знаков. Затем при помощи ли еще жизни у игрока.
модуля random программа
случайным образом выбирает
секретное слово из списка.
Остается добавить цикл для
проверки ответов пользователя
и создать функцию, обновляющую
подсказку по мере отгадывания
букв.

СОВЕТЫ ЭКСПЕРТА
Символы Юникода
В письменных языках мира
буквы, цифры, знаки препи­
нания, смайлики и другие
элементы записываются
при помощи символов. Чтобы
компьютер мог отобразить
их на экране, символы нужно
закодировать. Для кодирова­
ния используются различные
системы. Так, для знаков
английского языка применя­
ется набор символов ASCII.
Сердечки для нашего проекта
можно взять из набора Юникод,
в котором есть множество
значков, включая эти.
Подготовка
Создавать код игры «Девять жизней» лучше
в два этапа. Сначала загрузим необходимые
модули и объявим несколько переменных,
а затем напишем основной код программы.

Создай новый файл Загрузи модуль


Открой IDLE, создай новый файл и сохрани В этом проекте используется модуль
его как nin ejives.p y («девять жизней»). random. Введи следующую строчку
кода, чтобы его загрузить.

im port random

Объяви переменную
import random
После строки с командой import объяви В начале игры у игрока
переменную lives, в которой будет 9 жизней.
храниться количество оставшихся жизней liv e s = 9
(попыток ввода).

Создай список со словами


liv e s = 9
Программа будет загадывать только
те слова, которые ты поместишь в список words = ['п и ц ц а ', 'ангел', 'мираж', ' носки' ,
words («слова»). Добавь этот код после ' выдра' , ' п е т у х ']
объявления переменной lives.

Каждый элемент списка — это строка,


состоящая из 5 символов.

Добавь слова
words = ['пицца', 'ангел', 'мираж', 'носки',
В начале каждой игры программа
будет случайным образом выбирать 'выдра', 'петух']
слово и сохранять его в переменной secret_w o rd = random .choice(w ords)
secret_word («секретное слово»).
Добавь команду, объявляющую
Здесь используется
эту переменную.
функция choice()
из модуля random.
Создай список с подсказкой
СОВЕТЫ ЭКСПЕРТА
Создай еще один список с подсказкой.
Поначалу в нем будут только знаки вопроса, Длина слова
но по мере отгадывания слова они будут
заменяться буквами. Список можно записать Будь внимателен: добавляй в игру только
так: clue =['?', '?', '?', '?', '?',], однако удобнее слова из 5 букв, ведь в списке с подсказкой
ввести следующий код, который делает то же есть место только для 5 символов. Если
самое. Добавь эту строку после объявления слово будет длиннее, при попытке обра­
переменной secret_word. титься к несуществующим элементам списка
c lue («подсказка») Python выдаст ошибку.

secret_w ord = random .choice(w ords)


clu e = 1i s t ( ' ? ? ? ? ? ' ) Index e r r o r : l i s t assignment index

Список из 5 знаков вопроса out of range


хранится в переменной clue.
Если же ты добавишь слово с меньшим
количеством букв, ошибок не возникнет,
однако игрок все равно увидит 5 знаков
вопроса и подумает, что загаданное слово
длиннее, чем оно есть. Так программа
будет работать со словом «жук».

[?','?' ' ]
Покажи количество жизней
Осталось жизней:
Для отображения жизней в этом проекте
используется символ Юникода «сердечко». Угадайте букву или слово целиком: ж
Добавь код, сохраняющий его в переменной ['ж', '? ', '? ', '? ', '? ']
heart_symbol («символ “сердечко”»).
Осталось жизней:
Угадайте букву или слово целиком: у
clue = l i s t ( ' ? ? ? ? ? ’ )
['ж', 'у', ' ? ' , ' ? ' , '?']
heart_sym bol = u ' \ u 2 7 6 4 '
Осталось жизней:
Угадайте букву или слово целиком: к
['ж', 'у', 'к', ' ? ' , '?']
Состояние игры
Осталось жизней:
Объяви переменную, которая будет хранить данные
о том, угадал игрок слово или нет. Присвой ей Угадайте букву или слово целиком:
значение False, поскольку в начале игры слово,
разумеется, еще не отгадано. Введи этот код после Последние два знака вопроса лишние:
объявления переменной heart_symbol. таких букв в слове нет.

Игрок никогда не выиграет, поскольку


heart_sym bol = u' \u2764'
не сможет «открыть» последние два знака
g ue sse d _w o rd _co rre ctly = F a ls e вопроса!

Одно из двух булевых значений (True или False).


Есть ли буква в слове?
О сн о в н о й код
Если введенная пользователем буква есть
Основная часть кода — это цикл, который в загаданном слове, подсказку нужно обновить.
запрашивает у игрока букву и проверяет, Для этого создай функцию update_due()
есть ли она в слове. Если буква угадана, («обновить подсказку»), принимающую три
аргумента: букву, загаданное слово и подсказку.
подсказка обновляется с помощью функции
Добавь этот код после объявления переменной
update_due(). Сначала создадим эту функцию, guessed_word_correctly («слово отгадано
а потом напишем сам цикл. верно»).

Как это работает


g u e sse d _w o rd _co rre ctly = F a ls e
В теле функции есть цикл while,
перебирающий загаданное слово
по буквам и проверяющий, совпадает
def u p d a te _ c lu e (g u e s s e d _ L e tte r, se c re t_w o rd , c lu e ) :
ли хоть одна из них с введенной
index = 0 Функция len() возвращает
пользователем, которая хранится количество букв в строке;
в переменной guessed_ letter w h ile index < le n (s e c r e t _ w o r d ): в данном случае их 5.
(«отгаданная буква»). Переменная
i f g u e s s e d _ le tte r == s e c re t_ w o rd [in d e x ]:
index («индекс») содержит позицию
буквы, которая обрабатывается c lu e [in d e x ] = g u e s s e d _ le tte r Увеличивает значение
кодом цикла в текущий момент. переменной index
index = index + 1 на 1.

При совпадении введенной пользователем буквы с буквой загаданного слова


программа подставляет ее в подсказку, используя значение index для поиска
позиции в списке clue.

Угадай букву или слово


index = index + 1 Цикл будет запускаться,
Программа должна раз
пока жизни не закончатся.
за разом просить игрока
ввести букву или слово w h ile liv e s > 0 :
целиком, пока он его
p r in t ( c lu e )
не отгадает или пока
не закончатся его жизни. p r i n t ( 'Осталось жизней: ' + heart_sym bol * l i v e s )
Добавь этот код после guess = in p u t( 'Угадайте букву или слово целиком: ')
функции update_clue().
Просит игрока ввести
i f guess == se cre t_w o rd : букву или слово.
Выводят на экран подсказку I g u e sse d _w o rd _co rre ctly = True
и количество оставшихся
жизней. break Когда слово будет угадано,
эта команда завершит цикл.

Обновляют подсказку, если i f guess in se cre t_w o rd :


введенная буква есть в слове.
u p d a te _clu e (g u e ss, se c re t_w o rd , c lu e )
e ls e :
p r i n t ( ' Неправильно. Вы теряете ж изнь')
Если буквы в слове нет
(else), количество жизней li v e s = l i v e s - 1
уменьшается на 1.
СОВЕТЫ ЭКСПЕРТА

Повторение строк
В строке print('Осталось жизней:' +
heart_symbol * lives), которая выводит >>> heart_sym bol = u '\u2 76 4'
на экран сердечки, использован хитрый >>> p rin t(h e a rt_s y m b o l * 10)
трюк: чтобы повторить строку указанное
количество раз, ее можно умножить на число.
Например, код print(heart_symbol * 10)
выведет на экран 10 сердечек. Попробуй
ввести его в окне консоли.

Игрок победил?
Когда игрок введет слово целиком, нужно проверить,
угадал ли он его. Если значение переменной
guessed_word_correctly равно True, значит,
цикл завершился прежде, чем закончились
жизни, и игрок победил. Иначе (else) он проиграл.
Добавь этот код в конец программы.

liv e s = liv e s - 1
Сокращенная запись команды
if guessed_word_correctly = True
i f g u e sse d _w o rd _c o rre ctly :
p r i n t ( ' Победа! Было загадано слово * + se cre t_w o rd )
e ls e : Не забудьсохранить
p r i n t ( ' Проигрыш! Было загадано слово ' + se cre t_w o rd ) свою работу.

Проверь работу программы


['?, ? ' ]
Запусти игру и убедись, что она работает.
Если что-то пошло не так, тщательно проверь Осталось жизней:
код на наличие ошибок и исправь их. А потом Угадайте букву или слово целиком:
позови друзей сразиться в чемпионате
под названием «Девять жизней»!
Введи букву, чтобы начать игру!
Что бы изменить?
Эту игру можно дорабатывать как душе
угодно: усложнять или упрощать, добавлять
слова или изменять их длину.

Добавь слова
Увеличь список слов для отгадывания: их может
быть сколько угодно много, однако не забывай,
что все слова должны состоять из 5 букв.

words = ['п и ц ц а ', 'а н г е л ', 'мираж', 'н о с к и ', 'вы д р а', 'п е т у х ', 'б а н а н ', 'к о к о с ', 'о ле н ь ']

Измени количество жизней Длинные слова


Увеличь или уменьши количество жизней, Если ты считаешь, что 5 букв —
чтобы сделать игру проще или сложнее. это слишком просто, возьми
Для этого обнови значение переменной слова подлиннее, лишь бы
lives, созданной на шаге 3. количество букв в них было
одинаковым. Пролистай
толковый словарь и найди
самые длинные и необычные
слова — пусть твоя игра
станет чертовски сложной!

Д о б а в ь у р о в н и сл о ж н о с ти
Чтобы играть стало интереснее, предложи
игроку выбрать уровень сложности: чем выше
сложность, тем меньше жизней.

Запроси уровень
Перед циклом while добавь код, предлагающий
игроку выбрать уровень сложности.

d if f ic u lt y = in p u t ('Выберите уровень сложности (1 , 2 или 3 ) : \ n 1 Легкий\n 2 Средний\n 3 Трудный\n ')


d iff ic u lt y = in t ( d if f ic u lt y )
Превращает строковое значение
переменной difficulty в целое число

w hile liv e s > 0:


Проверь работу программы
Выберите уровень сложности (1 , 2 или 3 ):
Запусти программу и убедись,
что она работает. В окне консоли 1 Легкий
должно появиться такое сообщение. 2 Средний
3 Трудный

Задай сложность
С помощью команд if, elif и else задай
количество жизней для каждого уровня
сложности: например, 12 для легкого,
9 для среднего и 6 для трудного. Добавь
следующий код после команд, запрашива­
ющих у пользователя уровень сложности.

d i f f i c u l t y = in p u t( 'Выберите уровень сложности (1 , 2 или 3 ):\ n 1 Легкий\n 2 Средний\n 3 Трудный\n ')


d iff ic u lt y = in t (d if f ic u lt y )

i f d i f f i c u l t y == 1:
l i v e s = 12
e l i f d i f f i c u l t y == 2:
liv e s = 9
e ls e :
liv e s = 6

Слова разн ой длины


А если добавить в игру слова
с разным количеством букв?
Сколько знаков вопроса должно
быть в списке, если длина секрет­
ного слова неизвестна заранее?
Вот хитрый способ, который
поможет решить эту проблему.

Создай пустой список


c lu e = []
Не заполняй список с подсказкой знаками
вопроса, а оставь его пустым. Внутри квадратных скобок
должно быть пусто.
Добавь новый цикл
c lu e = []
Чтобы после выбора слова список cl ue
оказался нужной длины, используй этот index = 0
код. Узнав количество букв в слове, он w h ile index < le n (s e c r e t _ w o r d ):
добавит в clue по одному знаку вопроса
для каждой буквы. c lu e .a p p e n d ( ' ? ' )
index = index + 1

Функция append() («добавить») добавляет


новый элемент в конец списка.

Ум ное з а в е р ш е н и е и гр ы
Сейчас, чтобы закончить игру, надо ввести слово целиком. Давай
изменим код так, чтобы игра прекращалась, как только игрок
откроет последнюю неотгаданную букву. В начале игры все
буквы неизвестны.

Создай еще одну переменную


Создай переменную для хранения количества u n kn o w n _lette rs = le n (s e c re t_ w o rd )
неотгаданных букв. Введи этот код перед
функцией update_clue.

Измени функцию
Измени код функции update_clue(), как
показано ниже. Когда игрок отгадает букву,
программа вычтет из значения переменной
unknown_letters («неотгаданные буквы») то
количество букв, которое откроется в слове.

def update_clue(guessed_l e t t e r , se cre t_w o rd , c lu e , u n k n o w n _ le tte rs ):


index = 0
Добавь этот
w hile index < le n (s e c re t _ w o rd ):
аргумент в функцию
i f guessed_ le t t e r == s e c re t_ w o rd [in d e x ]: update_clue.

c lu e [in d e x ] = g u e sse d _ le tte r


unkno w n_letters = unknown l e t t e r s - 1
index = index + 1 Уменьшает значение
переменной
unknown_ letters
return unknown le t t e r s на 1 , когда находит
каждую отгаданную
букву в слове.
Возвращает количество
неотгаданных букв.
Как это работает
Зачем изменять значение переменной
unknown_ letters именно внутри функции
update_clue()? Почему бы просто не вычесть
единицу, выяснив, что игрок угадал букву? Потому
что этот вариант сработает, лишь если ни одна
буква в слове не повторяется, — иначе значение
unknown_ letters будет неверным. Обновляя пере­
менную внутри функции, программа уменьшает ее
значение на 1 для каждой буквы, повторяющейся
в слове, и делает это одновременно с проверкой
букв на совпадение с ответом игрока.

Передай значение переменной


Кроме того, нужно изменить функцию
update_clue(), передав в нее значение
переменной unknown_ letters и сохранив
новое значение функции обратно
в переменную.

i f guess in se c re t_w o rd :
u n kno w n_letters = u p d a te _clu e (g u e ss, se cre t_w o rd , c lu e , unknown_l e t t e r s )
e ls e :
Передача значения переменной
p r i n t ( ' Неправильно. Вы теряете ж изнь') unknown_letters в функцию
liv e s = liv e s - 1 update_clue().

Присваивает переменной unknown_ letters


новое значение.

Выигрыш
Если значение переменной unknown_ letters
уменьшилось до 0, значит, игрок отгадал все
буквы. Добавь этот код в конец основного цикла.
Теперь программа автоматически распознает
выигрыш, если все буквы в слове открыты.

liv e s = l i v e s - 1

i f unknown_l e t t e r s == 0 :
g u e sse d _w o rd _co rre ctly = True
break

Команда break завершает цикл,


если все буквы в слове отгаданы.
Черепашья
графика
«Сборщик роботов»
Создавать графические изображения на Python
легко. Модуль turtle («черепашка») позволяет
перемещать по экрану черепашку, рисующую
картинки. Цель этого проекта — научить черепашку
рисовать робота-андроида!

Что п р о и сх о д и т
После запуска программы появляется графическое
окно, по которому движется черепашка, рисуя
дружелюбного робота. Можно наблюдать, как
она создает его часть за частью.

Цвета частей
робота можно
менять.

Создай другого
робота, изменив
размеры прямо­
угольников, из ко­
торых он состоит.
Блок-схема программы
Как это р а б о т а е т «Сборщик роботов»
Сначала создадим функцию, которая рисует Блок-схема показывает, какие команды
прямоугольники, а затем научим программу выполняет программа. Сначала она задает
составлять из них робота. Размер и цвет цвет фона и скорость черепашки, затем
черепашка по частям рисует робота,
прямоугольников можно выбирать, меняя
начиная с ног и заканчивая головой.
аргументы функции: ноги могут быть длин­
ными и узкими, глаза квадратными и т. д.

Не называй меня черепахой!


Никогда не сохраняй файлы программ, использующих
черепашку, под именем turtle.py: Python запутается
и выдаст кучу ошибок.

Рисование черепашкой
Модуль turtle позволяет управлять инструментом
«черепашка», который оснащен пером. С помощью
функций модуля черепашку можно заставить двигаться
в нужном направлении и рисовать самые разные картинки.
Также можно указать, когда опустить перо и начать
рисовать, а когда поднять и переместиться в другую
часть экрана, не оставляя за собой следа.

Черепашка движется вперед на 100 пикселей,


поворачивает налево на 90 градусов и проходит
еще 50 пикселей.

t .fo rw ard(100)
t . l e f t (90)
t .fo r w a r d (50)
Создай новый файл
Рисуем п р я м о у г о л ь н и к и
Открой IDLE и создай
Загрузим модуль tu rtle и нарисуем новый файл, сохранив
с его помощью прямоугольники. его как robot_builder.py
(«сборщик роботов»).

Загрузи модуль turtle


im port t u r t le as t
Добавь в начало программы эту строчку.
Команда import turtle as t позволяет
Создает для модуля turtle
вызывать функции модуля turtle, указывая псевдоним «t».
вместо полного названия модуля просто
«t». Это все равно что называть Ярослава
сокращенным именем Яр. Как и все языки программирования,
Python использует американское написание
color («цвет»), а не английское colour.

Создай функцию rectangle()


def r e c t a n g le (h o r iz o n t a l, v e r t i c a l , c o lo r)
Создай функцию для рисования прямо­
угольников, из которых состоит робот. t .pendown( )
Функция rectangle() («прямоугольник») Опускает перо и начинает
t . p e n s iz e (l) рисовать.
принимает три параметра: ширину, высоту
и цвет прямоугольника. Воспользуемся t .c o lo r ( c o lo r )
Числа внутри списка
циклом, в котором во время каждого t .b e g i n _ f i l l () range (1,3) означают,
из двух проходов будет появляться одна что цикл сделает
for counter in range(l, 3):
горизонтальная и одна вертикальная 2 прохода.
сторона прямоугольника. Добавь эту t .forward(horizontal)
функцию после кода, введенного на шаге 2. t .right(90)

Этот блок кода рисует t .forward(vertical)


прямоугольник.
t.right(90)
t.end_fill() Поднимает перо, чтобы
В таком порядке
прекратить рисование.
черепашка рисует сто­ t .penup()
роны прямоугольника.

СОВЕТЫ ЭКСПЕРТА

Режим черепашки
Твоя черепашка работает в стандартном Обычно черепашка выглядит
как стрелочка. Эта строчка
режиме. Это значит, что после запуска
превращает ее в черепашку.
программы она будет смотреть вправо.
С помощью функции setheading() («задать
направление») ее можно развернуть t . sh a p e (' t u r t l e ')
на определенный угол: значение 90 на­ t . se th e ad in g (0 )
правит ее вверх, 180 — влево, а 270 —
t . fo rw a rd (80)
вниз.
Добавь фон
СОВЕТЫ ЭКСПЕРТА
Теперь нужно подготовить черепашку к рисованию
Скорость черепашки и задать цвет фона графического окна. Вначале перо
черепашки должно быть поднято — до тех пор, пока
Скорость черепашки можно менять она не начнет рисовать ступню робота (шаг 5). Введи
от самой медленной до самой следующие строки после кода, добавленного на шаге 3.
быстрой, вызывая функцию t.speed()
(«скорость») с одним из этих значений
в качестве аргумента: slowest, slow,
Поднимает перо черепашки.
normal, fast и fastest.
Устанавливает
скорость «медленно».
t .penup(
)
t.speed('slow')
t .b g c o lo r ( ' Dodger b lu e ')

Делает фон светло-


васильковым.

С о зд а е м р о б о т а
Теперь можно приступать к созданию робота.
Давай нарисуем его по частям, начиная со ступней.
Робот будет состоять из прямоугольников разного
размера и цвета, которые нужно расположить
в разных частях окна.

Нарисуй ступни
Помести черепашку в позицию первой ступни и нарисуй
прямоугольник, вызвав функцию rectangle(). То же
касается и второй ступни. Введи эти строчки кода после
тех, что были добавлены на шаге 4, запусти программу
и проверь, появились ли ступни робота.
СОВЕТЫ ЭКСПЕРТА

Этот комментарий поясняет, Комментарий (#)


какую часть робота мы рисуем.
Некоторые строчки кода в этой
Перемещает черепашку программе начинаются со знака
# ступни
в точку с координатами «решетка» (#). То, что стоит после
t .g o t o (-1 0 0 , -150) х =-100, у = -150. него, — это комментарий. Ком­
re c ta n g le (5 0 , 20, 'b lu e ') ментарии нужны, чтобы пояснять
Рисует синий прямоугольник работу кода. Python знает об этом
t .g o t o (-3 0 , -150)
шириной 50 и высотой и игнорирует такие строчки.
re c ta n g le (5 0 , 20, 'b lu e ') 20 пикселей.
СОВЕТЫ ЭКСПЕРТА

Координаты черепашки
Python выставляет размеры графического
окна так, чтобы оно вписывалось в экран.
Предположим, что размер окна 400 х 400 пик­
селей. Для определения местоположения
черепашки Python использует координаты.
Это значит, что любой точке окна соответствуют
2 числа. Первое — координата х — показы­
вает, насколько черепашка смещена влево
или вправо от центра окна. Второе число —
координата у — обозначает смещение чере­
пашки от центра вверх или вниз. Координаты
обычно пишут в скобках и первой ставят х: (х, у).

Перемещает черепашку в точку


с координатами х = -25, у = -50.
Нарисуй ноги
# ноги
Следующие команды заставляют
черепашку переместиться в то t .g o t o (- 2 5 , -50)
место, откуда начнется рисование re c ta n g le (1 5 , 100, 'g r e y ') Рисует левую ногу.
ног. Введи эти строчки после кода,
добавленного на шаге 5, и снова t .g o t o (- 5 5 , -50)
запусти программу. re c ta n g le (- 1 5 , 100, 'g r e y ')

Рисует правую ногу.

Нарисуй туловище
# туловище
Введи эти строчки после кода,
Рисует красный
добавленного на шаге 6. Запусти t .g o t o (- 9 0 , 100) прямоугольник
программу: должно появиться re c ta n g le (100, 150, 'r e d ') размером 100
туловище робота. на 150 пикселей.
Нарисуй руки
# руки
Каждая рука состоит из двух
частей: верхней — плеча — t.g o to (- 1 5 0 , 70) Плечо левой
и нижней — предплечья. re c ta n g le (6 0 , 15, 'g r e y ') руки.
Введи эти строчки после кода,
добавленного на шаге 7, t .g o to (- 1 5 0 , 110)
запусти программу и убедись, re c ta n g le (1 5 , 40, 'g r e y ')
что у робота появились руки.

t.g o t o (1 0 , 70) Предплечье


левой руки.
re c ta n g le (6 0 , 15, 'g r e y ')
Предплечье t . g o to (5 5 , 110)
правой руки.
re c ta n g le (1 5 , 40, 'g r e y ')

Плечо правой
руки.

Нарисуй шею
# шея
Теперь создадим шею. Введи
команды рисования шеи после t . goto(- 5 0 , 120)
кода, добавленного на шаге 8. re c ta n g le (1 5 , 20, 'g r e y ')

Нарисуй голову
# голова
Упс, ты нарисовал безголового
робота! Чтобы снабдить беднягу t .g o t o (- 8 5 , 170)
головой, введи эти команды re c ta n g le (8 0 , 50, 'r e d ') Незабудьсохранить
после кода, добавленного свою работу.
на шаге 9.
Нарисуй глаза
# глаза
Давай добавим роботу глаза, чтобы он видел, Рисует
куда направляется. Для этого нарисуем в райо­ t .g o t o (- 6 0 , 160) белки глаз.
не головы белый прямоугольник с двумя re c ta n g le (3 0 , 10, 'w h it e ')
черными квадратиками (это белки и зрачки
глаз). Создавать функцию, рисующую квадраты, t . g o to (-5 5 , 155)
не нужно, ведь квадрат — это равносторонний re c ta n g le (5 , 5 , 'b la c k ')
прямоугольник. Введи эти команды после кода,
t .g o t o (- 4 0 , 155)
добавленного на шаге 10.
Рисует левый
re c ta n g le (5 , 5, 'b la c k ')
зрачок.

Рисует правый
зрачок.

Нарисуй рот
# рот
Теперь давай нарисуем роботу рот. Введи
эти строчки после кода, добавленного t .g o t o (- 6 5 , 135)
на шаге 11. re c ta n g le (4 0 , 5 , 'b la c k ')

Спрячь черепашку
t .h i d e t u r t l e ( )
И наконец, спрячь черепашку, иначе она
останется у робота на лице. Введи эту строчку
Делает черепашку
после кода, добавленного на шаге 12. Запусти
невидимой.
программу и наблюдай, как создается робот.
Что бы изменить?
Итак, программа запускается и работает.
А не хочешь ли ты изменить внешний вид робота?
Вот несколько идей, как это можно сделать.

Поменяй цвета
Робот и так разноцветный, но ты можешь
сделать его еще ярче! Например, подобрать
цвета, подходящие к обоям в твоей комнате,
или напоминающие цвета любимого футболь­
ного клуба. Справа и ниже перечислены
некоторые оттенки, известные черепашке.

Gold Peach Puff

Misty Rose
Peru
Deep Pink
Forest Green Navy Aquamarine

Maroon Lemon Chiffon

Измени лицо Сдвигает левый зрачок


# глаза в левый верхний угол
А еще можно изменить выражение лица робота.
t .g o t o (- 6 0 , 160) белого прямоуголь­
Например, этот код сделает его глаза и рот
ника, чтобы казалось,
перекошенными. re c ta n g le (3 0 , 10, 'w h it e ') будто робот вращает
глазами.
t .g o t o (- 6 0 , 160)
Перекошенный рот. Забавный взгляд.
re c ta n g le (5 , 5, 'b la c k ')
t . goto(- 4 5 , 155)

Сдвигает правый re c ta n g le (5 , 5, 'b la c k ')


зрачок вниз. Отклоняет черепашку
вправо, чтобы рот
# рот перекосился.
t .g o t o (- 6 5 , 135)
t . r ig h t (5 )
re c ta n g le (4 0 , 5, 'b la c k ')
Рука помощи
# руки
Добавь этот код, если хочешь приделать
к рукам робота кисти-захваты. Можешь t . g o to (-1 5 5 , 130)
дать волю воображению и поменять re c ta n g le (2 5 , 25, 'g re e n ')
их форму так, чтобы получились крюки,
клешни или что-то еще! t . goto(-1 4 7 , 130) Рисует зеленый
квадрат — основу
re c ta n g le (1 0 , 15, t .b g c o lo r ( ) )
кисти-захвата.
t .g o t o (5 0 , 130)
re c ta n g le (2 5 , 25, 'g re e n ') Рисует маленький
прямоугольник
t . g o to (58, 130) цвета фона, чтобы
re c ta n g le (1 0 , 15, t .b g c o lo r ( ) ) придать кисти
форму захвата.

Создай функцию arm()


Ц ел ьны е руки
Добавь в код эту новую функцию,
Если руки нарисованы в два которая рисует руку заданным цветом.
этапа, то менять их положение
или добавлять дополнительные t .e n d _ f ill( )
руки не очень удобно. Поэтому
t .penup()
предлагаю создать функцию, Заливает
которая рисует руку целиком. def a r m (c o lo r): нарисованный
контур цветом.
t .pendown( )
t .b e g i n _ f ill( )
t .c o lo r ( c o lo r )
t .f o r w a r d (60) Задает цвет.
t . r ig h t (90)
t . fo rw ard (5 0 )
t . r ig h t(9 0 )
t . fo rw ard (1 0 ) Выполняя
эти команды,
t . r ig h t(9 0 ) черепашка
рисует руку.
t . fo rw a rd (40)
t .le f t ( 9 0 )
t .fo rw a rd (5 0 ) Прекращает
заливку цветом.
t . r ig h t (90)
t .fo rw a rd (1 0 )
Снова
t . end_.fil l () разворачивает
черепашку
t . penup() вправо.
t . se th e a d in g (0 )
Добавь руки
СОВЕТЫ ЭКСПЕРТА
Замени все команды, которые стоят между
комментарием # руки и комментарием # шея, Пробы и ошибки
на этот код, трижды вызывающий функцию
arm() («рука»). Не всегда то, что ты задумал, будет получаться
с первого раза: без утомительных проб
и ошибок не обойтись. Если добавить
# руки после строчки t.speed('sIowest') команды
Разворачивает print(t.window_width()) («ширина окна»)
t .g o t o (- 9 0 , 85) черепашку, которая и print(t.window_height()) («высота окна»),
t.s e th e a d in g (1 8 0 ) находится в левой
Python отобразит в окне консоли ширину
части окна, влево.
a r m ('lig h t b lu e ') и высоту графического окна. Зная их,
можно нарисовать на листе в клетку
Функция arm() рисует или миллиметровке робота и определить
t.g o t o (- 9 0 , 20) руку голубого цвета. координаты его частей.
t.s e th e a d in g (1 8 0 )
a r m ('p u rp le ')

t.g o to (1 0 , 85) Разворачивает


черепашку, которая
t.s e th e a d in g (0 ) находится в правой
части окна, вправо.
arm (' goldenrod')

Руки в движении
Теперь, когда руки рисуются цельными, несложно
поменять их положение, чтобы создать впечатление,
будто робот чешет затылок или танцует! Для этого,
перед тем как приступить к рисованию руки, разверни
черепашку с помощью функции setheading().

Разворачивает черепаш­
# руки ку в сторону левого
t.g o t o (- 9 0 , 80) верхнего угла экрана.

t.s e th e a d in g (1 3 5 )
Рисует левую руку.
arm ('h o t p in k ')

Разворачивает
t .g o t o (1 0 , 80)
черепашку в сторону
t.s e th e a d in g (3 1 5 ) правого нижнего угла
экрана.
arm ('h ot p in k ')

Рисует правую руку.


«Радуга-пружинка»
Так же как из простых строк кода создаются Каждая окружность
отличается от предыдущей
сложные программы, из простых фигур цветом и размером.
можно составлять замысловатые изобра­
жения. Написав код «Радуги-пружинки»,
ты сможешь комбинировать цвета
и фигуры и создавать шедевры
цифрового искусства!

Что п р о и с х о д и т
Черепашка рисует окружности разных
цветов и размеров в разных частях экрана,
создавая яркий замысловатый узор.

Растущая спираль
Окружности будут накладываться
одна на другую со сдвигом, образуя
выходящую из центра спираль.
Черепашка начинает
рисовать окружности
из центра экрана.

<3 Гибкая программа


Чем дольше работает
программа, тем сложнее
получается узор на экране.
Меняя аргументы функции,
рисующей окружности, ты
сможешь создать еще более
психоделические картины.
Блок-схема программы «Радуга-пружинка»
Как это р а б о та е т
Программа задает параметры, которые не должны
В этом проекте используется модуль turtle меняться (вроде скорости черепашки), а потом
и хитрая техника наложения окружностей входит в цикл. Код цикла выбирает цвет, рисует
друг на друга по спирали. При отображении окружность, поворачивает и смещает черепашку,
а затем повторяется снова, завершаясь лишь
каждой окружности программа немного
вместе с программой.
меняет аргументы функции, чтобы следующая
окружность отличалась от предыдущей
и узор получался интереснее.

СОВЕТЫ ЭКСПЕРТА

Перебор цветов
Функция сусlе() («окружность») из модуля
itertools (сокр. от iterator tools —
«инструменты итераторов») делает узоры
разноцветными. Она перебирает элементы
в списке цветов по кругу, снова и снова.

Загрузи модуль turtle


Д ав а й р и совать!
Загрузи turtle — главный из необходимых
Сначала нарисуем обычную окружность, тебе модулей. Добавь эту строчку кода
а затем будем повторять это действие в начало программы.
с небольшими изменениями. Позднее код
можно будет доработать, чтобы сделать
узор интереснее. im port t u r t le

Создай новый файл Загружает модуль turtle.


Открой IDLE, создай новый файл
и сохрани его как rainbow-spiral.ру.
Настрой черепашку
import t u r t le
Этот код вызывает функции модуля turtle,
которые задают цвет фона, скорость
черепашки и толщину пера. t u r t le .b g c o lo r ( ' b la c k ') Скорость
черепашки.
t u r t le .s p e e d ( ' f a s t ')
Цвет фона.
t u r t le .p e n s iz e ( 4 )

Толщина пера.

Выбери цвет, нарисуй окружность


import t u r t le
Задай цвет окружности и проверь работу
кода. Добавь эти две строчки в конец
программы и запусти ее. t u r t ie .b g c o lo r ( 'b la c k ')
t u r t le .s p e e d ( ' f a s t ')
t u r t le .p e n s iz e ( 4 )

Цвет
t u r t l e . p e n c o lo r( ' re d ') окружности.
t u r t l e .c i r c l e ( 3 0 )

Команда для рисования


окружности.

Больше окружностей
import t u r t le
На экране появится окружность. Но нам мало
одной, поэтому поместим команды для рисова­ Здесь
ния окружности внутрь функции, добавив еще def d r a w _ c ir c l e ( s iz e ) : используется
одну строчку, чтобы функция сама себя вызывала. аргумент size
Этот трюк с бесконечным самозапуском t u r t le .p e n c o lo r ( ' re d ') («размер»).
называется рекурсией. Поскольку функцию t u r t le .c ir c le ( s iz e )
нужно создать до ее вызова, помести этот
d r a w _ c ir c le ( s iz e )
код перед основным кодом программы. Функция draw_circle()
(«нарисовать окружность»]
t u r t le .b g c o lo r ( ' b la c k ') сама себя вызывает
бесконечное количество
t u r t le .s p e e d ( ' f a s t ') раз.
t u r t le .p e n s iz e ( 4 )
draw c ir c le ( 3 0 )

Первый вызов функции.


Проверь код
СОВЕТЫ ЭКСПЕРТА
Запусти программу. Ты увидишь, как
Рекурсия черепашка упорно рисует одинаковые
окружности. Сейчас мы это исправим.
Ситуация, при которой функция вызывает саму
себя, называется рекурсией. Это еще один
способ зациклить код. Обычно при рекурсии
значения аргументов все время меняются.
В программе «Радуга-пружинка» при каждом
вызове функции draw_cirde() разным становится
положение окружности.

Измени цвет и увеличь размер


Чтобы получить интересный узор, внеси в код изменения. Теперь
цвет окружности будет меняться, а размер увеличиваться. В этом
коде функция cycle() («окружность») принимает список значений
и возвращает цикличный список, который можно бесконечно
перебирать функцией next() («следующий»).

import t u r t le
Загружает функцию cycle().
from it e r t o o ls import c y c le

c o lo rs = c y c l e ( [ ' re d ' , 'o ra n g e ', 'y e llo w ', 'g r e e n ', 'b lu e ', 'p u r p le '] )

Создает
def d r a w _ c ir c le ( s iz e ) : цикличный
t u r t le .p e n c o lo r (n e x t (c o lo r s )) список цветов.

t u r t l e .c i r c l e ( s i z e )
Берет следующий