4
respostas

Caracteres desconfigurados - Parte II

Tive o mesmo problema que foi indicado no tópico Caracteres desconfigurados.

Apesar de não estar explícito, parece que a solução foi criar um arquivo texto em outro encoding (não ficou claro no tópico).

No entanto, achei outra solução que gostaria de compartilhar...

Veja, o arquivo .txt, quando criado no PyCharm, fica com encoding UTF-8. Mas, a função read(), de acordo com a documentação, lê o arquivo com encoding padrão dependente da plataforma, ou seja, pode não estar alinhado com o do arquivo .txt.

A solução, no caso, foi "forçar" o encoding de leitura da seguinte forma:

arquivo = open(nome_arquivo, "r", encoding="utf-8")

Um ponto que ainda vou pesquisar é que o usuário, ao chutar c para a palavra maça, vai acusar erro - tem que digitar o c com cedilha ç para dar certo. Idem para ã caso a palavra maçã seja usada na lista...

Alguém fez isso?

4 respostas

Olá Ramon, tudo bem com você?

Peço desculpas pela demora no retorno.

Fico feliz em ver sua contribuição para o fórum da Alura. A definição do encoding que será utilizado na abertura de um arquivo é extremamente importante para garantir que o programa interprete os caracteres do arquivo de maneira adequada, como mostro abaixo:

arquivo = open('palavras.txt', 'r', encoding="utf-8")

Quanto ao carregamento da palavra maçã para o jogo de adivinhação, o usuário deverá fornecer as letras exatas, o Python irá reconhecer e diferenciar o C do c-cedilha (Ç), assim como A de Ã. No GIF abaixo apresento a execução do código com a seleção da palavra maçã.

Gif da tela do PyCharm com execução do código da forca, com a palavra maça como palavra secreta

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi, Felipe.

Sim, tem que digitar certinho a letra com acento. MAS, minha dúvida (que, relendo, vi que talvez não tenha deixado tão explícita) é se existe uma maneira "fácil" de comparar o "c" com "ç" ou o "a" com "ã" e o programa entender como acerto. Ou seja, sem ter que comparar "a" com "ã", "â", "á" diretamente no nosso código - se já não existe uma lib que faça isso...

Oii Ramon.

Agradeço o seu retorno e explicação. No Python temos o módulo unidecode da biblioteca unidecode. A biblioteca unidecode do Python será utilizada para simplificar o texto, removendo acentos e outros símbolos das palavras. Isso torna o texto mais rápido e prático de entender, sem perder o significado das palavras. É especialmente útil quando trabalhamos com textos de diferentes idiomas. No exemplo abaixo é apresentado o uso do módulo unidecode removendo os caracteres especiais da string.

from unidecode import unidecode

texto = "Olá, como está você?"
texto_normalizado = unidecode(texto)
print(texto_normalizado)

Resultado

Ola, como esta voce?

No projeto do curso, para fazer o uso do módulo unidecode, será necessário realizar a sua instalação e algumas mudanças no código da aula. Deixo abaixo os passos a serem seguidos:

  • Instale a biblioteca executando o código abaixo no terminal aberto na pasta do seu projeto.
      pip install unidecode
  • No arquivo forca.py adicione no topo do arquivo a importação do módulo
      from unidecode import unidecode
  • Na função jogar() e dentro do laço while substitua a linha if chute in palavra_secreta: pelo código abaixo que é responsável por adicionar a verificação se o chute do jogador contém a letra acentuada ou não acentuada.
      if(chute in palavra_secreta or unidecode(chute) in unidecode(palavra_secreta)):
  • Na função marca_chute_correto() substitua a linha if letra == chute: pelo código abaixo, responsável por adicionar a verificação se o chute do jogador corresponde à letra correta, ignorando a diferença entre letras maiúsculas e minúsculas e a presença de acentos.
      if (unidecode(chute).upper() == unidecode(letra).upper()):
  • Após as mudanças salve o arquivo e execute-o

Após a realização dessas mudanças no código, caso o usuário insira a letra c ou a letra ç ela será reconhecia como iguais. O mesmo acontece para letras que possuem acentos. No GIF abaixo apresento a execução do código a pós as mudanças.

GIF Contendo a execução do código após as mudanças apresentadas acima

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Show, Rafael! Obrigado pelo feedback e pela dica! ;-)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software