Только начинаю изучать питон, столкнулся на днях с интересной проблемой. Сразу оговорюсь, что гуглом пользовался, поиском по форуму тоже

Писал прогу, которая должна проверять последовательность скобок на корректность. Пока решил ограничиться одним видом скобок.
Считывание решил сделать посимвольное с консоли, чтобы не вся последовательность сразу читалась, скажем, в массив, а считывалось по одному элементу и сразу обрабатывалась в алгоритме. В принципе, если читать сразу весь вход в массив и работать с ним, то ниже описанной пробемы не будет, но раз уж я с ней столкнулся, хочется разобраться.
С самим алгоритмом проблем нет, все прекрасно заработало. Проблемы начались после того, как решил все это обернуть в цикл, чтобы при вводе новой последовательности не надо было заново запускать программу, а выход сделать по заранее придуманной команде.
Собственно, сама проблема - если в какой-то момент обработки становится понятно, что последовательность некорректная (например, “(()))((())”), то происходит возврат из функции проверки, но вместо того, чотбы ожидать новую последовательность она пордолжает обрабатывать старую, с того момента, на котором произошел выход. Довольно быстро стало понятно, что проблема в том, что не происходит очистки буфера stdin.
Что предпринималось:
-sys.stdin.flush()
-попытка восстановить исходное состояние буфера при помощи буфера sys.__stdin__
-termios.tcflush(sys.stdin,termios.TCIFLUSH)
Все это оказалось безразультатно. Помогло только насильное досчитывание остатка буфера перед возвратом из функции, но похоже, что это костыль
)А еще есть просьба следующего содержания. Основная проблема сайтов с курсами и прогами в том, что они говорят только о правильности работы кода, но ничего не говорят о его качестве и читаемости. Поэтому хочется, чтобы более опытные коллеги критично оценили сам код, стиль написания.
Заранее спасибо.
#!/usr/bin/python3.4
import sys
#объявление класса Стек
class Stack:
def __init__(self):
self.items = []
#интерфейс
#проверка на пустоту
def isEmpty(self):
return self.items == []
#добавление нового элемента
def push(self, item):
self.items.append(item)
#извлечение элемента с вершины стека
def pop(self):
return self.items.pop()
#просмотр элемента на вершине стека
def peek(self):
return self.items[len(self.items)-1]
#узнать рамер стека
def size(self):
return len(self.items)
def check():
stack=Stack()
while True:
c = sys.stdin.read(1)
if c == 'e':
print('stopped')
exit(0)
if c == '\n':
break
if c == '(':
stack.push(c)
elif c == ')':
if stack.isEmpty():
sys.stdin.read()
return False
elif stack.peek() == "(":
stack.pop()
if stack.isEmpty():
return True
else:
return False
print('enter \'e\' for exit')
while True:
print(check())