Taberror: inconsistent use of tabs and Spaces in indentation

Asked

Viewed 5,173 times

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) 

Apart from none for work, still appears this error that I can not decipher (I imagine it is tabulation/ indentation, but why?

 File "portugues.py", line 20
     print ("O nome mais longo é:" + max(nome))
                                              ^
TabError: inconsistent use of tabs and spaces in indentation
  • 2

    This is a problem with your editor, not Python. You need to make sure that the TABS settings are correct. By the way, you use tabs or spaces to indent the code?

  • True, there is no indentation error in python IDLE only in Geany. And I always use TABS. But my script still doesn’t work. Thanks anyway (sorry for the lack of accents)

1 answer

1


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

As for none of it to be working, it is because it is making loops inside loops and in this context does not work, I made an example to help you, so it does not matter re:

list 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 I try to explain each line, read carefully.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.