Домашнее задание № 0

Инструменты важны для каждого разработчика. Если ты тратишь время на то, чтобы разобраться с правильными инструментами, на самом деле ты экономишь время, которое будешь тратить на написание и отладку кода.

1. Терминал

Терминал — это программа, позволяющая взаимодействовать с компьютером через непосредственный ввод команд. В этом курсе, вне зависимости от операционной системы твоего компьютера (Windows, MacOS, Linux), терминал будет необходимым инструментом.

Если у тебя MacOS или любой Linux (типа Ubuntu), то программа Terminal или что-то похожее уже установлена. Пользователям Windows мы рекомендуем использовать терминал Git Bash, который можно будет поставить на следующем шаге.

Счастливые обладатели Windows последних версий могут использовать человеческий встроенный терминал, но его требуется «включить». Для этого переходи в «Параметры» Windows → «Обновление и безопасность» → «Для разработчиков» и выбери «Режим разработчика». Далее, перейди в «Панель управления» → «Программы и компоненты» → «Включение или отключение компонентов», установи флажок напротив компонента «Подсистема Windows для Linux», после чего в меню «Пуск» появится приложение Bash — это и есть терминал. Хотя можно не заморачиваться и действовать как написано ниже.

2. Git

Git — распределенная система контроля версий и система управления исходным кодом (SCM), нацеленная на скорость работы, целостность данных и поддержке распределенных, нелинейных вариантов взаимодействия разработчиков. GitHub — это сервис хостинга git-репозиториев, которая помимо собственно поддержки git предоставляет множество дополнительных возможностей для взаимодействия пользователей (по факту GitHub — социальная сеть для разработчиков).

Результаты всех заданий этого курса нужно будет отправлять на GitHub используя git. Если у тебя ещё нет там учётки, пора её завести. Помни, что свои решения надо хранить строго в приватных репозиториях.

Важно изучить git не теоретически, а практически, то есть руками. При возникновении трудностей в дальнейшем всегда можно попрактиковаться в онлайн-визуализаторе: http://git-school.github.io/visualizing-git/.

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

2.1. Установка в Linux

Установить Git под Linux как бинарный пакет можно используя встроенный менеджер пакетов дистрибутива. Если твой линукс — Fedora, тогда вызывай в терминале yum:

$ yum install git

Если же это линукс, основанный на Debian (например, Ubuntu), тогда вводи вот что:

$ apt-get install git

Если это всё не подходит, то посмотри инструкцию по установке на сайте Git http://git-scm.com/download/linux.

2.2. Установка на Mac

Существует несколько способов установки Git на Mac. Самый простой — установить Xcode Command Line Tools. В версии Mavericks (10.9) и выше достаточно в терминале выполнить команду git. Если git ещё не установлен, операционная система предложит это сделать.

Если нужна более свежая версия — установщик git для OS X доступен для скачивания с сайта http://git-scm.com/download/mac.

2.3. Установка в Windows

Для установки Git в Windows также имеется несколько способов. Официальная сборка доступна для скачивания на сайте http://git-scm.com/download/win. Обратите внимание, что это проект, называемый Git для Windows (или же msysGit). Он включает не только собственно git, но и массу вспомогательных возможностей для работы в Windows. В частности, такой возможностью является Git Bash, о котором было сказано ранее.

2.4. Основные команды git

git init

Создание репозитория в текущей директории.

git clone <url>

Склонировать репозиторий в новую директорию.

git status

Показывает текущее состояние рабочего дерева.

git pull <репозиторий> <ветвь>

Скачать изменения из одного репозитория в другой или в локальную ветку.

git push <репозиторий> <ветвь>

Отправить локальные изменения в удаленный репозиторий.

git add <файл(ы)>

Добавить содержимое файлов в индекс.

git commit -m <Сообщение об изменениях>

Запись изменений в репозиторий с соответствующми сообщением.

git branch

Получение списка или удаление веток.

git checkout

Переключение на ветку или пути в рабочем дереве.

git merge

Соединение двух или более веток.

git rebase

Перемещение изменений к другой точке в дереве.

git diff [--staged]

Построчное сравнение между текущей директорией и индексом (или между индексом и HEAD, при наличии --staged).

git show [--format=raw] <коммит, ветвь, тэг>

Вывод подробной информации о чём угодно.

git reset [--hard] <коммит, ветвь, тэг>

Сброс текущего состояния репозитория.

git log

Список коммитов в текущей ветви.

git reflog

