Ctrl+Enter

Ошибка или опечатка? Выдели её, нажми Ctrl+Enter и коротко опиши, что не так. Это сделает наши материалы лучше!

Опасный поворот

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

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

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

Интерактивный интерпретатор

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

О том, что и как нужно установить на своём компьютере, будет описано позже. Первые эксперименты мы будем проводить прямо на этой странице в браузере.

Ни один программист не обходится без консоли Python — REPL (read-eval-print loop — «цикл "чтение-выполнение-вывод"»), чтобы протестировать свой код на первых этапах его создания. REPL можно узнать по "шевронам" в начале строки >>> : так консоль сообщит, что готова получить команду. Когда команда готова, нужно нажать клавишу Enter.

Смело вводите команды и наслаждайтесь результатом. А что можно вводить? Несколько примеров:

>>> 2 + 2 * 2
6

>>> 2 ** 100
1267650600228229401496703205376

>>> 123454321**0.5
11111.0

>>> 'Hello' + 'World'
'HelloWorld'

>>> 'ABC' * 10
'ABCABCABCABCABCABCABCABCABCABC'

Первая команда вычисляет сумму двух чисел, вторая команда вычисляет 2 в степени 100, третья команда извлекает квадратный корень из числа 123454321, четвёртая команда выполняет операцию конкатенации (склейку) для строк, а пятая команда печатает строку 'ABC', повторенную 10 раз.

Эксперименты

Вот интерактивная консоль. Попробуйте в ней сложить несколько чисел побольше, сложить пару строк и т.п.

Как сдавать задачи

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

Когда программа готова, нужно зайти на страничку сдачи, ввести свои логин (вида s27b_sidoroff) и пароль.

После этого выбрать задачу, которую хочется сдать.

Скопировать код программы в окно и нажать кнопку "Отправить!". Также можно указать файл с кодом программы.

Через некоторое время тестирование программы будет окончено, появится надпись "ТЕСТИРОВАНИЕ ЗАВЕРШЕНО". Теперь нужно обновить страницу и посмотреть результат.

Если программа не засчитана, то нужно посмотреть протокол проверки.

В нём будет написано, почему программа не засчитана, а также, возможно, будет показан тест, на котором программа работает неправильно.

Вопросы

Для вопросов и обсуждений задач лучше всего установить себе телеграм. Удобнее всего сначала установить telegram на свой смартфон, а потом — на свой компьютер. У telegram отличное приложение для компьютеров и отличная синхронизация между компьютером и смартфоном/планшетом. Приложение для android, iOS, winPhone. Для регистрации требуется номер телефона.

После установки на смартфон (это не обязательно, можно сразу на PC), можно установить приложение для компьютера. Для windows 10 можно установить из windows store. Для mac'а есть app store. Можно напрямую скачать дистрибутивы приложений: telegram.org/apps.

A: 2 в степени 179

Вычислите \(2^{179}\) .

В тестирующую систему нужно сдать выражение вида 2 ** 3. Текст из интерактивной консоли можно копировать: для этого его нужно выделить и нажать Ctrl+C или Cmd+C (на Mac).

B: 20 факториал

Вычислите \(20! = 1 \cdot 2 \cdot 3 \ldots \cdot 20 \).
(В этой задаче не предполагается ничего хитрее 1 * 2 * 3 * ... * 20, никаких циклов и т.п. (даже, если вы это умеете :))

Типы данных

Итак, мы видим, что Питон умеет работать как минимум с двумя видами данных — числами и строками. Числа записываются последовательностью цифр, также перед числом может стоять знак минус, а строки записываются в одинарных кавычках. 2 и '2' — это разные объекты, первый объект — число, а второй — строка. В питоне вообще все данные являются объектами. Число 2 представляется объектом «число 2», строка 'hello' – это объект «строка 'hello'». Каждый объект относится к какому-то типу. Строки хранятся в объектах типа str, целые числа хранятся в объектах типа int. Тип объекта определяет, какие действия можно делать с объектами этого типа. Так операция + для целых чисел и для строк работает по-разному: для чисел это сложение, а для строк — конкатенация.

Кроме целых чисел есть и другой класс чисел: действительные (вещественные числа), представляемые в виде десятичных дробей. Они записываются с использованием десятичной точки, например, 2.0. В каком-то смысле, 10 и 10.0 имеют равные значение, но это — разные объекты. Например, можно вычислить значения выражения 'ABC' * 10 (повторить строку 10 раз), но нельзя вычислить 'ABC' * 10.0.

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

