Quantcast
Channel: Planet Python
Viewing all articles
Browse latest Browse all 22462

PythonClub - A Brazilian collaborative blog about Python: Como encontrar soluções para seus problemas com Python

$
0
0

Como encontrar soluções para seus problemas com Python

Quando estamos aprendendo algo, o início geralmente é difícil. Conseguir absorver novos conceitos e entender como as coisas funcionam não é uma das tarefas mais simples, porém nessas horas precisamos lembrar do conceito de 'babysteps' (Um passo de cada vez), ter paciência e persistir.

A diferença entre uma pessoa experiente comparado a um iniciante é que a pessoa experiente errou muito mais vezes do que um iniciante, e com o tempo aprendeu com os erros.

E na área de programação temos inúmeros tutoriais e cursos espalhados pela internet, e geralmente as pessoas começam a aprender por conta própria. E quando acontece um problema (e isso irá acontecer inevitavelmente) e não sabemos como solucioná-lo, se torna um obstáculo chato.

Neste artigo irei mostrar algumas formas de poder encontrar soluções para seus problemas enquanto aprende a programar.

Os exemplos se aplicam a Python, mas podem ser exemplificados para qualquer outra linguagem ou tecnologia (se você trabalha com outras tecnologias como PHP ou Ruby, deixe nos comentários quais ferramentas utilizam para encontrar soluções dos seus problemas).

Dica: Veja essa palestra fantástica do Josh Kaufman sobre as primeiras 20 horas de aprendizado

Python console

Uma grande feature do Python é seu console interativo, por ele conseguimos testar nossos códigos e alguns scripts em tempo real. Vejamos um exemplo:

Python3.4.3(default,Oct142015,20:28:29)[GCC4.8.4]onlinuxType"help","copyright","credits"or"license"formoreinformation.>>>a={'Eric','Python','JavaScript'}>>>b=('Django','Flask')>>>a+bTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:unsupportedoperandtype(s)for+:'set'and'tuple'>>>tuple(a)+b('JavaScript','Eric','Python','Django','Flask')

O que aconteceu?

Na variável a criamos um set com os nomes Eric, Python e JavaScript, e depois criamos uma tupla com os nomes Django e Flask.

Ao tentarmos juntar a + b, o interpretador Python nos retorna um erro: TypeError: unsupported operand type(s) for +: 'set' and 'tuple'. Ou seja, o que ele diz é que não podemos somar um set a uma tupla.

O interpretador Python realiza as operações em tempo real, e se caso o que você deseja fazer não estiver correto, o interpretador irá informar o erro. Se o erro não for explícito para você, basta copiar e colar o erro no Google e encontrará os motivos do erro.

Para resolver esse problema, uma das soluções apresentada é transformar nosso set em uma tupla, onde fazemos a conversão em tempo de execução com o comando tuple(a) + b.

Ipython

Que tal termos um interpretador Python mais poderoso e com mais funcionalidades que o tradicional? O Ipython foi criado especificamente esse objetivo.

Vamos explorá-lo um pouco:

$ipythonPython2.7.6(default,Jun222015,17:58:13)Type"copyright","credits"or"license"formoreinformation.IPython1.2.1--AnenhancedInteractivePython.?->IntroductionandoverviewofIPython's features.%quickref->Quickreference.help->Python's own help system.object?->Detailsabout'object',use'object??'forextradetails.In[1]:nome="Eric"In[2]:nome.nome.capitalizenome.isalnumnome.lstripnome.splitlinesnome.centernome.isalphanome.partitionnome.startswithnome.countnome.isdigitnome.replacenome.stripnome.decodenome.islowernome.rfindnome.swapcasenome.encodenome.isspacenome.rindexnome.titlenome.endswithnome.istitlenome.rjustnome.translatenome.expandtabsnome.isuppernome.rpartitionnome.uppernome.findnome.joinnome.rsplitnome.zfillnome.formatnome.ljustnome.rstripnome.indexnome.lowernome.splitIn[2]:nome.startswith("O")Out[2]:FalseIn[3]:nome.startswith("E")Out[3]:TrueIn[4]:len(nome)Out[4]:4In[5]:nome.lower()Out[5]:'eric'

O que aconteceu?

Criamos uma variável nome onde é um simples String "Eric". E se digitarmos nome. e apertar TAB, o Ipython irá apresentar diversas operações que podemos fazer com essa variável.

