for item in itens1: print(item)

for item in itens1: print(item)

por Luiz Felype Azevedo Pascoal -
Número de respostas: 3

Boa tarde. Meu código passou em todos os testes do enunciado, menos do que pede para imprimir os itens contidos na lista de itens criados pelo método 'lexer'. Estou usando o Idle e o Shell entra em loop e não termina a execução. As listas de teste estão com comprimento curto, e os testes anteriores comprovam que ela contem itens da classe Item. Gostaria de saber exatamente como esse comando 'for' implementado desse jeito deveria funcionar. Segue abaixo o retorno do Shell para a bateria de testes dos comentários do método Lexer:

 

==== RESTART: C:\ProgramData\Anaconda3\Lib\idlelib\mac0122\calculadora.py ====
>>> hp=Calculadora()
>>> exp1 = "soma=soma + 2 # este é um comentario"
>>> exp2 = "2+3- 123 *3.14 # uma conta"
>>> itens1 = hp.lexer(exp1)
>>> itens2 = hp.lexer(exp2)
>>> type(itens1[0])
<class 'item_lexico.Item'>
>>> type(itens1[1])
<class 'item_lexico.Item'>
>>> itens1[0].lexema
'soma'
>>> itens1[0].tipo
'VAR'
>>> itens1[1].lexema
'='
>>> itens1[1].tipo
'OP'
>>> print(itens1[0])
'soma' (<class 'str'>): VAR
>>> print(itens1[1])
'=' (<class 'str'>): OP
>>> print(itens1[2])
'soma' (<class 'str'>): VAR
>>> print(itens1[3])
'+' (<class 'str'>): OP
>>> print(itens1[4])
2.0 (<class 'float'>): NUM
>>> print(itens1[5])
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    print(itens1[5])
IndexError: list index out of range
>>> for item in itens1: print(item)
KeyboardInterrupt
>>> for item in itens2: print(item)
KeyboardInterrupt

 

Como dito acima, as listas de itens estão com comprimento curto. Também testei com uma lista de números inteiros pequena e conhecida, e o Shell também falhou em executar o comando 'for' implementado desse jeito:

>>> len(itens1)
5
>>> len(itens2)
7
>>> l=[1,2,3,4]
>>> for a in l: print(a)
KeyboardInterrupt

 

Edit: Fiz um programa de teste importando a classe e testei o for sendo executado pelo programa. Funcionou como devia. Aparentemente é apenas problema do Shell falhando em entender o comando for.

¯\_(ツ)_/¯

Em resposta à Luiz Felype Azevedo Pascoal

Re: for item in itens1: print(item)

por Juliet Kietzmann -

para executar loop no shell tive que dar dois enter-s

parece que no primeiro enter ele fica aguardando mais comandos (o prompt muda de linha), e só começa a execução no segundo enter,  quando tem uma segunda linha sem texto

Em resposta à Juliet Kietzmann

Re: for item in itens1: print(item)

por Luiz Felype Azevedo Pascoal -

É, parece que é isso mesmo. Testei de novo e funcionou com o duplo enter. Parece que ele fica em loop por isso nem tinha pensando em tentar isso, além de ter feito os testes com pouco tempo.

Obrigado pela dica, Juliet sorriso

Em resposta à Luiz Felype Azevedo Pascoal

Re: for item in itens1: print(item)

por Victor Decanini -

Estou com o mesmo prolema, mas a resposta fica exatamente igual, segue abaixo.

Não sei o que fazer, alguma sugestão??

Anexo Screenshot_4.png