Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 29.03.2015, 21:37   #1
Asl94
Новичок
 
Регистрация: 08.04.2013
Сообщений: 2
Репутация: 10
По умолчанию 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 в 22:13.
Asl94 вне форума   Ответить с цитированием
Старый 29.03.2015, 22:15   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

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

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

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

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

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

Код:

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, 13:08   #5
Stanislav
Квадрокоптерист
Профессионал
 
Регистрация: 29.09.2007
Сообщений: 1,800
Репутация: 532
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать префиксную форму записи в постфиксную FomAW Помощь студентам 2 19.11.2014 18: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


21:31.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru