This repository has been archived by the owner on Oct 14, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocessor.py
60 lines (48 loc) · 2.26 KB
/
processor.py
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# -*- coding: utf-8 -*-
#####
# Processor: Essa classe eh responsavel por analisar as entradas e verificar se os parentese, chaves e colchetes
# estao balanceados.
# O metodo principal eh o findErro() que procura apenas pelos erros mais simples, otimizando o desempenho
# caso exista. Caso contrario, o metodo replaceAll() remove de forma interativa todos os pares balanceados,
# se ao final de sua execucao a string nao for vazia, significa que exite uma desbalanceamento.
# Por fim a classe viewText() eh usada apenas para gerar a string de impressao na view, marcando o elemento
# desbalanceado.
#####
class Processor():
def __init__(self, value):
self.value = value
def viewText(self, i=None):
if (i == -1):
return "Balanceado", "<span style='color: green'>" + self.value + "</span>", "Essa entrada atende a todas restrições."
elif(i == len(self.value)):
return "Não Balanceado", "<span style='color: red'>" + self.value + "</span>", "Há um problema de balanceamento nessa entrada."
else:
text = self.value
text = "Não Balanceado", text[:i] + "<span style='color: red'>" + text[i] + "</span>" + text[i+1:], "Há um problema de balanceamento com o caracter '"+text[i]+"' nessa entrada."
return text
def replaceAll(self):
open_close = "()", "[]", "{}"
bValue = self.value
condition = True
while (condition):
aValue = bValue
for oc in open_close:
bValue = bValue.replace(oc, "")
condition = not(aValue == bValue)
if len(bValue) == 0:
return self.viewText(-1)
else:
return self.viewText(len(self.value))
def findErro(self):
erros = "(]", "(}", "[)", "[}", "{)", "{]",
for op in ")]}":
if (self.value[0] == op):
return self.viewText(0)
for op in "([{":
if (self.value[-1] == op):
return self.viewText(len(self.value)-1)
for op in erros:
f = self.value.find(op)
if (f != -1):
return self.viewText(f)
return self.replaceAll()