@shuklindaniil

Частично не работает код при float значениях, почему?

Решаю задачу на определение, через сколько лет отец станет старше сына ровно в два раза. Написал вот такой код:

father_age = float(input("Введите возраст отца: ")) #1
son_age = float(input("Введите возраст сына: ")) #2
years_passed = 0.0 #3
if father_age < 2 * son_age: #4
    print("Отец уже никогда не будет старше своего сына ровно в два раза.") #5
else: #6
 while father_age != 2 * son_age: #7
    father_age += 0.1 #8
    son_age += 0.1 #9
    years_passed += 0.1 #10
if father_age == 2 * son_age: #11
    print(f"Через {years_passed} лет отец будет вдвое старше сына.") #12

1) если указать целые числа - все ок
2) если указать нецелые значение, чтобы отец уже не мог быть старше сына ровно в два раза (например, 60.4 и 40.1) - все ок
Собственно в чем не работает:
3) если указать нецелые значения, чтобы запустился цикл (например, 20.5 и 1.5), код не стартует.
Указывал years_passed = float - выдает ошибку "TypeError: unsupported operand type(s) for +=: 'type' and 'float'" (в силу отсутствия знаний не знаю в чем дело).
ChatGPT указал, что нужно указать years_passed = 0.0, а не years_passed = 0 - не помогло.
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
IvanU7n
@IvanU7n
классика, сравнение в вещественных числах всегда нужно делать через |a - b| < epsilon, где epsilon либо есть в константах как минимальное представимое значение (sys.float_info.epsilon) либо подбирается эмпирически по контексту
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы