Python — язык с динамической типизацией. Это значит, что нам не нужно указывать тип переменной, когда мы её создаем. Интерпретатор сам понимает, что x = 10 — это число, а name = "Анна" — это строка. Это удобно и позволяет писать код быстро. Но у медали есть обратная сторона: ошибки, связанные с типами данных, могут проявиться в самый неподходящий момент — во время выполнения программы. В Python есть принцип: "Если это выглядит как утка и крякает как утка, то это утка". Мы можем передать в функцию любой объект, главное, чтобы у него был нужный метод. Представьте функцию, которая приветствует пользователя (см. рис. ниже). Эта функция отлично работает, если передать ей строку: print(greet("Максим")) # Вывод: Привет, Максим! Но что, если передать число? print(greet(500)) Мы получим ошибку: TypeError: can only concatenate str (not "int") to str. Интерпретатор пытался сложить строку и число, но не смог. Программа упала. Самый простой способ — вручную проверять типы внутри функции с помощью