Вот список основных операций для чисел: x + y — сумма; x - y — разность; x * y — произведение; x / y — частное; x ** y — возведение в степень. Полезно помнить, что квадратный корень из числа x — это x ** 0.5, а корень степени n это x ** (1 / n).

Есть также унарный вариант операции -, то есть операция с одним аргументом. Она возвращает число, противоположное данному. Например: -x.

В выражении может встречаться много операций подряд. Как в этом случае определяется порядок действий? Например, чему будет равно 1 + 2 * 3 ** 1 + 1? В данном случае ответ будет 8, так как сначала выполняется возведение в степень, затем — умножение, затем — сложение.

Более общие правила определения приоритетов операций такие:
1. Выполняются возведения в степень справа налево, то есть 3 ** 3 ** 3 это \(3^{(3^3)}\).
2. Выполняются унарные минусы (отрицания).
3. Выполняются умножения и деления слева направо. Операции умножения и деления имеют одинаковый приоритет.
4. Выполняются сложения и вычитания слева направо. Операции сложения и вычитания имеют одинаковый приоритет.

C: Длина гипотенузы

Вычислите длину гипотенузы в прямоугольном треугольнике со сторонами \(179\) и \(971\) по теореме Пифагора.

D: Пи и ряд Лейбница

Для вычисления числа \(\pi\) можно использовать следующее приближение (ряд Лейбница): \[ \pi = \frac{4}{1} - \frac{4}{3} + \frac{4}{5} - \frac{4}{7} + ... \]

Вычислите сумму первых 10 слагаемых этого ряда. Сколько получилось?

Подсказка
Да что-то непонятное тут требуют...

Если бы требовалось вычислить сумму 2 слагаемых, то ответ был бы

4/1 - 4/3

E: Пи и дзета-функция

А вот другой ряд, в котором вычисляется значение дзета-функции для числа 2: \[ \frac{\pi^2}{6} = \frac{1}{1^2}+\frac{1}{2^2}+\frac{1}{3^2}+\frac{1}{4^2}+ ... \] Вычислите приближение к числу \(\pi\) (то есть ответ должен быть близок к числу \(\pi\)), используя первые 10 членов этого ряда. Сколько получилось?

Подсказка
Да что-то непонятное тут требуют...
Если бы требовалось вычислить $\pi^2$, используя первые два члена, то ответ был бы
6 * (1 / 1**2 + 1 / 2**2)

Основные операции со строками

Основные операции над строками:
A + B — конкатенация;
A * n — повторение n раз, значение n должно быть целого типа.

F: Сто раз А

Напишите выражение, которое выводит \(100\) раз подряд букву 'A' (латинскую, заглавную).

G: Сто раз Python

Напишите выражение, которая выводит слово 'Python' \(100\) раз подряд (только буквы, без кавычек).

Преобразование типов

Иногда бывает полезно целое число превратить в строку. И, наоборот, если строка состоит из цифр, то полезно эту строку превратить в число, чтобы дальше можно было выполнять арифметические операции с ней. Для этого используются функции, одноименные с именем типа, то есть int, float, str. Например, int('123') вернет целое число 123, а str(123) вернет строку '123'.

Пример:

>>> str(2 + 2) * int('2' + '2')
'4444444444444444444444'

Результатом будет строка из числа 4, повторенная 22 раза.

H: Строки и числа - 1

Число \(179\) записали \(50\) раз подряд. Полученное \(150\)-значное число возвели в квадрат. Сколько получилось?

I: Строки и числа - 2

Число \(179^{10}\) записали четыре раза подряд. Получившееся число поделили на 3. Из результата извлекли корень степени \(11\) (то есть возвели число в степень \(1/11\)). Сколько получилось?
PS. Не забудьте про приоритеты операций!

M: Отправить письмо и получить ответ

В этой задаче вам нужно продемонстрировать, что вы научились пользоваться почтой 179-й школы. Открываете страницу http://mail.179.ru, вводите свой логин и пароль. Дальше вам нужно отправить письмо на адрес shashkov@179.ru с запросом кода. Я в ответ его пришлю.

T: Отправить вопрос в телеграм и получить ответ

В этой задаче вам нужно продемонстрировать, что вы научились пользоваться телеграмом, чтобы задать вопрос. Напишите мне вопрос на t.me/shashkovs, я пришлю ответ. Не забудьте представиться :)