Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2015, 20:37   #1
Asl94
Новичок
Джуниор
 
Регистрация: 08.04.2013
Сообщений: 2
По умолчанию Python, преобразовать префиксную запись в инфиксную

нужно написать программу преобразующую префиксную запись в инфиксную например (+ 1 2 3 (* 3 4)) должно выйти как (1+2+3+(3*4)), через строки, помогите пожалуйста

есть код из инфиксной в постинфиксной, но почему-то выдает ошибку "No module named 'pythonds'"
Код:
from pythonds.basic.stack import Stack

def infixToPostfix(infixexpr):
    prec = {}
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    opStack = Stack()
    postfixList = []
    tokenList = infixexpr.split()

    for token in tokenList:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and \
               (prec[opStack.peek()] >= prec[token]):
                  postfixList.append(opStack.pop())
            opStack.push(token)

    while not opStack.isEmpty():
        postfixList.append(opStack.pop())
    return " ".join(postfixList)

print(infixToPostfix("A * B + C * D"))
print(infixToPostfix("( A + B ) * C - ( D - E ) * ( F + G )"))

Последний раз редактировалось Stilet; 29.03.2015 в 21:13.
Asl94 вне форума Ответить с цитированием
Старый 29.03.2015, 21:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Его качать надебно: http://www.pythonworks.org/pythonds
Видать сторонний он.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.03.2015, 23:18   #3
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Его качать надебно: http://www.pythonworks.org/pythonds
Видать сторонний он.
Верно.

Если у вас линукс попробуйте так: sudo apt get-install python-pythonds или через Pip

Если ни то и не другое не поможет вот на гитхабе лежит
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 01.04.2015, 09:01   #4
Asl94
Новичок
Джуниор
 
Регистрация: 08.04.2013
Сообщений: 2
По умолчанию

помогите найти ошибку

Код:
from pythonds.basic.stack import Stack
 
def PrefToInf(str):
    
    opStack = Stack()
    infixList = []
    parts = str.split(' ')
    first = true
 
    for s in parts:
      
         if s == '+' or s == '*':
         opStack.push(s)
         break
        elif s == ')':
            opStack.pop()
            infixList.append(s)
            break
        elif s == '(':
            if (!first) infixList.append(opStack.peek())
            infixList.append(s)
            first=true
            break
        else:
             if (!first) infList.append(opStack.peek())
            infixList.append(s)
            first=false
            break
 
   
 
print(PrefToInf(" + 1 2 ( * 3 4 )"))
Asl94 вне форума Ответить с цитированием
Старый 01.04.2015, 12:08   #5
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

А текст ошибки угадать? или мне код скопировать и запустить?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать префиксную форму записи в постфиксную FomAW Помощь студентам 2 19.11.2014 17:14
error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл niixon Общие вопросы C/C++ 4 14.09.2013 23:35
преобразование из ПОЛИЗа в инфиксную знапись Sv. Общие вопросы C/C++ 3 12.07.2013 15:18
как преобразовать байты в hex запись?? Galatimus Мультимедиа в Delphi 3 22.04.2013 22:09
преобразовать цифровую запись количества денег в буквенное, в диапазоне от 999,01 до 1200,99 (Паскаль) Babenkko Помощь студентам 12 15.06.2011 14:46