Все три элемента results будут True. Аннотация i: int не преобразует значение: выражение 1e+111 + 111 создаёт float, а столь малая добавка теряется при округлении.
Какие из индексов results будут содержать True после выполнения следующего кода?
Все три элемента results будут True. Аннотация i: int не преобразует значение: выражение 1e+111 + 111 создаёт float, а столь малая добавка теряется при округлении.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какие из индексов results будут содержать True после выполнения следующего кода?
i: int = 1e+111 + 111 results = [False, False, False] results[0] = i == 1e+111 + 111 results[1] = i == float(i) results[2] = i == int(float(i))
Ответ
Все три элемента results будут True. Аннотация i: int не преобразует значение: выражение 1e+111 + 111 создаёт float, а столь малая добавка теряется при округлении.
Первое сравнение повторяет то же вычисление. Второе сравнивает float с его преобразованием в float, не меняющим значение. Третье тоже истинно: конечный float такой величины представляет целое число, хотя обычно не точное математическое 10**111. int(float(i)) возвращает именно это представленное целое, и Python корректно сравнивает int с float.
[True, True, True]
Ошибка рассуждения — считать аннотацию присваиванием настоящего int или ожидать, что прибавление 111 обязательно изменит огромный float.