Изменения в локальном репозитории.

Для тех, кто хочет получше разобраться с git, мы рекомендуем почитать книгу на русском языке Pro Git. Тем же, кто хочет быстрых результатов, подойдет Шпаргалка по git.

2.5. Имя пользователя и емейл

Перед началом работы надо объяснить git кто ты, то есть прописать имя пользователя и e-mail. Для этого открой терминал и выполни следующие команды (не забудь заменить ТВОЁ_ИМЯ и ТВОЯ_ПОЧТА_КОМ на нормальное имя (лучше латиницей) и на нормальную почту):

$ git config --global user.name "ТВОЁ_ИМЯ"
$ git config --global user.email "ТВОЯ_ПОЧТА_КОМ"

В дальнейшем git будет сопровождать все взаимодействия с удалённым сервером этими данными.

3. Установка Python

Python — язык программирования, который ты активно будешь использовать при выполнении заданий этого курса. В настоящее время существует две различные версии языка — Python 2 и Python 3 — они не совместимы между собой. Тебе понадобится Python 3.

3.1. Установка под Linux

Команда не многим отличается от такой же команды для установки git:

$ apt-get install python3

3.2. Установка под macOS

Скачай и установи Python. После того, как инсталляция завершится, тебе потребуется закрыть терминал и запустить его снова.

3.3. Установка под Windows

Скачай Python. Во время инсталляции удостоверься, что стоит галочка «Add Python 3.x to PATH». Без этой галочки Python не будет запускаться из терминала.

hw 00 01

4. Установка Sublime Text 4

Установленый ранее интерпретатор Python позволяет выполнять код. Но тебе также потребуется тектовый редактор, который существенно облегчит написание программ.

Текcтовый редактор — это как Microsoft Word для написания программ — он позволяет создавать, изменять и сохранять файлы с исходным кодом.

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

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

  • открывать и редактировать новые файлы простым способом;

  • хорошо работать как с файлами Python’а, так и с неформатированным текстом;

  • отображать номера строк.

Все удобные редакторы в дополнение к этому умеют:

  • осуществлять подсветку синтаксических конструкций;

  • выполнять команды с помощью комбинаций клавиш.

Пожалуйста, пожалуйста, пожалуйста не используй Microsoft Word (или что-то вроде него) для редактирования программ. Word предназначен для редактирования текстов на естественных языках (типа русского или английского). Если будешь использовать Word для написания программ — проблемы не заставят себя ждать!

В этом курсе рекомендуется использовать редактор Sublime Text 4.

4.1. Некоторые горячие клавиши Sublime Text 4

  • Ctrl+s — сохранить текущий файл;

  • Ctrl+x — забрать текущий абзац в буфер обмена;

  • Ctrl+v — вставить текст из буфера обмена;

  • Ctrl+d — выбрать текущее слово. При повторном нажатии в область выбора попадет следующее место в тексте с таким словом (очень удобно для переименований);

  • Ctrl+z — откатить одно действие;

  • Ctrl+y — вернуть откаченное действие;

  • Ctrl+Tab — выбрать следующую вкладку;

  • Ctrl+Shift+Tab — выбрать предыдущую вкладку;

  • Ctrl+f — поиск слова;

  • Ctrl+Shift+f — поиск слова во всех вкладках;

  • Ctrl+Shift+p — открывает небольшую панель, в которую можно вводить команды. Например, ss python активирует подсветку Python-кода, reindent перерасставит отступы в файле и т.д.

Если есть что-то, что ты можешь захотеть от текстового редактора — Sublime, вероятно, в это умеет. Просто погугли!

5. Работа с файловой системой

Первым делом запусти терминал, если ты этого еще не сделал. Здесь и далее предполагается, что пользователи Windows пользуются установленным GitBash (или Bash в Windows 10), а пользователи Linux и Mac пользуются стандартными терминалами.

lab 01 02

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

Поскольку терминал Git Bash эмулирует работу терминала Unix/Linux, то отображаемая в GitBash домашняя папка не совпадает с домашней папкой пользователя Windows, а является также эмулируемой.

Теперь настало время изучить и уяснить, как работает файловая система. Перемещать, копировать, открывать и удалять файлы с помощью мышки в системах с графическим интерфейсом (то есть с «окошечками») умеют все. Операции с файлами и папками в терминале происходят другим образом. Тебе даже не встретится горячо любимая обычными пользователями иконка «Мой компьютер».

