Форум программистов, компьютерный форум, киберфорум
Наши страницы

Python

Войти
Регистрация
Восстановить пароль
 
ARTER616
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 259
#1

Дано выражение в обратной польской записи. Определите его значение - Python

23.06.2017, 18:41. Просмотров 330. Ответов 10
Метки нет (Все метки)

В постфиксной записи (или обратной польской записи) операция записывается после двух операндов.
Например, сумма двух чисел A+B записывается как «A B + ». Запись «B C + D * » обозначает привычое нам (B+C)∗D, а запись «A B C + D * + » означает A+(B+C)∗D.
Достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения.
Дано выражение в обратной польской записи. Определите его значение.
ВХОДНЫЕ ДАННЫЕ

В единственной строке записано выражение в постфиксной записи, содержащее однозначные числа и операции +, −, ∗.
Строка содержит не более 100 чисел и операций.
ВЫХОДНЫЕ ДАННЫЕ

Необходимо вывести значение записанного выражения.
Гарантируется, что результат выражения, а также результаты всех промежуточных вычислений по модулю меньше 2^31.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2017, 18:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Дано выражение в обратной польской записи. Определите его значение (Python):

Дано натуральное число. Определить сумму его цифр, больших a (значение a вводится с клавиатуры, 0<=a<=8) - Python
Дано натуральное число. Определить сумму его цифр, больших a (значение a вводится с клавиатуры, 0&lt;=a&lt;=8). Помогите переделать из...

Вычислить значение выражения в обратной польской записи с использованием стека - C++
Вычислить значение выражения в обратной польской записи с использованием стека. например 6 2 + = 6 + 2 = 8. получается сделать только храня...

Вычислить значение произвольного выражения, представленного в обратной польской записи - C (СИ)
Здравствуйте. Помогите с прогой пожалуйста. Дано арифметическое выражение длиной до 30 символов, заканчивающееся знаком равенства....

Вычислить значение произвольного выражения, представленного в обратной польской записи - C (СИ)
Вычислить значение произвольного выражения, представленного в обратной польской записи. Например: обычная запись: (b+c)*d обратная...

Написание калькулятора в Обратной Польской Записи - C++
Всем привет, только недавно начал изучать С++ и преподаватель дал задание написать калькулятор в Обратной Польской Записи. Сначала...

Калькулятор на основе обратной польской записи - Java
Преподаватель задал создать калькулятор на основе обратной польской записи, а я в Java совсем новичок. Калькулятор должен содержать...

10
Рыжий Лис
Просто Лис
878 / 418 / 123
Регистрация: 17.05.2012
Сообщений: 1,689
Записей в блоге: 4
24.06.2017, 07:14 #2
Хоть бы пример входных/выходных данных привели. А то не интересно.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def f(s):
    stack = []
    for i in s.split():
        try:
            i = int(i)
            # числа кладём в стек
            stack.append(i)
        except ValueError:
            #~ print(stack)
            # с верхушки стека забираем два числа
            a, b = stack.pop(), stack.pop()
            #~ print(stack)
            if i == '+':
                r = a + b
            elif i == '*':
                r = a * b
            else:
                raise NotImplemented
            stack.append(r)
    assert len(stack) == 1
    return stack[0]
 
 
print(f('1 2 +'))
print(f('1 2 + 4 *'))
print(f('1 2 3 + 4 * +'))
0
ARTER616
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 259
25.06.2017, 13:22  [ТС] #3
А как с вводом сделать?
0
Рыжий Лис
Просто Лис
878 / 418 / 123
Регистрация: 17.05.2012
Сообщений: 1,689
Записей в блоге: 4
25.06.2017, 13:46 #4
И опять, ни версии питона, ни какой ввод - из файла или командной строки.
Python
1
2
3
4
5
6
7
try:
    raw_input
except NameError:
    raw_input = input
 
while True:
    print(f(raw_input('> ')))
0
ARTER616
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 259
26.06.2017, 17:43  [ТС] #5
Питон 3, ввод ручной, вылезает ошибка builtins.TypeError: exceptions must derive from BaseException
0
Рыжий Лис
Просто Лис
878 / 418 / 123
Регистрация: 17.05.2012
Сообщений: 1,689
Записей в блоге: 4
26.06.2017, 17:46 #6
18 строчка:
Python
1
raise NotImplementedError
0
ARTER616
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 259
26.06.2017, 17:51  [ТС] #7
Так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def f(s):
    stack = []
    for i in s.split():
        try:
            i = int(i)
            # числа кладём в стек
            stack.append(i)
        except ValueError:
            #~ print(stack)
            # с верхушки стека забираем два числа
            a, b = stack.pop(), stack.pop()
            #~ print(stack)
            if i == '+':
                r = a + b
            elif i == '*':
                r = a * b
            else:
                raise NotImplementedError
            stack.append(r)
    assert len(stack) == 1
    return stack[0]
try:
    raw_input
except NameError:
    raw_input = input
 
while True:
    print(f(raw_input('> ')))
0
Рыжий Лис
Просто Лис
878 / 418 / 123
Регистрация: 17.05.2012
Сообщений: 1,689
Записей в блоге: 4
26.06.2017, 17:52 #8
Да.
0
ARTER616
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 259
26.06.2017, 17:54  [ТС] #9
File "E:/Питон/untitled-1.py", line 28, in <module>
print(f(raw_input('> ')))
File "E:/Питон/untitled-1.py", line 18, in <module>
raise NotImplementedError
0
Рыжий Лис
Просто Лис
878 / 418 / 123
Регистрация: 17.05.2012
Сообщений: 1,689
Записей в блоге: 4
26.06.2017, 17:55 #10
Так специально не весь функционал реализован. Допишите программу сами.
0
ARTER616
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 259
26.06.2017, 17:59  [ТС] #11
Знал бы я еще как питон устроен...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2017, 17:59
Привет! Вот еще темы с ответами:

Вычисление выражения, использование обратной польской записи - C++
приветствую, люди. можете помочь с реализацией вычисления выражения с помощью обратной польской записи на c++. посоветуйте сто нибудь....

Калькулятор считающий выражения обратной польской записи из файла - C++
Здравствуйте! У меня вот такое задание &quot;Напишите программу, вычисляющую выражение в обратной польской записи. Исходное выражение...

Алгоритм сортировочной станции(вычисление по обратной польской записи). - C++
Всем привет. Есть вот такой код: #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; const int SIZE...

Странный результат вычисления строки в обратной польской записи - C (СИ)
Ввожу строку, преобразовывает ок, но считает как-то криво Например 100+2 = 200, а 123+3 = 446 хотя в основном считает нормально,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru