Типы данных
Типы данных и переменные
Тип данных показывает, какие данные хранятся в переменной и какие операции для них подходят.
Базовые термины программирования:
- Объявление переменной связывает имя переменной с типом данных
- Переменная хранит значение некоторого типа данных
- Присваивание записывает значение в переменную.
- Литерал — это запись конкретного значения прямо в коде.
- Выражение — это комбинация имён переменных, литералов и операторов, которая вычисляется в значение.
Как работает оператор присваивания
Java сначала вычисляет выражение справа от знака =, а потом оператор присваивания записывает полученное значение в переменную слева.
Задачи для тренировки: переменные
1. Корректен ли такой фрагмент?
Ответ
Некорректно.
Слева от оператора присваивания должна стоять переменная. 123 — это литерал, ему нельзя присвоить значение.
2. Корректен ли такой фрагмент?
Ответ
Некорректно.
Справа значение типа double, а слева переменная типа int. Такое присваивание без явного преобразования типа нельзя.
3. Корректен ли такой фрагмент?
Ответ
Некорректно.
Переменная s имеет тип String, а справа стоит числовой литерал 123, а не строка.
4. Корректен ли такой фрагмент?
Ответ
Корректно.
Справа от = может стоять выражение. Сначала Java вычисляет 3 * b, потом записывает результат в a.
5. Корректен ли такой фрагмент?
Ответ
Корректно.
Переменной можно присваивать новое значение. Здесь сначала вычисляется 2 * a, потом результат записывается в ту же переменную a.
6. Корректен ли такой фрагмент?
Ответ
Некорректно.
В выражении справа используется переменная a, но до этого ей еще не присвоили начальное значение.
Имена переменных
Хорошее имя помогает быстро понять, что хранится в переменной.
- имя должно подсказывать смысл значения:
speed,time,totalSeconds - в Java имена переменных обычно записывают в
lowerCamelCase:firstName,carSpeed,totalSeconds - имя не должно начинаться с цифры
- в имени не используют пробелы и дефисы
- короткие имена
a,b,xлучше оставлять только для коротких формул
Пример понятных имен:
720
То же вычисление с короткими именами читать сложнее:
720
Короткие имена уместны в короткой математической записи:
12
Трассировка
Трассировка помогает пошагово проследить, как в программе меняются значения переменных.
Рассмотрим задачу:
Даны длина и ширина прямоугольника. Длину увеличили на 2, а ширину уменьшили на 1. На сколько изменилась площадь прямоугольника?
Для решения будем использовать переменные: в них сохраним исходные данные, промежуточные результаты и ответ.
Проследите выполнение программы на слайдах ниже и посмотрите, как на каждом шаге меняются значения переменных.
Задачи для тренировки: трассировка
1. Какими станут a и b после выполнения этого кода?
Ответ
В конце:
Сначала в temp сохраняется старое значение a, потом a и b меняются местами.
2. Чему будет равно d после выполнения этого кода?
Ответ
В конце:
По шагам:
3. Какими станут a и b после выполнения этого кода?
Ответ
В конце:
Это тоже обмен значений местами, но без дополнительной переменной.
4. Чему будет равно x в конце выполнения этого кода?
Ответ
В конце:
По шагам:
5. Какими станут a и b после выполнения этого кода?
Ответ
В конце:
По шагам:
Строковый тип данных: String
String используется для ввода-вывода, хранения и обработки текстов.
Примеры выражений со строками:
| Выражение | Значение | Комментарий |
|---|---|---|
| "My " + "Precious" | "My Precious" |
пробелы внутри строк важны |
| "1234" + "99" | "123499" |
строки не складываются как числа |
| "A" + "B" + "C" | "ABC" |
можно склеивать несколько строк в одном выражении |
| "Привет, " + "мир!" | "Привет, мир!" |
поддерживается Unicode |
Обратите внимание: при склеивании строк новую часть можно добавить и в конец строки, и в её начало.
Проследите, как по шагам меняются значения переменных first и second в этой программе:
String first = "мама"; // В переменную first записали строку "мама".
String second = "кот"; // В переменную second записали строку "кот".
second = second + "ик"; // К "кот" добавили справа "ик". Получилось "котик".
first = "супер" + first; // К "мама" добавили слева "супер". Получилось "супермама".
second = first + second; // Склеили "супермама" и "котик". Получилось "супермамакотик".
Ввод-вывод строк
Вывод строк
Для вывода строк используют System.out. С его помощью программа выводит текст на экран.
| Вызов | Что делает |
|---|---|
System.out.print(x) |
Печатает x без перевода строки |
System.out.println(x) |
Печатает x и переводит строку |
System.out.println() |
Просто переводит строку |
Основные способы вывода строк
Одни и те же строковые значения можно вывести по-разному: в одной строке или построчно.
Если два строковых значения нужно вывести в одной строке, используют System.out.print(...).
String first = "кот";
String second = "дом";
System.out.print(first);
System.out.print(" ");
System.out.print(second);
кот дом
Если те же строковые значения нужно вывести построчно, используют System.out.println(...).
кот дом
Если рядом со строкой стоит число, Java автоматически превращает число в текст и склеивает его со строкой.
Возраст: 12
Ввод строк
Для ввода строк в Java обычно используют Scanner.
| Вызов | Что считывает |
|---|---|
in.next() |
Следующее слово до пробельного символа |
in.nextLine() |
Всю строку до перевода строки |
Основные способы ввода строк
Если два строковых значения разделены пробелом, используют next().
кот дом
дом кот
next() читает по словам, поэтому и пробел, и перевод строки работают для него как разделители.
Если каждое строковое значение находится на отдельной строке, используют nextLine().
String first = in.nextLine();
String second = in.nextLine();
System.out.println(second + " " + first);
кот дом
дом кот
Задачи для тренировки: строки
1. Что выведет программа?
String first = "кот";
String second = "ик";
System.out.print(first);
System.out.println(second);
System.out.println(first + second);
Ответ
Программа выведет:
Сначала print(first) печатает кот без перехода на новую строку, потом println(second) дописывает ик и переводит строку.
2. Что выведет программа?
Ответ
Программа выведет:
Число рядом со строкой автоматически превращается в текст.
3. Какой метод нужно поставить вместо ???, если на вход подаётся одна строка:
Ответ
Нужно поставить:
next() читает по одному слову до пробела, поэтому он подходит для ввода кот дом.
4. Какой метод нужно поставить вместо ???, если на вход подаются две строки:
Ответ
Нужно поставить:
Здесь каждое значение находится на отдельной строке, поэтому читаем строки целиком.
5. Что выведет программа?
String a = "ма";
String b = "ма";
System.out.println(a);
System.out.print(b);
System.out.println();
System.out.println(a + b);
Ответ
Программа выведет:
Первый println(a) печатает ма и переводит строку. Потом print(b) печатает второе ма, а пустой println() просто переводит строку.
6. Какое значение будет у second в конце выполнения этого кода?
Ответ
В конце:
По шагам:
7. Что выведет программа?
Ответ
Программа выведет:
По шагам:
8. Какое значение будет у text в конце выполнения этого кода?
Ответ
В конце:
По шагам:
9. Какое значение будет у answer в конце выполнения этого кода?
String first = "дом";
String second = "ик";
String word = first + second;
String answer = "супер" + word;
Ответ
В конце:
По шагам:
Целочисленные типы данных: int и long
int и long используют для хранения целых чисел и вычислений без дробной части.
int
Этот тип подходит для счёта, количества предметов, номеров и других задач, где не нужны дроби.
Если в выражении участвуют только значения типа int, результат тоже будет иметь тип int.
Примеры выражений с типом int:
| Выражение | Значение | Комментарий |
|---|---|---|
20 + 3 |
23 |
сложение |
20 - 3 |
17 |
вычитание |
20 * 3 |
60 |
умножение |
20 / 3 |
6 |
дробная часть отбрасывается |
20 % 3 |
2 |
остаток от деления |
21 % 5 |
1 |
остаток после деления на 5 |
38 % 10 |
8 |
последняя цифра числа |
24 % 2 |
0 |
проверка на чётность |
20 / 0 |
ошибка | на ноль делить нельзя |
2147483647 + 1 |
-2147483648 |
переполнение типа int |
Обратите внимание: при делении двух int ответ тоже остаётся целым числом.
Если значение выходит за границы типа int, происходит переполнение. Поэтому очень большие целые числа в int хранить нельзя.
long
long используют для хранения больших целых чисел.
Этот тип нужен, когда значения не помещаются в int. Например, если в задаче встречаются миллиарды, очень большие расстояния или результаты больших вычислений.
По размеру long больше, чем int.
Примерные диапазоны такие:
- int: от -2 000 000 000 до 2 000 000 000
- long: от -9 000 000 000 000 000 000 до 9 000 000 000 000 000 000
Литералы типа long обычно записывают с суффиксом L.
Примеры:
Если большое число записать без суффикса L, Java сначала воспримет его как int, и возникнет ошибка.
Если есть сомнение, хватит ли int, лучше сразу использовать long.
Как и у int, у типа long есть границы. Если значение выходит за них, происходит переполнение.
Ввод-вывод int и long
Для вывода int и long используют те же System.out.print(...) и System.out.println(...), что и для строк.
Для ввода целых чисел в Java обычно используют Scanner. Предполагается, что в программе уже есть:
| Вызов | Что считывает |
|---|---|
in.nextInt() |
Следующее целое число типа int |
in.nextLong() |
Следующее целое число типа long |
Основные способы ввода int и long
Обычные целые числа читают через nextInt(), а большие через nextLong().
Обратите внимание: результат nextLong() нужно сохранять в переменную типа long.
int days = in.nextInt();
long visitors = in.nextLong();
System.out.println(days);
System.out.println(visitors);
12 5000000000
12 5000000000
Приоритет арифметических операций
В выражениях с int и long сначала выполняются действия в скобках. Потом идут *, / и %. После этого выполняются + и -.
Если рядом стоят операции одного уровня, они выполняются слева направо.
| Выражение | То же самое | Значение | Комментарий |
|---|---|---|---|
3 * 5 - 2 |
(3 * 5) - 2 |
13 |
* выполняется раньше - |
20 + 5 / 2 |
20 + (5 / 2) |
22 |
/ выполняется раньше + |
20 - 17 % 5 |
20 - (17 % 5) |
18 |
% выполняется раньше - |
18 / 5 * 2 |
(18 / 5) * 2 |
6 |
/ и * имеют одинаковый приоритет |
17 % 5 % 3 |
(17 % 5) % 3 |
2 |
% выполняется слева направо |
20 % (7 - 3) |
20 % 4 |
0 |
скобки меняют порядок вычислений |
Эти задачи тренируют шаблоны, которые часто встречаются уже в самых первых задачах: извлечение цифр числа, перевод времени и разбиение суммы на рубли и копейки.
Задачи для тренировки: int, long, / и %
1. Чему равны выражения:
Ответ
Ответ:
Деление на 10 убирает последнюю цифру, а остаток от деления на 10 даёт последнюю цифру.
2. Дано положительное трёхзначное число n. Заполните пропуски, чтобы получить цифру сотен, десятков и единиц.
Ответ
3. Дано int totalMinutes = 135;. Чему будут равны hours и minutes?
Ответ
Ответ:
4. Дано int totalSeconds = 3672;. Заполните пропуски и найдите значения переменных.
Ответ
int hours = totalSeconds / 3600;
int minutes = totalSeconds % 3600 / 60;
int seconds = totalSeconds % 60;
Получится:
5. Дано int totalHours = 53;. Сколько это суток и часов?
Ответ
Ответ:
6. Что выведет программа?
long rub = 12;
long kop = 35;
long pieces = 4;
long total = (rub * 100 + kop) * pieces;
System.out.println(total / 100 + " " + total % 100);
Ответ
Программа выведет:
По шагам:
7. Что выведет программа?
Ответ
Программа выведет:
По шагам:
8. Какой тип нужно выбрать для числа 5000000000 и как правильно записать это значение в коде?
Ответ
Нужен тип long.
В int такое число не помещается.
Вещественный тип данных: double
double используют для хранения вещественных чисел.
Этот тип нужен, когда у значения может быть дробная часть: длина, время, скорость, площадь, среднее значение.
Литералы типа double обычно записывают с точкой. Также можно использовать экспоненциальную запись с буквой E.
Если в выражении участвуют значения типа double, результат тоже будет иметь тип double.
Примеры выражений с типом double:
| Выражение | Значение | Комментарий |
|---|---|---|
1.5 + 0.25 |
1.75 |
сложение вещественных чисел |
1.5 - 0.25 |
1.25 |
вычитание вещественных чисел |
1.5 * 2.0 |
3.0 |
умножение вещественных чисел |
5.0 / 3.0 |
1.6666666666666667 |
результат может быть приближённым |
5.5 % 2.0 |
1.5 |
остаток тоже может быть дробным |
-1.0 / 0.0 |
-Infinity |
для double это не ошибка |
0.0 / 0.0 |
NaN |
специальное значение «не число» |
Обратите внимание: при делении двух double дробная часть сохраняется.
Чтобы получить вещественный результат, хотя бы одно число в делении должно иметь тип double.
Ввод-вывод double
Для вывода double используют те же System.out.print(...) и System.out.println(...), что и для строк.
Обычный print и println выводят число как есть.
Если нужно вывести число с определённым количеством цифр после точки, используют printf().
| Вызов | Что делает |
|---|---|
System.out.printf("%.2f", value) |
Выводит число, оставляя 2 цифры после точки |
Основной способ вывода double через printf
double value = 3.14659;
System.out.println(value);
System.out.printf("%.1f", value);
System.out.println();
System.out.printf("%.2f", value);
System.out.println();
System.out.printf("%.3f", value);
3.14659 3.1 3.15 3.147
В записи %.2f число 2 означает: вывести 2 цифры после точки. При этом printf() округляет число только при выводе. Значение переменной не меняется.
В записи %.1f число 1 означает: оставить 1 цифру после точки. В записи %.2f останутся 2 цифры после точки.
Для ввода вещественных чисел в Java обычно используют Scanner.
| Вызов | Что считывает |
|---|---|
in.nextDouble() |
Следующее вещественное число типа double |
Основные способы ввода double
В вещественных числах используют точку, а не запятую.
double first = in.nextDouble();
double second = in.nextDouble();
System.out.println(first + second);
2.5 1.75
4.25
Логический тип данных: boolean
boolean используют для хранения логических значений.
Этот тип нужен, когда программа должна ответить на вопрос да или нет: чётное ли число, корректный ли месяц, равен ли нулю делитель.
Тип boolean имеет только два литерала:
Операторы равенства и сравнения
Чаще всего значение типа boolean получается в результате сравнения двух выражений.
Операторы равенства и сравнения сравнивают два выражения. Результат такого сравнения имеет тип boolean.
| Оператор | Смысл | true | false |
|---|---|---|---|
== |
равно | 2 == 2 |
2 == 3 |
!= |
не равно | 3 != 2 |
2 != 2 |
< |
меньше | 2 < 13 |
13 < 2 |
<= |
меньше или равно | 2 <= 2 |
3 <= 2 |
> |
больше | 13 > 2 |
2 > 13 |
>= |
больше или равно | 2 >= 2 |
2 >= 3 |
Операторы равенства и сравнения в Java
Простые логические выражения часто выглядят так:
| Вопрос | Выражение | Комментарий |
|---|---|---|
| Чётное ли число? | (x % 2) == 0 |
остаток при делении на 2 должен быть равен нулю |
| Делитель равен нулю? | denominator == 0 |
проверка перед делением |
| Количество минут делится на 60? | (minutes % 60) == 0 |
используем остаток от деления |
Логические операции
Если одного сравнения недостаточно, условия можно объединять с помощью логических операций !, && и ||.
Таблица истинности показывает, какое значение принимает логическое выражение при разных значениях true и false.
Таблица истинности для НЕ |
Таблица истинности для И |
Таблица истинности для ИЛИ |
||||||||||||||||||||||||||||||||||||||||||||||
Составные условия часто выглядят так:
| Вопрос | Выражение | Комментарий |
|---|---|---|
| Хотя бы одно из двух чисел положительное? | (a > 0) || (b > 0) |
достаточно, чтобы хотя бы одно условие выполнялось |
| Месяц корректный? | (month >= 1) && (month <= 12) |
оба условия должны быть истинны |
| Месяц некорректный? | !((month >= 1) && (month <= 12)) |
отрицание готового условия |
Приоритет операций
В выражениях сначала выполняются действия в скобках. Потом идут арифметические операции, затем сравнение. Среди логических операций сначала выполняется !, потом &&, потом ||.
Если рядом стоят операции одного уровня, они выполняются слева направо.
| Выражение | То же самое | Значение | Комментарий |
|---|---|---|---|
2 + 3 * 4 == 20 |
(2 + (3 * 4)) == 20 |
false |
сначала *, потом +, потом == |
(2 + 3) * 4 == 20 |
(5 * 4) == 20 |
true |
скобки меняют порядок действий |
7 % 2 == 1 && 5 > 3 |
((7 % 2) == 1) && (5 > 3) |
true |
сравнения выполняются раньше && |
!(7 % 2 == 0) |
!((7 % 2) == 0) |
true |
сначала вычисляется выражение в скобках |
true || false && false |
true || (false && false) |
true |
&& выполняется раньше || |
Приоритет операций в выражениях
Даже если скобки не обязательны, их часто ставят, чтобы выражение было легче читать: (month >= 1) && (month <= 12).
Сравнение строк и чисел double
В Java строки сравнивают по тексту через equals().
true
Здесь обе строки содержат один и тот же текст, поэтому equals() возвращает true.
Но если написать так:
String first = "ко";
String second = "т";
String word = first + second;
System.out.println(word == "кот");
false
Хотя текст одинаковый, сравнение через == здесь не подходит.
Для чисел типа double после вычислений лучше не проверять точное равенство через ==.
Например:
0.30000000000000004 false
Хотя на вид кажется, что должно получиться 0.3, после вычисления значение может отличаться совсем немного. Поэтому для double проверка через == после вычислений может дать неожиданный результат.
Задачи для тренировки: boolean
1. Чему равны выражения:
Ответ
Ответ:
2. Чему равны выражения:
Ответ
Ответ:
3. Заполните пропуски, чтобы проверить, что номер месяца корректный.
Ответ
Нужно подставить:
Получится:
4. Что выведет программа?
Ответ
Программа выведет:
Число 8 чётное, но оно не больше 10.
5. Что выведет программа?
int a = 3;
int b = -2;
System.out.println((a > 0) || (b > 0));
System.out.println((a > 0) && (b > 0));
Ответ
Программа выведет:
Первое выражение истинно, потому что a > 0. Второе ложно, потому что b > 0 не выполняется.
6. Что выведет программа?
Ответ
Программа выведет:
В первой строке сначала выполняется false && false, а во второй строке порядок меняют скобки.
7. Что выведет программа?
String first = "ко";
String second = "т";
String word = first + second;
System.out.println(word.equals("кот"));
System.out.println(word == "кот");
Ответ
Программа выведет:
equals() сравнивает текст строки, а == здесь не подходит для такого сравнения.
Преобразование типов
Преобразование типов нужно, когда значение уже есть, но для следующего действия нужен другой тип. Например, строку с числом нужно превратить в число, а результат целочисленного деления — в double.
Автоматические преобразования
Часть преобразований Java делает сама.
Если к строке прибавить число, это число автоматически превратится в строку.
x = 99
Если в числовом выражении участвует double, то значение типа int автоматически превращается в double.
2.75
Здесь число 11 временно рассматривается как 11.0, поэтому результат тоже имеет тип double.
Преобразование строки в число
Если число хранится в строке, а дальше его нужно использовать в вычислениях, используют специальные методы.
| Вызов | Что получается |
|---|---|
Integer.parseInt(text) |
строка превращается в int |
Double.parseDouble(text) |
строка превращается в double |
Преобразование строки в число
int a = Integer.parseInt("126");
double b = Double.parseDouble("2.5");
System.out.println(a);
System.out.println(b);
126 2.5
Строка должна быть записана как число. Например, строку "12a" так преобразовать уже нельзя.
Явное преобразование
Явное преобразование нужно, когда в результате преобразования можно потерять часть данных. Тогда тип пишут в скобках перед выражением.
2
При таком преобразовании из double в int дробная часть отбрасывается.
Так делают, когда в вычислении участвуют только int, а результат нужен вещественный.
int sum = 7;
int n = 2;
double first = sum / n;
double second = (double) sum / n;
System.out.println(first);
System.out.println(second);
3.0 3.5
В первой строке деление происходит как int / int, поэтому получается 3. Во второй строке sum сначала превращается в double, и деление уже даёт точный ответ 3.5.
| Выражение | Тип | Значение | Комментарий |
|---|---|---|---|
(7 / 2) * 2.0 |
double |
6.0 |
сначала 7 / 2 даёт 3, потом результат превращается в double |
(7 / 2.0) * 2 |
double |
7.0 |
здесь деление сразу вещественное, потому что в выражении уже есть 2.0 |
"12" + 6 |
String |
"126" |
число превращается в строку, и получается склеивание текста |
0 == false |
ошибка |
не вычисляется |
нельзя сравнивать int и boolean |
Примеры преобразования типов в выражениях
Задачи для тренировки: преобразование типов
1. Чему равны тип и значение выражения?
Ответ
Ответ:
Число автоматически превращается в строку.
2. Чему равны тип и значение выражения?
Ответ
Ответ:
В выражении уже есть double, поэтому деление вещественное.
3. Заполните пропуски:
Ответ
Нужно подставить:
Получится:
4. Что выведет программа?
Ответ
Программа выведет:
При преобразовании из double в int дробная часть отбрасывается.
5. Что выведет программа?
Ответ
Программа выведет:
В первой строке деление целочисленное, а во второй sum сначала превращается в double.
6. Какое из выражений нельзя вычислить?
Ответ
Нельзя вычислить:
Здесь пытаются сравнить значения разных типов: int и boolean.
Типы данных
В C++ тип пишут перед именем переменной.
int count = 10;
double price = 19.99;
bool ok = true;
char letter = 'J';
string title = "Типы данных";
Чаще всего используются такие типы:
| Что храним | Тип | Примеры значений |
|---|---|---|
| Обычные целые числа | int |
0, 7, -3, 2025 |
| Большие целые числа | long long |
5000000000, 12000000000 |
| Вещественные числа | double |
3.14, 0.5, -2.75 |
| Ответы «да/нет» | bool |
true, false |
| Один символ | char |
'A', '7', '+' |
| Текст | string |
"Hello", "C++" |
Как выбрать тип переменной для чисел
intподходит для обычных целых чисел примерно до \(2 \cdot 10^9\);long longнужен, когда в условии встречаются миллиарды или большие произведения;doubleиспользуют, когда у числа есть дробная часть.
Можно сначала объявить переменную, потом присвоить значение:
Работа со строками
Для текста используют тип string.
string firstName = "Анна";
string lastName = "Иванова";
string fullName = firstName + " " + lastName;
cout << fullName << endl;
Анна Иванова
Строки склеивают через +.
Если в склеивании участвует число, используйте to_string(...).
Возраст: 12
Ввод на C++
Для ввода используют cin.
Как читать данные через cin
>>читает значение и записывает его в переменную;- числа читаются сразу в
int,long longилиdouble; - для
stringзаписьcin >> nameчитает одно слово до пробела.
string city;
long long visitors;
double temp;
cin >> city;
cin >> visitors;
cin >> temp;
cout << "Город: " << city << endl;
cout << "Жителей: " << visitors << endl;
cout << "Температура: " << temp << endl;
Tula 468825 21.5
Город: Tula Жителей: 468825 Температура: 21.5
Если во входе есть отдельная строка целиком, а не одно слово, используйте getline(cin, line).
Если в одной строке два числа, cin прочитает их по очереди:
90 8
720
Простые числовые шаблоны
Какие шаблоны нужны уже в самых первых задачах
- для положительных целых
n / 10убирает последнюю цифру:57 / 10дает5; - если величина хранится в младшей единице, то
whole = total / 100,part = total % 100.
5
long long meters = 12;
long long centimeters = 35;
long long pieces = 4;
long long totalCm = (meters * 100 + centimeters) * pieces;
cout << totalCm / 100 << " " << totalCm % 100 << endl;
49 40
Подробно про операции / и % рассказано в главе Целочисленная арифметика.
Вывод на C++
Для вывода используют cout.
Как работают cout и endl
cout << ...печатает данные;endlпереводит курсор на новую строку;- можно вывести текст и переменные в одной строке.
Проверим правила на примерах:
Результат: 18 из 20
Первая строка Вторая строка
Когда условие требует ровно один знак после запятой, подключите <iomanip> и используйте fixed << setprecision(1).
int meters = 260;
double kilometers = meters / 1000.0;
cout << meters << " m = " << fixed << setprecision(1) << kilometers << " km" << endl;
260 m = 0.3 km
Имена переменных
Имена лучше делать понятными: count, price, time, dist.
Имена a, b, x лучше использовать только в короткой математической записи.
Хорошее имя сразу подсказывает, что хранится в переменной.
Пример понятных имен:
720
То же вычисление с короткими именами читать сложнее:
720
Короткие имена уместны в короткой математической записи:
12
По материалам:
М. Густокашин. Введение в программирование на языке C++. Сириус Курсы. Перейти к курсу.
Типы данных
В Python переменная — это имя, которое ссылается на значение. Тип рядом с именем писать не нужно: Python определяет его по значению справа.
Чаще всего используются такие типы:
| Что храним | Тип | Примеры значений |
|---|---|---|
| Целые числа | int |
0, 7, -3, 2025, 5000000000 |
| Вещественные числа | float |
3.14, 0.5, -2.75 |
| Ответы «да/нет» | bool |
True, False |
| Текст | str |
"Привет", "Python" |
Как выбрать тип переменной для чисел
intиспользуют для целых чисел, в том числе очень больших;- отдельный тип
longв Python не нужен:intавтоматически расширяется; floatиспользуют, когда у числа есть дробная часть.
Работа со строками
Строковый тип str используют для хранения текста.
Анна Иванова
Склеивание строк — это объединение частей в одну строку с помощью +.
Если в склеивании участвует число, его сначала преобразуют в строку через str(...).
Возраст: 12
Ввод на Python
input() всегда возвращает строку.
Если нужно прочитать число, сразу преобразуйте ввод:
12 4.6
13 4.6
Если в одной строке несколько чисел, удобно читать их так:
90 8
720
Что делает map(int, input().split())
input()читает строку целиком, например"90 8";split()делит строку на части по пробельным символам (пробелы, табы):["90", "8"];map(int, ...)применяетintк каждому элементу: получаются числа90и8;speed, time = ...раскладывает эти два числа по переменным.
Для строк тоже полезен split():
Типичная ошибка при вводе: если забыть int(...), то число останется строкой.
2 5
25
Правильный вариант:
2 5
7
Простые числовые шаблоны
Какие шаблоны нужны уже в самых первых задачах
- для положительных целых
n // 10убирает последнюю цифру:57 // 10дает5; - если величина хранится в младшей единице, то
whole = total // 100,part = total % 100.
5
meters = 12
centimeters = 35
pieces = 4
total_cm = (meters * 100 + centimeters) * pieces
print(total_cm // 100, total_cm % 100)
49 40
Подробно про операции // и % рассказано в главе Целочисленная арифметика.
Вывод на Python
Для вывода используют print().
Как работает print()
- если передать несколько значений через запятую,
printвыведет их через пробел; - по умолчанию после каждого вызова
printдобавляется перевод строки.
Проверим правила на примерах:
Результат: 18 из 20
Первая строка Вторая строка
Когда условие требует ровно один знак после запятой, удобно использовать format(..., ".1f").
meters = 260
kilometers = meters / 1000
print(str(meters) + " m = " + format(kilometers, ".1f") + " km")
260 m = 0.3 km
Имена переменных
Имена лучше делать понятными: count, price, time, dist.
Имена a, b, x лучше использовать только в короткой математической записи.
Хорошее имя сразу подсказывает, что хранится в переменной.
Пример понятных имен:
720
То же вычисление с короткими именами читать сложнее:
720
Короткие имена уместны в короткой математической записи:
12