Числа
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
интерпретирует числовые данные – как числовое значение или как строку.