Ничего страшного, сейчас мы узнаем, как работать с файловой системой при помощи командной строки (то есть терминала). Всё, что можно сделать визуальным образом (мышкой в красивых «окошечках»), можно сделать и текстовыми командами.

5.1. Директории

Прежде всего познакомимся с нашим другом, ls (сокращение от list, то есть список).

Команда ls выводит список всех файлов в текущем директории. Кстати, "директорий" — более правильное название для папки, такой, например, как «Мои документы». В терминале существует понятие текущего директория, то есть того директория, в котором ты находишься в текущий момент. При запуске терминала текущим директорием становится домашний (home) директорий пользователя, от имени которого запущен терминал. То есть если прямо сейчас выполнить команду ls, то она выведет содержимое твоего домашнего директория.

Набери команду ls:

student ~ # ls
student ~ #

Странно. Ничего вроде бы не произошло. Но это и правильно — сейчас в домашнем директории ничего нет. Значит, нужно туда что-нибудь добавить!

5.1.1. Создание директориев

Вот еще одна полезная команда: mkdir (сокращение от make directory — сделать директорий). Она нужна для создания новых директориев. В отличии от ls, ввести название и нажать Enter в этом случае недостаточно. Нужно также указать название нового создаваемого директория. Безграничная степень внутренней дисциплины и самоорганизации заставляет нас создать директорий для этого курса с названием u1337:

student ~ # mkdir u1337
student ~ #

В случае, когда после названия команды следуют какие-либо уточнения (как, например, название директория), говорят, что команда вызвана с одним или несколькими параметрами. Не все команды требуют ввода дополнительного параметра/параметров. Некоторые команды (например ls) имеют множество необязательных параметров, которые можно не указывать.

Итак, директорий создан. Нужно проверить, что новый директорий действительно существует:

student ~ # ls
u1337

Вот он — новый директорий. Крутотень!

5.1.2. Изменение текущего директория

Для изменения текущего директория используется команда cd (сокращение от change directory).

Эта команда ожидает параметр в виде названия целевого директория для перехода. Зайди в директорию hw_00 с помощью команды:

student ~ # cd u1337
student ~/u1337 #

Знак ~ (тильда) превратился в u1337. Это означает, что текущий директорий изменился на u1337.

Внутри директория u1337 ещё ничего нет, ни файлов, ни вложеных директориев. Удостовериться в этом можно с помощью уже известной команды ls. Результат её выполнения как бы скажет нам: «Директорий пуст».

Теперь предположим, что нужно вернуться в домашний директорий ~. Это можно сделать несколькими способами.

Первый способ:

student ~/u1337 # cd ..
student ~ #

Две точки в Unix/Linux означают внешний по отношению к текущему директорий. То есть команда cd .. приводит к переходу в родительский директорий из дочернего.

Второй способ:

student ~/u1337 # cd
student ~ #

Ввод команды cd без параметров эквивалентен переходу в домашний директорий. Бывает удобно использовать эту команду для быстрого перехода в домашний директорий из длинной последовательности вложеных директориев (ну вот, например, отсюда /home/student/somewhere/deep/inside/the/hell).

5.1.3. Удаление директориев

Раз директории можно создавать, то можно их и удалять. И это достаточно частая ситуация, не правда ли? Для удаления директория используй команду rm -r. Параметр -r в данном случае означает, что удаление должно произойти рекурсивно, то есть со всем содержимым.

Подобно команде mkdir, команда rm -r требует указания параметра с именем удаляемого директория.

Сделай вот что:

  1. Создай директорий с названием my_folder.

  2. С помощью команды ls удостоверься, что директорий создался.

  3. Удали директорий командой rm -r my_folder.

  4. Еще раз запусти ls, чтобы проверить, что на этот раз директорий my_folder отсутствует.

5.2. Файлы

Было проделано уже достаточно много, однако все действия касались директориев. Сами по себе директории прекрасны, но кроме имени не несут в себе информации. Настало время наполнить их чем-то более содержательным. Файлами.

Прежде всего научимся создавать файлы. Разница между файлами и директориями в принципе очевидна. Более чем полностью сомнения могут быть развеяны попыткой «войти» в, например, текстовый файл командой cd.

Попробуй создать текстовый файл, содержащий предложение: «Я сдам сессию на отлично!» Это можно сделать множеством способов. Для начала попробуй воспользоваться командой echo (эхо).

Команда echo выводит в терминал то, что передается ей в качестве параметров.

student ~ # echo Привет
Привет
student ~ # echo Хватит повторять
Хватит повторять
student ~ # echo Перестань!
Перестань!

