порядке. Пример:
Числа
43
>>> 3 * 0.1
0.30000000000000004
Нечто подобное может произойти в любом языке; для беспокойства нет причин.
Python пытается подобрать как можно более точное представление результата, что
иногда бывает нелегко из-за особенностей внутреннего представления чисел в ком-
пьютерах. Пока просто не обращайте внимания на «лишние» разряды; вы узнаете,
как поступать в подобных ситуациях, когда эта проблема станет актуальной для
вас в проектах части II.
Предотвращение ошибок типов с использованием функции str()
Часто значение переменной должно использоваться внутри сообщения. Допустим,
вы хотите поздравить пользователя с днем рождения. И вы написали для этого
следующий код:
birthday.py
age = 23
message = "Happy " + age + "rd Birthday!"
print(message)
Казалось бы, программа должна вывести простое приветствие: Happy 23rd birthday!
Но, если запустить ее, появляется сообщение об ошибке:
Traceback (most recent call last):
File "birthday.py", line 2, in
message = "Happy " + age + "rd Birthday!"
TypeError: Can't convert 'int' object to str implicitly
На этот раз произошла
ошибка типа. Это означает, что Python не понимает, какую
информацию вы используете. В данном примере Python видит, что в точке ис-
пользуется переменная с целочисленным значением (
int
), но не знает, как следует
интерпретировать это значение. Дело в том, что переменная может представлять
как число 23, так и пару отдельных символов 2 и 3. При таком использовании целых
чисел в строках необходимо явно указать, что целое число должно использоваться
как строка из символов. Для этого переменная передается функции
str()
, преоб-
разующей не-строковые значения к строковому виду:
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
Теперь Python понимает, что вы хотите преобразовать числовое значение 23
в строку и вывести символы 2 и 3 в составе поздравления. Ожидаемый результат
выводится без всяких ошибок:
Happy 23rd Birthday!
В большинстве случаев работа с числами в Python проходит достаточно тривиаль-
но. Если вы получаете неожиданные результаты, проверьте, правильно ли Python
интерпретирует числовые данные – как числовое значение или как строку.
44 Глава 2 • Переменные и простые типы данных
Целые числа в Python 2
При делении целых чисел Python 2 возвращает несколько иной результат:
>>> python2.7
>>> 3 / 2
1
Вместо 1.5 Python возвращает 1. Результатом деления целых чисел в Python 2
становится целое число с потерей остатка. Обратите внимание: результат не округ-
ляется, просто остаток от деления пропадает.
Чтобы избежать этого поведения в Python 2, проследите за тем, чтобы хотя бы
одно из двух чисел было вещественным. В этом случае результат также будет
вещественным:
>>> 3 / 2
1
>>> 3.0 / 2
1.5
>>> 3 / 2.0
1.5
>>> 3.0 / 2.0
1.5
Такое поведение при делении часто приводит к недоразумениям, когда люди, при-
выкшие работать с Python 3, начинают использовать Python 2, или наоборот. Если
вы используете или пишете код, в котором смешиваются целые и вещественные
числа, будьте внимательны.
Достарыңызбен бөлісу: