Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida em " linha "

arquivo = open("palavras.txt",("r"))
for linha in arquivo:
    print(linha.strip())

Como o código entende que " linha " no código representa uma linha, não deveria ser em inglês os comandos?

4 respostas

linha é uma variável, assim como arquivo. As variáveis podem ter o nome que você quiser, em qualquer linguagem, ja que no final elas são apenas containers para valores. E os comandos não tem que ser necessariamente em inglês. Os comandos são funções, métodos, tokens, etc definidos pela especificação da linguagem. Python usa ingês, mas nada impede de eu fazer um subset de Python em português (alias o Portugol é uma lang em português).

Eu entendo a variável e seu conceito, porém no caso em que eu postei, eu não criei nenhuma variável "linha" então como o programa soube que "linha" no codigo era uma variavel ? Por isso a duvida se não era outra coisa.

solução!

Aí que tá, você criou sim. É o mesmo conceito. O for é definido assim:

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]

expression_list retorna um iterator. A suite, ou seja, todo o codigo dentro do for é executado pra cada iteração (cada loop), na ordem retornada pelo iterator. target_list é uma lista de variáveis que segue o padrão de atribuição, o mesmo que variables = values. target_list recebe os itens que são retornados pelo iterator.

Traduzindo, pra cada item em uma expressão passada no for, uma estrutura de dados do tipo iterator é criada. Essa estrutura é especial por conter métodos especiais que são usados por estruturas de repetição, como o for. A cada loop que o for fizer em cima de um iterator, ele cria uma variável que você passou depois da declaração (for variable) e coloca o valor retornado pelo iterator nela: for minha_variavel in valores.

É como se ele fizesse isso (a função criaIterator não existe por padrão no Python, o for consegue criar um iterator a partir de alguns tipos de dados, mas faz parte do funcionamento interno, é preciso criar sua própria função criaIterator):

lista = [1, 2, 3, 4] # declara um valor, nesse caso, uma lista
iterator = criaIterator(lista)  # lista por padrão retorna um tipo list, criamos um iterator a partir dela.
# declara a variavel
variavel = None
# verifica se o iterator tem um item e coloca esse item na variavel, repete isso varias vezes ate surgir um erro
variavel = iterator.__next__()
variavel = iterator.__next__()
variavel = iterator.__next__()
variavel = iterator.__next__()
# na proxima chamada vamos ter um erro pois ja iteramos em cima de todos os items
variavel = iterator.__next__() # erro: StopIteration significa que a lista acabou

O for pega esse erro do final e assume que o loop acabou, saindo da estrutura.

Agora entendi melhor esse conceito, muito obrigado Luiz Eduardo pelas dicas, o professor as vezes atropela uns assuntos, e esquece que somos iniciantes kkk, obrigado e tenha um ótimo dia.