То, что выводит компьютер после ввода команды и нажатия Enter называют выводом (output) этой команды, а то, что передавалось в качестве параметров, называют вводом (input).

5.2.1. Создание файлов

В Unix/Linux для создания файла используют команду touch. Например, для создания файла my_file нужно сделать следующее:

student ~ # touch my_file
student ~ # ls
u1337 my_file

Это было не сложно! Для того, чтобы заглянуть внутрь файла, понадобится другая команда — cat.

student ~ # cat my_file
student ~ #

Нетрудно сообразить, что пустой вывод команды cat как бы говорит нам, что файл, созданный командой touch, ничего не содержит.

Для удаления файла можно воспользоваться уже знакомой командой rm. На этот раз без параметра -r.

student ~ # ls
u1337 my_file
student ~ # rm my_file
student ~ # ls
u1337

Используй команду rm с аккуратностью! Эта команда по-настоящему удаляет файлы, а не перемещает их в корзину, как ты, быть может, привык под Windows/MacOS. Обратить действие команды rm простыми способами невозможно. Так что подумай дважды или даже трижды!

Директории ты создавал и удалял. С файлами можно делать гораздо больше.

Создай новый файл (ты ведь только что удалил то, что было создано).

student ~ # touch my_file
student ~ # ls
u1337 my_file

Добавь текст внутрь файла. Для этого можно использовать команду echo:

student ~ # echo "Я не буду лениться и успешно выполню все задания курса!" > my_file

Для тех, кому интересно, символ > означает перенаправление с экрана терминала в файл, указанный после этого знака. В приведенном примере текст «Я не буду лениться и успешно выполню все задания курса!» попадёт в файл my_file.

Использовать перенаправление нужно с аккуратностью — всё, что находится в файле, будет заменено на новый текст. Для того чтобы добавлять текст к концу существующего файла, применяй >>.

5.2.2. Копирование файлов

Теперь представим, что тебе надо скопировать файл. Для этого предназначена команда cp (copy — копия). Она ожидает передачи ей двух аргументов: первый — название файла, который необходимо скопировать, второй — имя нового файла, в который необходимо скопировать исходный файл.

Например, для копирования my_file в new_file нужно сделать так:

student ~ # cp my_file new_file
student ~ # ls
u1337 my_file new_file

Если заглянуть в каждый из этих файлов с помощью cat, можно обнаружить, что new_file является копией исходного файла my_file. Как раз то, что было нужно:

student ~ # cat new_file
Я не буду лениться и успешно выполню все задания курса!

Зачастую нужно скопировать файл из одного директория в другой. Команда cp может принимать параметры, содержащие также и пути к файлам. Например, aaa/bbb/ccc.txt это путь к файлу, содержащему некоторый текст.

Можно сделать что-то вроде этого:

student ~ # cp aaa/bbb/ccc.txt ccc.txt
student ~ # ls
u1337 my_file new_file ccc.txt

Если при копировании нет потребности изменять имя файла, то можно использовать точку (.) в качестве второго параметра. Результат при этом будет совершенно тот же:

student ~ # cp aaa/bbb/ccc.txt .
student ~ # ls
u1337 my_file new_file ccc.txt

В Unix/Linux точка . означает сокращение для «текущий директорий». То есть команда cp в данном случае означает: скопируй файл aaa/bbb/ccc.txt в текущий директорий.

Похожим образом можно скопировать ccc.txt в директорий u1337.

student ~ # cp aaa/bbb/ccc.txt u1337
student ~ # ls u1337
ccc.txt

5.2.3. Перемещение файлов

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

Конечно, можно было бы воспользоваться связкой команд cp и rm, но есть более удобный способ — команда mv (move — переместить), принимающая два аргумента:

student ~ # mv new_file u1337
student ~ # ls
u1337 my_file
student ~ # cd u1337
student ~/u1337 # ls
new_file

Файл new_file был перемещен в директорий u1337. Видно, что директорий u1337 находится в домашнем директории, там, где располагался до выполнения команды файл new_file. Для успешного выполнения команды необходимо, чтобы директорий u1337 существовал в текущем директории, иначе это могло привести бы к переименованию файла (об этом ниже).

Теперь представим, что нужно перемесить файл обратно в домашний директорий. Для этого можно указать команде mv, что переместить файл нужно в родительский директорий ..:

