Как сделать консольный калькулятор на Python?

я хочу сделать калькулятор на Python. Когда я смотрю в интернете как сделать калькулятор на python мне попадаются калькуляторы по типу введите первый, введите второй оператор. Как можно сделать так чтоб можно было просто написать 2 + 2 и получить ответ?


Ответы (6 шт):

Автор решения: Maksimka

Можно попробывать приравнивать к числовой переменной до того как выдаст исключение из-за + или - оператора, потом сохранить его в стринг переменную, а потом следующее число просто до конца сохранить в числовую переменную, а потом просто условие, если переменная стринг равняется + или минус, то мы выполняем операцию с result = num1 + num2. Как то так.

→ Ссылка
Автор решения: Zhihar

вот самый функциональный калькулятор:

print("результат: ", eval(input("Введите: ")))

но пользоваться им очень опасно

→ Ссылка
Автор решения: Danis
def f(inp):
    res = []
    n = 0
    for i in range(len(inp)):
        if inp[i] in ("+", "-", "*", "/"):
            res.append(int(inp[n:i]))
            res.append(inp[i])
            n = i + 1
    res.append(int(inp[i:]))
    
    return res

данный код разделяет строку на части, к примеру 5 * 6 / 7 он превратит в [5, "*", 6, "/", 7]

→ Ссылка
Автор решения: TigerTV.ru

Вот самый функциональный калькулятор:

import os
os.system("bc")

и пользоваться не опасно.

→ Ссылка
Автор решения: Stanislav Volodarskiy

На верхнем уровне уровне работает read-eval-print loop (REPL).

read читает строку и разбивает её на токены - минимальные элементы имеющие самостоятельное значение. Простейший способ разбить на токены - регулярное выражение, которое выделит символы операций '+-*/()' и числа.

print печатает ответ.

eval по последовательности токенов вычисляет значение. Для вычисления используется алгоритм сортировочной станции. shunting-yard algorithm - более подробное изложение, на английском.

Алгоритм сортировочной станции переводит обычную алгебраическую (её ещё называют инфиксной) запись в обратную польскую нотацию (постфиксную запись). Несколько примеров:

1 - 2       -> 1 2 -
1 - 2 * 3   -> 1 2 3 * -
(1 - 2) * 3 -> 1 2 - 3 *

Постфиксная запись обходится без скобок. Вычислить значение выражения в такой записи можно с помощью стековой машины. Для записи 1 2 3 * - последовательность действий будет такой:

токен стек     комментарий
      []       в начале стек пуст
1     [1]      число 1 кладем в стек
2     [1 2]    число 2 кладем в стек
3     [1 2 3]  число 3 кладем в стек
*     [1 6]    выбираем из стека два числа и кладём назад их произведение
-     [-5]     выбираем из стека два числа и кладём назад их разность

На Java можно уложится в сотню строк. На Python думаю что пятидесяти хватит.

→ Ссылка
Автор решения: wwww
s,a,e = map(
    str,
    input().split()
 )
a = a+"1"
s = int(s)
e = int(e)

if a == "+1":
    print(s + e)
elif a == "*1":
    print(s * e)
elif a == "%1":
    print(s // e)
elif a == "-1":
    print(s - e)
else:
    pass
→ Ссылка