Данные и их типы
В повседневной жизни мы взаимодействуем с различными предметами, меняя их свойства и добавляя им функции. Компьютерные программы, так же как и мы, работают с объектами, только виртуальными, цифровыми. Пока мы не углубились в объектно-ориентированное программирование, будем называть эти объекты данными.
Данные могут иметь самые разные формы. Зачастую программы работают с числами и строками. На предыдущем занятии мы выполнили арифметические операции над числами: сложение изменяло одно число на величину другого, а умножение увеличивало его соответственно числу раз второго.
Числа тоже бывают разнообразными: целыми, дробными, могут достигать больших значений или иметь длительную дробную часть.
Изучая Python, мы столкнемся с тремя основными типами данных:
- целые числа (тип int) – это как положительные, так и отрицательные числа, включая ноль (например, 4, 687, -45, 0).
- числа с плавающей точкой (тип float) – дробные, или вещественные, числа (например, 1.45, -3.789654, 0.00453). Обратите внимание, что для отделения целой и дробной частей используется точка.
- строки (тип str) — это последовательности символов, укладывающиеся в кавычки (например, "ball", "What is your name?", 'dkfjUUv', '6589'). Отметим, что для строк в Python можно использовать как одинарные, так и двойные кавычки, причем даже один символ в кавычках считается строкой. Специального символьного типа здесь нет.
Операции в программировании
Операция – это выполнение действий над операндами, на которых работает оператор, представляющий собой определенный инструмент. Представьте, что вы создаете стол: ваши операнды – доска и гвозди, оператор – молоток.
В математике и программировании символ плюса выступает операцией сложения для чисел. Для строк же этот оператор совершает объединение, называемое конкатенацией.
>>> 10.25 + 98.36 108.61 >>> 'Hello' + 'World' 'HelloWorld'
Важно помнить, что функции, выполняемые оператором, зависят не только от него самого, но и от типов оперируемых им данных. На деле молоток - это не всегда инструмент стройки, а универсальны операторы весьма редко. К примеру, плюс не подойдет при работе с числами и строками, так как их типы не совместимы.
>>> 1 + 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Сообщение интерпретатора TypeError: unsupported operand type(s) for +: 'int' and 'str'
указывает, что возникла ошибка типа - несовместимые типы
операндов int и str.
Изменение типов данных
Проблему с вышеупомянутой операцией можно решить, преобразовав число 1 в строку "1". В Python существуют встраиваемые функции, которые позволяют это делать. Позже подробнее рассмотрим, что такое функции. Пока мы имеем дело с тремя типами данных (int, float и str), обсудим соответствующие функции: int(), float(), str().
>>> str(1) + 'a' '1a' >>> int('3') + 4 7 >>> float('3.2') + int('2') 5.2 >>> str(4) + str(1.2) '41.2'
Эти функции преобразуют содержимое скобок в целое число, вещественное число или строку. Однако не все преобразования возможны:
>>> int('hi')
Traceback (most recent call last):
File "<stdin>", line 1, in "<stdin>"
ValueError: invalid literal for int() with base 10: 'hi'
Ошибка ValueError указывает, что строка 'hi' не может быть представлена как число в десятичной системе счисления. Однако функция int() имеет более сложный функционал:
>>> int('101', 2) 5 >>> int('F', 16) 15
Если вы знакомы с системами счисления, поймете, что происходит.
Также отметим разницу в понятиях. Данные могут выступать как значения и литералы. Эти термины близки, но не идентичны, и их различия станут понятными при более глубоком изучении программирования.
Переменные
Данные размещаются в памяти компьютера. Если вы вводите число, оно записывается в ячейку памяти. Однако как узнать, где оно хранится, и как затем его использовать? Здесь на помощь приходят переменные, служащие для идентификации данных.
Ранее, используя машинный язык, все указания касались конкретных ячеек памяти. При появлении ассемблера было проще задействовать словесные переменные, что стало значительно удобней для программистов.
Процесс связывания данных с переменными зависит от языка программирования и типа данных. Важно помнить, что данные связываются с определенным именем, чтобы к ним можно было обращаться в будущем.
Термин "переменная" подразумевает изменение. На практике вы увидите, что она может сначала содержать одни данные, а потом другие, т. е. ее значение может изменяться и быть изменчивым.
В Python, как и в большинстве языков, связывание переменных с данными происходит с помощью знака =. Этот процесс называется присваивание. Например, выражение sq = 4 устанавливает, что переменная sq теперь ссылается на число 4, находящееся в памяти.
Имена переменных могут быть произвольными, но не следует забывать о некоторых правилах:
- Переменные стоит называть осмысленно, чтобы имя отражало их предназначение.
- Имена не должны совпадать с ключевыми словами языка.
- Начинайте имя с буквы или нижнего подчеркивания (_), но не с цифры.
- Пробелы в именах переменных недопустимы.
При использовании интерпретатора для вывода значения переменной достаточно набрать ее имя и нажать Enter.
>>> sq = 4 >>> sq 4
Приведем более сложный пример работы с переменными в интерактивном режиме:
>>> apples = 100 >>> eat_day = 5 >>> day = 7 >>> apples = apples - eat_day * day >>> apples 65
Здесь переменные apples, eat_day и day связаны с соответствующими значениями. В сложном выражении
apples = apples - eat_day * day
сначала выполняется правая часть выражения, после - его результат присваивается обратно
в переменную apples, теряя старое значение 100. Фактически используются значения переменных: 100, 5 и 7.
Практическая работа
- Переменной var_int присвойте 10, var_float - 8.4, а var_str - "No".
- Измените значение var_int, увеличив его в 3.5 раза и сохраните результат в переменной big_int.
- Уменьшите var_float на единицу и сохраните в той же переменной.
- Разделите var_int на var_float, затем big_int - на var_float. Связать эти результаты с переменными не требуется.
- Преобразуйте var_str в "NoNoYesYesYes" с помощью конкатенации (+) и повторения (*).
- Отобразите значения всех переменных.