Ir ao conteúdo
  • Cadastre-se

Python Contador com comportamento inesperado - Python


Posts recomendados

Oi pessoal, espero que estejam tudo bem!

Eu estou fazendo um exercício mental e estou tentando ler uma string, separar cada em uma lista e passar cada string letra por letra.
Eu fiz o código abaixo, mas tem problema. Para identificar o inicio e fim de uma palavra e separar as letras de cada uma eu criei um contador, mas ele não funciona direito.

Alguém me explica qual a lógica que eu não entendi? Valeu mesmo, galera!

 

frase = str(input("frase:")).lower()
palavras = [palavra for palavra in (frase.split())]
contp = 0
contl = 0
for c,d in enumerate(palavras):
    print(f'o tamanho de "{d} é "{len(d)}"')
    contp += 1
    for letras in range(len(d)):
        if len(palavras[c]) > contl:
            contl += 1
        else:
            contl = 0
            print(f'Zerou?{contl}')
        print(f'o contador de letras da palavra {contp} - a letra {d[letras]} - tá em:{contl}')

O resultado tá saindo assim...

 

frase:eu gosto de programar em python
o tamanho de "eu é "2"
o contador de letras da palavra 1 - a letra e - tá em:1
o contador de letras da palavra 1 - a letra u - tá em:2
o tamanho de "gosto é "5"
# era para zerar aqui
o contador de letras da palavra 2 - a letra g - tá em:3
o contador de letras da palavra 2 - a letra o - tá em:4
o contador de letras da palavra 2 - a letra s - tá em:5
# mas tá zerando aqui
Zerou?0
o contador de letras da palavra 2 - a letra t - tá em:0
o contador de letras da palavra 2 - a letra o - tá em:1
o tamanho de "de é "2"
o contador de letras da palavra 3 - a letra d - tá em:2
Zerou?0
o contador de letras da palavra 3 - a letra e - tá em:0
o tamanho de "programar é "9"
o contador de letras da palavra 4 - a letra p - tá em:1
o contador de letras da palavra 4 - a letra r - tá em:2
o contador de letras da palavra 4 - a letra o - tá em:3
o contador de letras da palavra 4 - a letra g - tá em:4
o contador de letras da palavra 4 - a letra r - tá em:5
o contador de letras da palavra 4 - a letra a - tá em:6
o contador de letras da palavra 4 - a letra m - tá em:7
o contador de letras da palavra 4 - a letra a - tá em:8
o contador de letras da palavra 4 - a letra r - tá em:9
o tamanho de "em é "2"
Zerou?0
o contador de letras da palavra 5 - a letra e - tá em:0
o contador de letras da palavra 5 - a letra m - tá em:1
o tamanho de "python é "6"
o contador de letras da palavra 6 - a letra p - tá em:2
o contador de letras da palavra 6 - a letra y - tá em:3
o contador de letras da palavra 6 - a letra t - tá em:4
o contador de letras da palavra 6 - a letra h - tá em:5
o contador de letras da palavra 6 - a letra o - tá em:6
Zerou?0
# e continua zerando na hora errada!
o contador de letras da palavra 6 - a letra n - tá em:0


OBRIGADO!

Link para o comentário
Compartilhar em outros sites

Oi amigo, obrigado pela resposta!

Acho que não expliquei direito, deixa eu tentar!!!

Eu consigo fazer list comprehension e dict comprehension para fazer python contar a quantidade de letras em cada palavra na frase.

 

frase = str(input("frase:")).lower()
palavras = [palavra for palavra in frase.split()]
tamanho = [len(palavra) for palavra in frase.split()]
resultado = {k:v for k,v in zip(palavras,tamanho)}
print(resultado)


Imagina a frase: eu gosto de programar em python
 

frase:eu gosto de programar em python
{'eu': 2, 'gosto': 5, 'de': 2, 'programar': 9, 'em': 2, 'python': 6}

 
Saiu tudo bem, mas o problema tá no código que eu postei na pergunta.
Eu queria o resultado fosse:
 

frase:eu gosto de programar em python
{'eu': 2, 'gosto': 5, 'de': 2, 'programar': 9, 'em': 2, 'python': 6}
{'eu': [e,u], 'gosto': [g,o,s,t,o], 'de': [d,e], 'programar': [p,r,o,g,r,a,m,a,r], 'em': [e,m], 'python': [p,y,t,h,o,n]}


No código que eu postei na pergunta eu detalhei cada passo para que mesmo entendesse a lógica, depois vou colocar em comprehension. As variáveis "contp" e "contl" são, respectivamente, para contar a posição da string dentro da lista e da letra na respectiva string.
Quando a string "eu" (contp = 1) acabasse (contl = 2), o contador de letras (contl) zeraria e assim recomeçaria para "gosto" (contp = 2).
Meu intuito seria fazer o programa reconhecer que já pode passar para a próxima string e assim alocar cada letra separada em um lista/tupla específica para ficar como eu citei acima.

Eu acho que tá muito "truncado", estou complicando muito - sou iniciante.

Link para o comentário
Compartilhar em outros sites

Oi pessoal, muito obrigado pelas respostas!

Eu consegui fazer, a ideia que Midori deu foi muita boa. Só tive que adicionar um lista.clear(). Usar o lista.copy() estava acumulando os dados da lista na medida que o "for" ia rodando. O .clear() resolveu tranquilamente.

O código ficou assim

 

lista = []
dicio = {}
frase = str(input("frase:")).lower()
palavras = [palavra for palavra in (frase.split())]
tamanho = [len(palavra) for palavra in frase.split()]
resultado = {k:v for k,v in zip(palavras,tamanho)}
for c,d in enumerate(palavras):
    lista.clear()
    for letras in range(len(d)):
        lista.append(d[letras])
    dicio[d] = lista.copy()
print(dicio)
print(resultado)

 E o resultado:

frase:jovem gafanhoto da programação
{'jovem': ['j', 'o', 'v', 'e', 'm'], 'gafanhoto': ['g', 'a', 'f', 'a', 'n', 'h', 'o', 't', 'o'], 'da': ['d', 'a'], 'programação': ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'a', 'ç', 'ã', 'o']}
{'jovem': 5, 'gafanhoto': 9, 'da': 2, 'programação': 11}


Forte abraço, fiquem bem!

Acho que tá resolvido!

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!