2016-11-13 2 views
-4

Мне нужен совет. Мне нужно написать программу на Python, которая запрашивает у пользователя строку S, состоящую из левых и правых скобок, например (()))(()(.Обработка строк в Python (в виде списка)

После этого программе необходимо подсчитать количество левых и количество правых скобок входной строки. Например, строка (()))(() содержит четыре правых скобки и четыре левых скобки. Подсказка: ввести два счетчика, инициализированных с нуля в начале. Затем исследуйте символы строки в цикле. Для приращения текущего символа счетчик left на 1 f символ (, в противном случае - приращение на 1 счетчик right.

Затем мне нужно проверить, является ли строка математической.

Назовем строку math-like, если скобки встречаются как в математической формуле. Например, строки (), (())(), (()()) являются математическими, а строки ))(())(( и ())(() - нет. Мне нужно написать программу, которая печатает "YES", если входная строка является математической и "NO" в противном случае. Подсказка. В частности, для каждой итерации цикла мне нужно проверить, что значения счетчикови right удовлетворяют конкретному условию.

Я просто новичок, так что мне действительно сложно писать реализацию этой задачи или, по крайней мере, представить, как это должно выглядеть.

Буду признателен за любую помощь, потому что мне действительно нужно решить эту проблему. Заранее спасибо!

+3

Это известное (и одно из самых главных) применение структуры данных стека. Попробуйте найти «круглые скобки, совпадающие с стеком» –

ответ

0

Звучит для меня так, как будто вы ищете кого-то, кто ответит вам за упражнение. Главное в том, что вы работаете. Итак, вот стартер, а не «здесь, дайте это своему учителю».

Для точного анализа партитур требуется больше; поэтому обращает внимание на заказ скобки. Но вот как пройти через строку и посмотреть, что у вас есть:

test1 = '(()))(()(' 
test2 = '(()))(()' 

def ptest(test): 
    lefts = 0 
    rights = 0 
    balance = 0 
    for c in test: 
     if c == '(': 
      balance += 1 
      lefts += 1 
     elif c == ')': 
      balance -= 1 
      rights += 1 
    print 'testing "'+test+'"' 
    print 'lefts='+str(lefts)+' rights='+str(rights) 
    if balance == 0: print 'balanced, possibly math-like' 
    else: print 'unbalanced, definitely not math-like' 

ptest(test1) 
ptest(test2) 
+0

Это часть проекта, в который я вовлечен, я просто не профессионал в программировании, поэтому мне действительно нужна была помощь, и я очень благодарен, что вы помогли мне чтобы понять, что я должен делать, я очень ценю это. спасибо! :) –

+0

Мое удовольствие. К сожалению, SO довольно забавно о том, что такое «ОК». Вот откуда пришли все анально-ретентивные нисходящие потоки. Извини за это. Не я. :) – fyngyrz

Смежные вопросы