Решение задачи #18. Python Яндекс CodeRun, Значение арифметического выражения
Вариант решения задачи на языке программирования Python с Яндекс CodeRun.
Категория: Алгоритмы.
Название задачи: Значение арифметического выражения.
Сложность: Средняя.
Статус решения: "Решено".
Условие задачи:
Задано числовое выражение. Необходимо вычислить его значение или установить, что оно содержит ошибку. В выражении могут встречаться знаки сложения, вычитания, умножения, скобки и пробелы (пробелов внутри чисел быть не должно). Приоритет операций стандартный. Все числа в выражении целые и по модулю не превосходят 2×1092×109. Также гарантируется, что все промежуточные вычисления также не превосходят 2×1092×109.
Решение:
Python
import sys
def main():
"""
Для чтения входных данных необходимо получить их
из стандартного потока ввода (sys.stdin).
Данные во входном потоке соответствуют описанному
в условии формату. Обычно входные данные состоят
из нескольких строк.
"""
input = sys.stdin.read
expression = input().strip() # Считываем строку и удаляем лишние пробелы
try:
# Используем eval для вычисления выражения в строке
# eval безопасно использовать здесь, так как вход строго контролируется
result = eval(expression)
print(result)
except (SyntaxError, NameError, ZeroDivisionError):
# Если возникает ошибка синтаксиса, использования имени или деления на ноль, выводим "WRONG"
print("WRONG")
if __name__ == '__main__':
main()
Объяснение кода
Чтение данных:
Используется sys.stdin.read для получения строки, содержащей выражение.
Метод strip() удаляет начальные и конечные пробелы, чтобы избежать ошибок.
Вычисление выражения:
Используется eval, чтобы вычислить значение выражения. eval в данном случае безопасен, так как вход строго ограничен указанным форматом (операторы, числа, скобки).
Обработка ошибок:
Если в выражении присутствуют синтаксические ошибки (например, неправильное использование операторов или скобок), или деление на ноль, программа перехватывает исключения и выводит "WRONG".
Результат:
Если выражение корректно, результат выводится в стандартный поток вывода.
В противном случае выводится строка "WRONG".
Источник решения: hdhai.com