Por exemplo, nome.startswith verifica se a primeira letra ou número começa com o parâmetro passado a ele.

Na primeira tentativa verificamos se a variável começa com a letra O, e ele me retornou False, ou seja, não é verdade.

Na segunda tentativa tentamos com a letra E, e ele me retornou True, o que é verdade já que o nome Eric começa com a letra "E".

O Ipython vai muito mais além do que isso, vá e dê uma olhada na página oficial e o que ele pode fazer.

E temos também o Ipython Notebook que é FANTÁSTICO, amplamente utilizado para computação científica.

Dreampie

Quando queremos testar algo mais elaborado, ter um console que permita criamos nossos códigos de forma mais organizada além do Interpretador padrão do Python e o IPython, podemos utilizar o Dreampie que é ideal para isso.

Vamos a outro exemplo:

Python2.7.6(default,Jun222015,17:58:13)[GCC4.8.2]onlinux2Type"copyright","credits"or"license()"formoreinformation.DreamPie1.1.1>>>colunas=[...{'pnome':'Eric','unome':'Hideki','id':4},...{'pnome':'Luciano','unome':'Ramalho','id':2},...{'pnome':'David','unome':'Beazley','id':8},...{'pnome':'Tim','unome':'Peters','id':1},...]>>>fromoperatorimportitemgetter>>>colunas_por_nome=sorted(colunas,key=itemgetter('pnome'))>>>colunas_por_id=sorted(colunas,key=itemgetter('id'))>>>frompprintimportpprint>>>pprint(colunas_por_nome)[{'id':8,'pnome':'David','unome':'Beazley'},{'id':4,'pnome':'Eric','unome':'Hideki'},{'id':2,'pnome':'Luciano','unome':'Ramalho'},{'id':1,'pnome':'Tim','unome':'Peters'}]>>>pprint(colunas_por_id)[{'id':1,'pnome':'Tim','unome':'Peters'},{'id':2,'pnome':'Luciano','unome':'Ramalho'},{'id':4,'pnome':'Eric','unome':'Hideki'},{'id':8,'pnome':'David','unome':'Beazley'}]

Preview da tela do Dreampie.

O que aconteceu?

Temos uma lista de dicionários desordenado e queremos ordenar de acordo com os parâmetros que queremos. Com isso, utilizamos duas bibliotecas que já estão por padrão com o Python: operator e pprint.

Dentro da biblioteca operator temos a funcionalidade itemgetter, onde através dos parâmetros que passamos, ele irá fazer a seleção. Já o pprint irá mostrar o resultado da nossa seleção de forma mais bonita. Vamos explicar detalhadamente o que cada coisa faz.

Criamos nossa lista de dicionários:

>>>colunas=[...{'pnome':'Eric','unome':'Hideki','id':4},...{'pnome':'Luciano','unome':'Ramalho','id':2},...{'pnome':'David','unome':'Beazley','id':8},...{'pnome':'Tim','unome':'Peters','id':1},...]

Importamos a biblioteca operator e sua funcionalidade itemgetter:

>>>fromoperatorimportitemgetter

E criamos nossa funcionalidade para ordenar a lista de dicionários de acordo com o parâmetro selecionado, que nesse caso será o primeiro nome, o pname:

>>>colunas_por_nome=sorted(colunas,key=itemgetter('pnome'))

Finalizando, utilizamos o pprint para exibir o resultado:

>>>pprint(colunas_por_nome)

Bacana, né? E também utilizamos a mesma lógica para ordenar de acordo com o id.

Se quiser saber mais a respeito do Ipython, indico o artigo do Python Help que fala a respeito.

Python Tutor

Ao observarmos uma funcionalidade queremos entender o que ele faz, e muitas vezes o que cada coisa no código faz não fica muito bem claro em nossas ideias. Por isso o Python Tutor existe! Ele exibe passo-a-passo o que está acontecendo no código.

Clique em Forward e veja o que acontece.

Outras opções

Também existem outras ferramentas que podem auxiliar e melhorar seu código:

Locais onde podemos postar nossas dúvidas

Vale sempre lembrar que é muito importante consultar a documentação oficial do Python, seja a versão 2 ou a versão 3.

Também existem outro lugar muito legal, o Stackoverflow. Se ainda o problema persistir, acesse as listas de discussões da comunidade Python no Brasil.

Deixe nos comentários seu feedback, e se tiver outra dica que não foi citado, não deixe de indicar.


Viewing all articles
Browse latest Browse all 22462

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>