LINUX.ORG.RU

Калькулятор на питоне, непонятно как сделать вывод

 , , ,


1

1

Попробовал сделать простейший калькулятор. Сначала вводим пару чисел, потом вводим операцию, которая будет к этим числам применяться. Вроде бы проще простого.

Сначала идет проверка, что введен один из допустимых знаков (арифметических операций). Потом еще несколько проверок... И доходим собственно до вывода. И тут начинается проблема.

Я более менее понимаю как работает функция print(), и даже попытался потыкать официальный мануал, но не нашел ничего такого, что помогло бы мне реализовать мои хотелки. А хотел бы я получить нечто вот такое:

print(n1 o n2)

Где «n1» и «n2» - это числа, «o» - операция.

Здесь естественно выйдет ошибка синтаксиса.

Например, такая запись в питоне работает:

print(n1 % n2)

А запись выше работать не будет. Потому что при вводе через input() в «o» записывается строка, и print() воспринимает переменную как строку, а не арифметическую операцию.

Посмотрел преобразование типов, там основные типы int, str, bool... Ничего нужного не нашел. Нет такого типа «арифметическая операция», чтобы можно было преобразовать в переменную и удобно подставить в print().

Неужели придется городить небоскреб из if'ов и print'ов для каждой операции, чтобы это обойти?

Не ищу готовое решение, но хоть намекните...

Перемещено leave из general


Паттерн «команда»

hippi90 ★★★★★
()

Анонiмус-style post.

EXL ★★★★★
()
Ответ на: комментарий от anonymous

Этого я еще не прошел, придется обойтись тем что есть.

utrack
() автор топика
Ответ на: комментарий от system-root

Таким способом я сделаю потом отдельно, но пока просят обойтись без функций, которые еще не изучали. Короче, без eval придется городить небоскребы, да?

utrack
() автор топика

Эту планету уже не спасти.

fernandos ★★★
()

изучи лучше tkinter он очень простой и будешь выводить результаты в текстовые поля.

XoFfiCEr ★★☆☆
()

Нет такого типа «арифметическая операция»

Пишите багрепорт, как это нет.

fernandos ★★★
()
Ответ на: комментарий от utrack

Ты тролль или правда в это не вдупляешь?

oprs = {'+', int.__add__, '-': int, __sub__, 'o': lambda a, b: a * b - 2}
a, op, b =input().split(' ')
oprs[op](a,b)

Но если серьезно, то это говно конечно, тебе надо то, что system-root написал

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Ты тролль или правда в это не вдупляешь?

Конечно, любой кто задает вопрос по программированию - тролль.

utrack
() автор топика
Ответ на: комментарий от utrack

Ну постановка вопроса оч тролльная. Кроме того ты отвергаешь очевидно правильный ответ. А именно (https://levelup.gitconnected.com/how-to-write-a-formula-string-parser-in-python-5362210afeab). Энивей надеюсь мой пример тебе помог

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

На форумах говорят, что функцию eval() нежелательно использовать, т.к. она небезопасная. Надо разобраться в этом.

utrack
() автор топика
Ответ на: комментарий от utrack

Ты дальше первого абзаца читал то, что по ссылке? Там так и написано, что eval плохая идея, смотрите как сделать без него.

Aswed ★★★★★
()

Я более менее понимаю как работает функция print(), и даже попытался потыкать официальный мануал, но не нашел ничего такого, что помогло бы мне реализовать мои хотелки. А хотел бы я получить нечто вот такое:

print(n1 o n2)

Где «n1» и «n2» - это числа, «o» - операция.

n1 = input()           # вводим: 123
n2 = input()           # вводим: 456
o = input()            # вводим: /
print( n1 + o + n2 )   # пишет: 123/456
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.