-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtape.py
More file actions
37 lines (32 loc) · 1.32 KB
/
tape.py
File metadata and controls
37 lines (32 loc) · 1.32 KB
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
class Tape(object):
def __init__(self, conteudo, simb_branco):
self.conteudo = conteudo
self.cabeca = 0
self.simb_branco = simb_branco
# move a cabeca de leitura/escrita para a direcao especificada:
# direita('R') ou esquerda('L')
def mover(self, dir):
if dir == 'R':
self.cabeca += 1
# caso a cabeca mova alem do tamanho atual da fita,
# acrescente um simbolo branco ao final da fita,
# mantendo a infinitude da mesma
if self.cabeca == len(self.conteudo):
self.conteudo.append(self.simb_branco)
if dir == 'L':
self.cabeca -= 1
# caso a cabeca mova a esquerda da posicao zero da fita,
# acrescente um simbolo branco e mova a cabeca para a posicao zero,
# mantendo a infinitude da fita
if self.cabeca < 0:
self.cabeca = 0
self.conteudo.insert(0, self.simb_branco)
# insere o simbolo na posicao onde se encontra a cabeca da fita,
# substituindo o simbolo ja existente
def escrever(self, simb):
self.conteudo[self.cabeca] = simb
# retorna simbolo atual da fita
def ler(self):
return self.conteudo[self.cabeca]
def __str__(self):
return "f={},c={}".format(self.conteudo, self.cabeca)