student ~/u1337 # ls
new_file
student ~/u1337 # mv new_file ..
student ~/u1337 # ls
student ~/u1337 # cd
student ~ # ls
new_file

Только что файл new_file был перемещен обратно в домашний директорий.

5.2.4. Переименовывание файлов

И последнее, можно переименовать файл. Для переименований используется уже рассмотренная команда mv. В этом случае команде нужно также передать два аргумента: во-первых, имя файла для переименования, во-вторых, новое название файла:

student ~/u1337 # mv new_file best_name_ever
student ~/u1337 # ls
best_name_ever

6. Выполнение заданий

6.1. Подключение к GitHub по SSH

Перед началом работы с GitHub и получением заданий, собранных в удаленных репозиториях, необходимо наладить подключение к GitHub при помощи SSH. Для этого необходимо создать соответствующий твоему аккаунту GitHub SSH-ключ и установить данный ключ в на сайте в твоём аккаунте.

Что для этого необходимо сделать:

  1. Сгенерировать SSH-ключ. Папку для открытия GitBash можно выбрать любую, но мы работаем в u1337, потому в ней и продолжим.

    student ~/u1337 # ssh-keygen -t ed25519 -C "{email_от_твоего_github_аккаунта}"

    В ходе генерирования SSH-ключа GitHub запросит ввести название ключа. Данный пункт можно пропустить, нажав ENTER, или же выполнить, не забыв при этом прописать как название файла, так и полный путь к нему. Помимо прочего GitHub потребует придумать passphrase (пароль) для конкретно данного создаваемого SSH-ключа. Пароли создавать обязательно, иначе клонирование репозиториев с GitHub будет не доступно.

  2. Включить SSH-агент.

    student ~/u1337 eval "$(ssh-agent -s)"
  3. Добавить в SSH-агент приватный SSH-ключ (без раcширения .pub).

    student ~/u1337 ssh-add ~/.ssh/{имя_созданного_ssh_ключа}
  4. Открыть публичный SSH-ключ (c раcширением .pub) и скопировать его содержимое.

    student ~/u1337 cat ~/.ssh/{имя_созданного_ssh_ключа}.pub
  5. Зайти на сайт GitHub, войти в свой аккаунт, найти пункт меню Settings (настройки) и в нём SSH and GPG keys (SSH и GPG ключи).

  6. Добавить новый SSH-ключ, нажав на клавишу New SSH key. В поле Title внести название нового ключа. В поле Key внести скопированный публичный ключ.

6.2. Клонирование репозитория с заданием на свой ПК

При выдаче любого задания, включая это, тебе будет предоставлена ссылка, ведущая на GitHub Classroom (надстройка над GitHub для ведения занятий). После перехода по этой ссылке тебе будет предложено принять задание, нажав кнопку «Accept this assignment». При этом на GitHub будет создан индивидуальный репозиторий с начальными файлами задания, которые надо будет дополнить. Например, для этого задания будет создан индивидуальный репозиторий с адресом:

https://github.com/{код_курса}/hw_00-{твой_github_юзернейм}

Этот репозиторий будет приватным — данные, находящиеся в нём, будут доступны только студенту и преподавателю.

Теперь следует:

  1. Сделать копию репозитория (клон) в папке u1337.

    student ~/u1337 # git clone git@github.com:{код_курса}/hw_00-{твой_github_юзернейм}.git
  2. Ввести пароль, созданный в ходе генерирования SSH-ключа.

  3. Удостовериться, что в текущем директории появилась папка hw_00-{твой_github_юзернейм}.

    student ~/u1337 # ls
    hw_00-{твой_github_юзернейм}

    Именно в в папку hw_00-{твой_github_юзернейм} «склонирован» удаленный репозиторий, и именно в ней следует работать с файлами, регулярно фиксируя изменения в файлах (git commit) и отправляя (git push) эти изменения в удаленный репозиторий.

  4. Перейди в папку hw_00-{твой_github_юзернейм} командой:

    $ cd hw_00-{твой_github_юзернейм}

Проверь, что в папке есть файлы с помощью команды ls.

Пользователям Windows рекомендуется работать далее не в домашней папке, которая, как было сказано ранее, является эмулированной и находится в глубоких недрах файловой системы Windows, а создать отдельную папку (например на диске C:) и продолжить работу в ней.

student ~/u1337 # cd
student ~ # mkdir /C/u1337
student ~ # cp -r 'u1337' /C/
student ~ # cd /C/u1337/hw_00

Не лишним также будет проверить, что клон репозитория тоже скопировался:

