TabError: inconsistent use of tabs and spaces in indentation

0

I'm trying to write a script and only the first part works:

import re

with open('lista.csv', 'r') as f:
    primeira_linha = f.readline()
    #print(primeira_linha)
    outras_linhas = f.readlines()
    #print(outras_linhas)
    for linha in outras_linhas:
        coluna = linha.split(";")
        nome = coluna[0]
        idade = coluna[1]
        sexo = coluna[2]
        ano = coluna[3]
        #print (nome)


        #encontrar o nome mais longo da lista
        for x in sorted(nome):
            print ("O nome mais longo é:" + max(nome))

        #nomes que terminam em a 
        for a in nome:
            if a in re.findall("r'(.*)a$"):
                print ("Os nomes que terminam em a sao:" + a)

        #nomes compostos
        for c in nome:
            if c in re.findall("r'(.*)-(.*)"):
                print ("Os nomes compostos sao:" + c)

        #nomes que têm um y
        for y in nome:
            if "y" in nome:
                print ("Os nomes que têm y sao:" + a)

        #nome que mais se repete
        repeticoes = {}
        for r in nome:
            if r in repeticoes:
                repeticoes[r] = repeticoes[r] + 1
            else:
                repeticoes[r] = 1

                print (repeticoes) 

In addition to the fact that no for works, this error still appears that I can not decipher (I imagine it to be tab / indentation, but why?

 File "portugues.py", line 20
     print ("O nome mais longo é:" + max(nome))
                                              ^
TabError: inconsistent use of tabs and spaces in indentation
    
asked by anonymous 29.11.2016 / 14:54

1 answer

1

The problem "inconsistent use of tabs and spaces in indentation" should be because there is inconsistency between spaces and tabs such as @jbueno said in comment, better keep or always spaces, or always tabs.

As for none of them to be working, it is because you are doing loops inside loops and in this context it does not work, I gave you an example to help you, for this excuse to import re :

lista.csv:

nome;idade;sexo;ano
miguel;30;masculino;1985
pitanga;25;masculino;1990
Sara;20;feminino;1996
Inês;23;feminino;1993
yuri;12;masculino;2004
Sara;40;feminino;1975

Code:

with open('lista.csv', 'r') as f:
    lines = f.readlines()
    colunas = lines[0].split(';') # na primeira linha temos os nomes das colunas
    params = [] # cada linha (lista) a seguir vai ser guardada dentro de uma lista mae
    for line in lines[1:]: # escusamos de passar pela primeira linha outra vez, já sabemos que sao os nomes das colunas
        params.append(line.split(';')) # guardando cada linha, dados de cada pessoa

# aqui e importante saber a estrutura da variavel params, print(params) para perceber, no indice 0 em cada sublista temos um nome
nome_mais_longo = max((i[0] for i in params), key=len) # vamos saber o nome maior com base no returno da função len
nomes_que_terminam_a = [i[0] for i in params if i[0].endswith('a')] # endswith e um metodo que dá muito jeito para isto, se o nome acaba em 'a'
nomes_com_y = [i[0] for i in params if 'y' in i[0]] # guardamos numa lista os nomes se comecarem com 'y'

contagens_nome = {}
for i in params: 
    contagens_nome[i[0]] = contagens_nome.get(i[0], 0) + 1 # tentamos aceder a chave i[0], nome em que estamos, se nao existir comeca como 0 e somamos 1

nome_que_mais_se_repete = max(i[::-1] for i in contagens_nome.items()) # revertemos cada (chave, valor) de maneira a ficarmos com (valor, chave) para conseguirmos extrair o valor max
#nome_que_mais_se_repete = max(contagens_nome.items(), key=lambda tup: tup[1]) # esta seria outra maneira de fazer a linha acima  

print(nome_mais_longo)
print(nomes_que_terminam_a)
print(nomes_com_y)
print(nome_que_mais_se_repete)

Output:

  

pitanga
  ['pitanga', 'Sara', 'Sara']
  ['yuri']
  (2, 'Sara')

In the code comments try to explain each line, read carefully.

    
29.11.2016 / 15:39