Oi Herbet,
Dei uma olhada aqui, escrevi alguns comentários só pensando no primeiro método, espero que ajude.
Primeira coisa que senti é que tu poderia melhorar os nomes das tuas variáveis e métodos. Comecei a ler a definição sem saber o que erano_inter (no é de número ou de não? inter é de interação? Intercalar? O que a função deveria fazer?). E o que é a? Uma palavra? O número de vezes que ela já aparceu? Não precisa responder as perguntas para mim, mas é só para exemplificar que teu código, com melhores nomes de variáveis, já pode ajudar quem for lê-lo (você daqui a 6 meses, 2 anos, voltando a um projeto por exemplo) a entender o que cada trecho faz.
Lembre-se do Zen do Python (pesquei três versos):
Mas indo ao código, à lógica e sintaxe: podemos descobrir se a variável aé vazia ou não de uma forma mais pythônica:
if a:
return 'Variável `a` existe e não é vazia`
Ou ainda:
if not a:
return 'Variável `a` (provavelmente) é vazia`
Coloquei provavelmente pois no Python vários valores de a podem cair naquela condicional ali: False, None, 0, [] (uma lista vazia)… mas enfim, se saquei a ideia do teu código, acho que não tem problema usarif not ali. Se quiser ler mais sobre essa parte, isso fica nessa parte da documentação do Python: Boolean operations.
Outra coisa é que você usa o dict_w dentro do método, mas ele é definido lá fora. Isso funciona pois quando o Python não acha o objetodict_w dentro do método ele o procura fora. Mas mesmo assim isso pode dar problema. Caso você chame no_inter antes de definirdict_w, teu método quebra, por exemplo. Acho que no futuro, quando você for estudar classes, vai ficar facinho de contornar isso — fique tranquilo. Por agora, se quiser ser mais explícito nisso, acho que vale muito a pena: é só adicionar um global no começo do teu método. Deixando explícito assim, diminui a chance de alguém chamar o no_inter(a) antes de ter definido dict_w, pois a primeira linha do método já fica ali de lembrete. No mais, esse artigo pode te interessar, ele explica como o Python organiza seus objetos.
Por fim, não precisamos iterar com o dicionário para ver se a é uma de suas chaves. Como vi que já usas o in, podemos considerar quedict_w.keys() retorna um objeto iterável. Então podemos usar o incom dict_w.keys(). Ou seja, podemos simplesmento perguntar a in dict_w.keys()?
Com isso, dá eliminar o a.lower() que era chamado duas vezes e, juntando o que comentei antes simplificar teu código:
def no_inter(a):
global dict_w
a = a.lower()
if not a or a in dict_w.keys():
return 0
return a
O legal do Python é como ele é fácil para quem sabe inglês. Repare que as duas principais linhas desse código ficam quase parecendo inglês mesmo, e não Python: if not a, or [if] a in dictionary w keys, return zero.
Não tive tempo de comentar o resto do código. Mas espero ter ajudado.
Abraço,
Eduardo Cuducos
http://cuducos.me/
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Facil mesmo seria o Counter:
from collections import Counter
Counter("seu texto texto escrito aqui aqui".split())
Tb sem tratamento de caracteres ;)
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
Exatamente a mesma saida que seu código atual, porém mais rápido e em menos linhas:
import stringfrom collections import Counterwith open('lorem.txt') as file:
file_contents = file.read().lower().translate(string.maketrans("",""), string.punctuation)