# Содержание
Опасный поворот;Пишем простейшие программы;
Переменные в питоне;
Ввод данных: функция
input();Целочисленная арифметика;
Только
+, -, *, //, %, **, str, int.;C++ и Javascript;
Стиль кода и PEP8.;
Сниппеты в PyCharm;
input();+, -, *, //, %, **, str, int.;Чтобы дать возможность извлечь пользу из данного материала людям разного уровня, применяется специальный знак для обозначения материала, необходимого для виртуозов.
Когда этот знак появляется в начале раздела, это предупреждает читателя об "опасном повороте". Не читайте этот блок без необходимости. Для большинства приложений такие детали не имеют значения.
Некоторые блоки настолько экзотичны, что они оценены двумя знаками опасного поворота. Всё, что было сказано о простом знаке опасного поворота, для этих случаев подходит вдвойне. Вам, вероятно, потребуется месячный опыт работы с питоном, прежде чем вы попытаетесь проникнуть в такие дважды опасные глубины питона. В действительности большинству людей никогда не потребуется знать питон в таких подробностях, даже если они пользуются им ежедневно. В конце концов, можно водить машину, не зная, как работает мотор.
В предыдущем задании мы использовали Питон для простых разовых вычислений, используя интерактивный режим. Например, было задание вычислить длину гипотенузы прямоугольного треугольника по ее катетам. «Программа» эта выглядела так:
Неплохо для калькулятора, но совсем не универсально: если нужна другая гипотенуза, то нужно брать всё выражение и исправлять в нём отдельные числа. Эту программу можно написать по-другому:
Здесь мы используем переменные — бирки, которые можно повесить на различные (числовые, строковые и прочие) значения в памяти интерпретатора.
В первой строке переменной a присваивается значение 179, затем переменной b присваивается значение 971, затем
переменной c присваивается значение выражения, равному длине гипотенузы.
И наконец в последней строчке мы выводим при помощи функции print получившееся значение.
Программа, которая получилась, длиннее и сложнее, чем та первая, из «калькулятора».
Зачем эти сложности?
Плюс в том, что значения a и b в такой программе можно брать и не из её кода, а например из того, что пользователь ввёл на клавиатуре.
Получится удобный гипотенузный вычислятор: ты ему два числа, а он в ответ гипотенузу.
В питоне же всё, с чем можно работать — это объекты в памяти интерпретатора. А переменные — это бирки, которые к этим объектам привязаны.
a = 1
a = 2
b = a
Некоторые объекты уже созданы заранее (например, объекты-целые числа от -5 до 255). Другие объекты создаются во время исполнения программы. После того, как объект создан, он живёт независимо от конкретных переменных, на него ссылающихся. Если на объект не ссылается ни одна переменная, то он со временем удаляется из памяти.
Проверка того, ссылаются ли две переменных на один и тот же объект, выполняется при помощи команды is.
Вот несколько примеров объектов и проверок на их совпадение.
>>> a = 123
>>> b = 123
>>> a is b
True
>>> b = 2
>>> a is b
False
>>> a = 321
>>> b = 320 + 1
>>> a is b
False
>>> a == b
True
Вполне может быть, что будут существовать два объекта типа число с одним и тем же значением.
Так всегда происходит, когда проверить, не создавал ли кто-нибудь ранее точно такой же объект, сложнее, чем создать заново новый.
Поэтому нельзя сравнивать переменные при помощи is.
input()Пример выше с гипотенузой неудобен тем, что исходные данные для программы заданы в тексте программы,
и для того, чтобы использовать программу для другого треугольника необходимо исправлять
текст программы. Это неудобно, лучше, чтобы текст программы не менялся, а программа
запрашивала бы у пользователя данные, необходимые для решения задачи, то есть
запрашивала бы значения двух исходных переменных a и b.
Для этого будем использовать функцию input(), которая считывает
строку с клавиатуры и возвращает значение считанной строки, которое сразу же присвоим переменым
a и b:
a = input()
b = input()
Правда, функция input возвращает текстовую строку, а нам нужно сделать так, чтобы
переменные имели целочисленные значения. Поэтому сразу же после считывания выполним преобразование
типов при помощи фунцкии int, и запишем новые значения в переменные a
и b.
a = int(a)
b = int(b)
Можно объединить считывание строк и преобразование типов, если вызывать функцию int
для того значения, которое вернет функция input:
a = int(input())
b = int(input())
Далее в программе вычислим значение переменной c и выведем результат на экран.
Теперь мы можем не меняя исходного кода программы многократно использовать ее для решения различных задач.
Для целых чисел определены ранее рассматривавшиеся операции
+, -, * и **. Операция
деления / для целых чисел возвращает значение типа float.
Также функция возведения в степень возвращает значение типа float,
если показатель степени — отрицательное число.
Но есть и специальная операция целочисленного деления, выполняющегося с отбрасыванием
дробной части, которая обозначается //. Она возвращает целое число: целую
часть частного. Например:
>>> 17 // 3
5
>>> -17 // 3
-6
Другая близкая ей операция: это операция взятия остатка от деления, обозначаемая
%:
>>> 17 % 3
2
>>> -17 % 3
1
+, -, *, //, %, **, str, int.+, -, *, //, %, **.
Нужно придумать решения без использования циклов и без использования ветвлений (if).
Часто оказывается, что такое целочисленное решение короче, проще и быстрее.
Если вы уже знакомы с программированием на Python или просто очень... мотивированы, то можно сдавать задачи на Javascript и/или C++. Ниже пример программы, которая считывает строку и число, затем выводит её повторённой столько раз.
s = input()
x = int(input())
print(s * x)
const rows = require('fs').readFileSync(0).toString().split('\n').reverse();
const input = () => rows.pop();
const s = input();
const x = parseInt(input());
console.log(s.repeat(x));
#include < iostream >
#include < string >
using namespace std;
int main() {
string s;
int x;
getline(cin, s);
cin >> x;
for(int i = 0; i < x; ++i) {
cout << s;
}
cout << endl;
return 0;
}
Как выбрать дополнительный язык?
C++ пригодится для спортивного программирования. Победа на заключительном этапе всеросса практически невозможна без знания C++.
Javascript пригодится для написания web-проектов. Всё, что работает в браузере, работает на Javascipt (ну, с некоторыми оговорками).
Теория по C++/JS скоро появится.
В JavaScript нет встроенных функций, аналогичных функциям int() и str() в Python, но есть методы и операторы, которые можно использовать для аналогичных целей.
int() в Python преобразует аргумент в целое число. В JavaScript для этого можно использовать оператор parseInt():
parseInt("123"); // 123
str() в Python преобразует аргумент в строку. В JavaScript это можно сделать с помощью метода toString():
(123).toString(); // "123"
+)5 + 2 → 75 + 2 → 7-)5 - 2 → 35 - 2 → 3*)5 * 2 → 105 * 2 → 10/)5 / 2 → 2.55 / 2 → 2.5//)5 // 2 → 2Math.floor(5 / 2); // 2
%)5 % 2 → 15 % 2 → 1Таким образом, основные операции и преобразования типов весьма схожи в Python и JavaScript, хотя и существуют некоторые различия в синтаксисе и доступных методах. Особенно осторожным нужно быть с целочисленным делением и остатками отрицательных чисел.
Обычно код читается намного больше раз, чем пишется. Чтобы разным людям было удобно читать код друг друга, были придуманы и зафиксированы рекомендации для оформления кода на Python. Они называются PEP 8 — Style Guide for Python Code. Там достаточно много рекомендаций, и многие из них требуют достаточно глубокого понимания питона. Начиная с задачи E будет проверяться стиль кода решений. Если что-то не так, то ваша программа будет получать вердикт «Coding style violation», а в отчёте о тестировании можно будет увидеть причину:
>Line 2: E225 missing whitespace around operator
Поставьте пробелы вокруг оператора
b =int(input())
^
Можно пока не разбираться с правилами форматирования, а просто настроить автоматическое форматирование в PyCharm.
Для этого нужно открыть настройки (клик по шестерёнке или гамбургеру, затем — «Settings»), раскрыть меню «Tools», там найти «Actions on save»
и поставить галочку на «Reformat code».
Кликайте по картинке, чтобы увеличить:
Наверное вы уже заметили, что очень часто приходится вводить одни и те же фрагменты кода, например, int(input()).
PyCharm позволяет существенно ускорить ввод подобных повторяющихся фрагментов.
Для этого откройте настройки, откройте раздел «Editor», там найдите «Live Templates», в открывшемся справа окне нажмите «Python»:
теперь нажмите плюсик и выберите «Live Template».
В качестве Abbreviation введите ii, а в качестве Description и Template Text — int(input()).
Теперь нужно указать, где сокращение должно работать: внизу где «No applicable contexts» нажмите «Define» и поставьте галочку напротив питона.
Осталось всё сохранить. Теперь, когда вы вводите ii в коде, будет появляться возможность заменить его на наш шаблон, для этого нужно нажать Tab.