student /C/u1337/hw_00 # ls
hw_00.py README.adoc

6.3. Первый взгляд на файл-заготовку

Открой файл hw_00.py в редакторе.

hw 00 03

Обрати внимание на фиолетовые строки, заключенные в тройные двойные кавычки """. Такой текст называют докстринг (docstring). В этом тексте описывается, что должна делать рассматриваемая функция.

Встречающиеся в докстрингах строки, начинающиеся с >>> — это доктесты. С помощью доктестов можно показать на конкретных примерах, как работает функция: «Если в интерпретатор ввести этот код (говорит нам строка с >>>), то следует ожидать такого результата (говорит нам строка, следующая за >>>)».

В частности, рассмотри функцию my_email() — доктест проверяет, что выражение возврата не совпадает с someone@example.com. Короче, тебе туда надо будет вписать что-то своё.

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

Давай-ка их запустим.

6.4. Первое задание и запуск доктестов

Для запуска тестов нужно в терминале в папке с проверяемым файлом набрать:

$ python3 -m doctest hw_00.py
Если вдруг твой компьютер работает под операционной системой Windows и команда python3 не работает, попробуй набирать python или py. Если и это не помогает, то скорее всего ошибка в установке переменной среды PATH. Если не выходит, обратись в онлайн чат за помощью не мешкая!

Результат последней команды будет выглядеть как-то так.

hw 00 04

Упс…​ Две ошибки. :( Перед их устранением посмотри более внимательно, что написано на экране, например, про my_email.

Конечно информация о провале будет на английском языке, который тебе, может быть, не очень хорошо знаком. С этим надо что-то делать. Английский язык в ИТ — как латынь у медиков. Без знания языка очень тяжело стать настоящим профессионалом. Если есть трудности — немедленно запишись на дополнительные курсы. И это не шутка.

Видно, что ошибка находится в файле hw_00.py в строке 4, в функции my_email. Теперь ты точно знаешь, где искать баг! (Именно поэтому важно, чтобы текстовый редактор отображал номера строк). Посмотри немного на строку 4. А теперь давай разберемся, о чём говорит тест: при вызове функции my_email без аргументов она должна возвращать строку, не равную someone@example.com. Но она-то как раз и возвращается! Измени возвращаемое выражение на свой e-mail.

def my_email():
    """Возвращает строку с твоим e-mail адресом.

    >>> my_email() != 'someone@example.com'
    True
    """
    return 'dunya_fortochkina@mail.ru'

После сохранения изменений в файле попробуй ещё разок запустить доктесты:

$ python3 -m doctest hw_00.py

Тест для my_email теперь должен проходить. Один готов!

6.5. Фиксация изменений в git

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

$ git add .

Эта команда сообщает git, что ты хочешь запомнить все изменения, произошедшие в текущем директории. Теперь нужно сделать фиксацию — коммит:

$ git commit -m "Решение первого задания"

Флаг -m означает message — сообщение, которое войдёт в историю изменений файлов. Это обязательное сообщение. Если не указать флаг -m, то git откроет текстовый редактор и предложит написать комментарий к изменениям в нём. Всегда старайся писать нормальные описания, а не отписки. Это хороший тон. Ты же хочешь стать профессионалом ))

6.6. Второе задание и отправка на проверку

Во второй функции thirteen_thirty_seven нужно заполнить пустоту после return выражением, значение которого будет равно 1337, используя только целые числа, функции add и mul. Это можно сделать множеством простых способов — попробуй изобрести что-нибудь оригинальное. Когда закончишь проверь, что тесты проходят.

Если все тесты проходят, Python не выведет сообщение об успехе. По-умолчанию доктесты сообщают только о провале.

Однако, если очень хочется удостовериться, что все доктесты проходят, можно воспользоваться дополнительным параметром '-v', который приведет к полному выводу информации, например, об успешном прохождении доктестов.

$ python3 -m doctest -v hw_00.py

Когда в файле-заготовке всё готово и проходят все тесты (проверяй это всегда-всегда), можно фиксировать изменения:

$ git add .
$ git commit -m "Решение второго задания"

У тебя получилось два набора изменений. Можешь в этом удостовериться:

$ git log

Тепреь всё готово к отправке твоего решения на GitHub. Для этого напиши в терминале вот что:

$ git push

Проверь, что в твоём репозитории на GitHub (вот такого вида https://github.com/{код_курса}/hw_00-{твой_github_юзернейм}) появились сделанные на локальном компьютере изменения.