Python
Решить задачу без метода "eval" на пайтоне
Дана строка, содержащая одно или более целых чисел от 0 до 109, разделенных знаками “+” или “-”. Вычислите значение этого выражения.
print(sum(map(int, input().replace(' ', '').replace('+', ' +').replace('-', ' -').split())))
Убираем из строки пробелы, ставим пробел перед каждым плюсом и минусом, разрезаем строку по пробелам, преобразуем строки в числа, суммируем.Без eval
exec(f"print({input()})")
Для решения данной задачи можно использовать алгоритм стека. Мы будем использовать два стека: один для чисел и один для операторов.
Разбейте строку на подстроки, разделенные знаками “+” или “-”.
Проходите по каждой подстроке и добавляйте числа в стек чисел.
Если следующий знак в выражении “+”, добавьте его в стек операторов. Если следующий знак “-”, поменяйте его на противоположный (т.е. “+”) и добавьте в стек операторов.
Если следующая подстрока не содержит чисел (т.е. это оператор), добавьте ее в стек операторов.
Пройдите по стеку операторов, вытаскивая операторы по одному и применяя их к двум верхним числам в стеке чисел. Результат поместите обратно в стек чисел.
В конце работы алгоритма в стеке чисел останется одно число – значение выражения.
def evaluate_expression(expression):
num_stack = []
op_stack = []
i = 0
while i < len(expression):
if expression[i].isdigit():
j = i
while j < len(expression) and expression[j].isdigit():
j += 1
num_stack.append(int(expression[i:j]))
i = j
elif expression[i] in "+-":
op_stack.append(expression[i])
i += 1
else:
i += 1
while op_stack:
op = op_stack.pop()
num2 = num_stack.pop()
num1 = num_stack.pop()
if op == "+":
num_stack.append(num1 + num2)
else:
num_stack.append(num1 - num2)
return num_stack[0]
Вы можете вызвать эту функцию, передав строку в качестве аргумента:
expression = "1+2-3+4-5"
result = evaluate_expression(expression)
print(result) # Выведет: -1
Сергей Шошин
В качестве троллинга учителя можно использовать метод "exec", если грубо он делает тоже самое что и "eval".
Хз как делать, но знаю что через импорт рандом.
Похожие вопросы
- Помогите решить задачу пайтон срочно
- Пайтон программирование помогите решить задачу пжпжж
- Помогите, пожалуйста, решить задачу Python
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Нужно решить задачу на Python
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Помогите решить задачу на питоне. пожалуйста.
- Не получается решить задачу по Python, как решить?
- Помогите мне пожалуйста решить задачу на питоне!
- Проект Эйлера / Правильно ли решил задачу? Python