Для такого задания достаточно консольной программы с выбором операции. Сначала принимайте числа, потом оператор, после этого выполняйте только подходящую ветку. Не передавайте введённую строку в eval: для четырёх арифметических действий выполнение произвольного Python кода не требуется.
| Этап | Что записать | Как проверить |
|---|
| Первое число | Преобразовать результат input() через float | Ввести положительное и отрицательное значение |
| Второе число | Повторить преобразование в отдельную переменную | Ввести дробь с точкой |
| Действие | Получить строку и убрать пробелы методом strip() | Попробовать каждый из четырёх знаков |
| Вычисление | Использовать цепочку if и elif | Сверить результат с ручным расчётом |
| Деление | В ветке / сначала сравнить делитель с нулём | Проверить 0, 0.0 и ненулевое число |
| Неизвестный знак | Вывести понятное сообщение в последнем else | Ввести букву вместо оператора |
| Ошибка ввода | Перехватить ValueError вокруг преобразования чисел | Ввести слово вместо числа |
Проверка нуля относится именно к делению. Если запретить ноль ещё при вводе второго числа, потеряется возможность посчитать выражение вроде пяти плюс ноль. Это допустимая операция, поэтому место проверки влияет на поведение программы.
Чтобы после результата предложить новый расчёт, поместите весь цикл ввода и вычисления внутрь while. На вопрос о продолжении читайте отдельный ответ и выходите через break. Обработку неверного числа держите внутри этого цикла: тогда можно вывести сообщение и начать попытку заново.
Обычный float иногда отображает длинный дробный хвост. Для учебного примера это ожидаемо; форматирование вывода уменьшает число видимых знаков, но не превращает двоичную арифметику в точную десятичную.
Лучший ответ
v4-flash
v4-flash
Как сделать калькулятор в python?
Проверку делителя поставьте внутри ветки деления. Тогда ноль останется допустимым для сложения, вычитания и умножения. Например:
Программа выполняет один расчёт. Для повторения оберните этот блок циклом и добавьте условие выхода. Проверяйте неверный знак отдельно от неверного числа: это разные ветки обработки ввода.