Use o pep8 para cuidar do estilo do seu código Python

Estilo é tudo, há quem diga… e não vale apenas para roupas.
Quando o assunto é programação, não vale somente “resolver um problema”. Você tem que resolver com estilo.
Em outras palavras, o código tem que fazer mais do que realizar uma determinada tarefa. Ele tem que ser enxuto e legível para outros programadores (e, mesmo, você) lerem e entenderem o que cada linha ou bloco de código faz.
O aplicativo pep8 leva o nome do guia de estilos PEP 8 do Python.
Pode ser usado para verificar se seus scripts estão dentro dos parâmetros da convenção de estilização do código Python.
Se não estiver instalado, use o pip para fazer a instalação dele:


pip3 install pep8

Depois de instalado, já é possível executá-lo em relação a qualquer um de seus scripts:
Veja a saída dele:


pep8 example-serialgrades.py 

example-serialgrades.py:4:11: E201 whitespace after '('
example-serialgrades.py:4:51: E202 whitespace before ')'
example-serialgrades.py:7:14: E225 missing whitespace around operator
example-serialgrades.py:7:28: E201 whitespace after '('
example-serialgrades.py:7:35: E202 whitespace before ')'
example-serialgrades.py:10:32: E201 whitespace after '('
example-serialgrades.py:10:46: E202 whitespace before ')'

No caso acima, não há erros que impeçam a execução do script. O pep8 sequer tem a função de debugar código Python.
Veja o que é informado na primeira linha da saída do comando:

  • example-serialgrades.py — o nome do arquivo analisado.
  • 4:11 — a linha (4) e a coluna (11) onde foi encontrada uma inconsistência.
  • E201 whitespace after '(' — o código da inconsistência e uma breve explicação que – neste caso – corresponde a um espaço vazio após o uso do parêntese.

Mesmo não tendo fluência em inglês, é possível entender “mais ou menos” o que está havendo, linha a linha.
neste Neste caso, volte ao arquivo e edite-o de acordo com os parâmetros pedidos pelo PEP 8.
Quando o seu código estiver bom, o pep8 não irá retornar qualquer aviso.
pep8 python
Se você não tem grandes dificuldades com a língua inglesa, pode experimentar (no Linux) a seguinte linha de comando:


pep8 --show-source --show-pep8 editor.py | less

Com as opções ‘–show-source’ e ‘–show-pep8’, serão exibidas as linhas de código com “problemas”, junto com uma explicação didática para ajudar a melhorar suas práticas de programação.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 47 outros assinantes

Como ler um arquivo com a função open() do Python

Para abrir e ler o conteúdo de um arquivo, na pasta local do sistema, com o Python, use a função open().
O funcionamento dela é simples: basta informar o arquivo a ser aberto e dar uma variável para receber o seu conteúdo. Veja um exemplo:


arquivo = open('while.py')
linha = arquivo.read()
print(linha)
arquivo.close()

Embora o exemplo, acima, seja bastante didático — é também muito ruim.
A boa prática de programação em Python, sugere usar with open, que permite obter o mesmo resultado, com menos linhas de código.
Veja um exemplo:


with open('meutexto.txt') as arquivo:
for linha in arquivo:
print(linha)

A declaração with é melhor por que garante que o arquivo seja fechado, logo após o uso, mesmo que uma exceção surja dentro do bloco de código.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 47 outros assinantes

Ovo de páscoa no Python

Eu testei o procedimento, descrito neste artigo no Python 2.7 e Python 3.5 — em uma instalação Linux Debian.
Não há razão para não funcionar em outras versões. Você não perde nada testando, contudo.

São chamados “ovos de páscoa” ou easter eggs recursos escondidos em programas. Comumente são engraçados ou exibem informações extra sobre o software.

É necessário rodar o Python a partir da sua shell, para poder ver ovo de páscoa de que estamos falando aqui.
python easter egg import gravity
Dentro da shell, digite:


import antigravity

Ao dar Enter o sistema vai abrir o navegador padrão na página https://xkcd.com/353/, que contém uma charge alusiva ao comando dado.
python easter egg import antigravity
Você precisa ter uma conexão à Internet, claro, para conseguir acessar o site.
Para quem não tem familiaridade com o inglês, segue uma tradução livre do texto da charge:

— Você está voando! Como?
— Python! Aprendi ontem à noite. É tudo tão simples!
O hello world é apenas print "Hello, world!"
— Sei lá... dynamic typing? Whitespace?
— Junte-se a nós! Programar ficou divertido novamente!
Há um mundo totalmente novo, aqui em cima!
— Mas como você pode estar voando?
— Apenas digitei import antigravity
— Só isso?
— ... eu também experimentei tudo o que havia dentro do armário de remédios, para comparação. Mas creio que seja o efeito do Python.

Sinta-se à vontade para sugerir outras formas de tradução, nos comentários. 😉

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 47 outros assinantes

Domine os loops for no Python

Tal como o while, o laço for é uma declaração da linguagem Python (e de inúmeras outras) voltada para a iteração, que permite a um bloco de código ser repetido por um número determinado de vezes.
Presente em quase todas as linguagens de programação, se apresenta de formas variadas — diferindo na sintaxe e na semântica entre uma linguagem e outra, claro.
No Python, os laços for são poderosos e muito versáteis — podendo ser usados quase sempre que se precisar de um loop.
As diferenças entre while e for são discutidas neste artigo. Recomendo a leitura.

Sintaxe do loop for

O laço for “caminha” entre itens de listas, tuplas, strings, chaves de dicionários, entre muitos outros objetos iteráveis.
O laço sempre começa com a palavra ‘for’ seguida de um nome arbitrário de variável, que irá armazenar os valores da sequência de objetos que segue.
Basicamente, a sintaxe é assim:


for <variável> in <sequência>:
	<declaração>

Dentro deste loop, é possível acrescentar outros for aninhados, declarações while, if, else etc.
Abra uma shell Python. Vamos entender melhor o conceito, através de exemplos práticos.
Abaixo, temos uma lista de linguagens de programação — que serão exibidas, uma de cada vez, dentro do laço.


>>> linguagens = ["C", "C++", "Perl", "Python", "Java"] 
>>> for i in linguagens:
...     print(i)
... 

C
C++
Perl
Python
Java
>>> 

Agora, experimente incluir um if e um else neste bloco de código:


>>> for i in linguagens:
...     if i == "Python":
...             print(" ... a próxima da lista, é a que gosto mais: ")
...     else:
...             print(" Uma ótima opção para escrever seus programas: ")
...     print(i)
... 
 Uma ótima opção para escrever seus programas: 
C
 Uma ótima opção para escrever seus programas: 
c++
 Uma ótima opção para escrever seus programas: 
Perl
 ... a próxima da lista, é a que gosto mais: 
Python
 Uma ótima opção para escrever seus programas:
Java

O texto Como usar loops while e for no Python aborda este assunto de maneira mais básica.
Veja um exemplo de uso da declaração break — cuja função é interromper aquela parte do laço:


cidades=["Campos do Jordão", "Urupema", "Uruguaiana", "São José dos Ausentes", "Cruz Alta", "Monte Verde", "Nova Friburgo"]
for lugar in cidades:
    if lugar == "Cruz Alta":
            print("Chega de frio, por favor!")
            break
    print("Que friozinho gostoso!")

else:
    print("Estou feliz de não precisar passar mais frio...")

print("Hora de arrumar as malas.")

Use a função range() em conjunto com o for, no Python

A função range() cria uma lista de números, sob determinadas condições.
Pode ser uma forma bem simples de especificar a quantidade de ciclos de um laço for.
A função aceita até 3 opções — mas é comumente usada com apenas uma. Veja um exemplo básico:


>>> for b in range(5):
...     print(b)
... 
0
1
2
3
4
>>> 

Acima, a função range() cria uma lista de 5 números (0 a 4), que são “imprimidos” um a um.
Fica fácil fazer um bloco de código se repetir pelo número exato de vezes que você deseja, combinando o for com esta função.
Pelo menos é mais fácil do que este aqui:


>>> for i in '01234':
...     print(i)
... 
0
1
2
3
4
>>>

Declarações for aninhadas no Python

Segue um programinha que calcula números pitagóricos abaixo de um número máximo (que você determina, através da função input()).
Note que o módulo de matemática math do Python é carregado logo no início, para permitir que possamos calcular a raiz quadrada de alguns números.


# importando a biblioteca sqrt do módulo math
from math import sqrt

# obtendo o número máximo
n = int(input("Valor num. máximo: "))
for a in range(1, n+1):
        for b in range(a,n):
                c_square = a**2 + b**2
                c = int(sqrt(c_square))
                if((c_square - c**2) == 0):
                        print(a, b, c)

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 47 outros assinantes

Com 2 while e alguns if, eu criei um editor de textos no Python

Você pode criar rapidamente um pequeno programa em Python que recebe e grava conteúdo em texto no disco.
O objetivo do programa é demonstrar o funcionamento de um loop while, com o uso de if, break e algumas funções de manipulação de arquivos.
Basicamente, o código “que faz as coisas” fica rodando indefinidamente dentro de um laço.
Fique à vontade para sugerir mudanças no código, bem como fazer uso dele da maneira que achar melhor.
Infelizmente, esta versão não permite recuperar e editar o texto gravado.
Tudo o que espero é que ele possa servir como exemplo de uso de laços while — que foram amplamente discutidos neste texto.


#!/usr/bin/python3
# meu primeiro editorzinho de textos

# variável que vai receber todo o conteúdo digitado
texto=""
# variável de nome do arquivo que vai receber o conteúdo
nomearquivo=""
# variável que indica a ação sobre o nomearquivo
gravarsn=""
print("Editor de textos simples do PythonBay.com - meueditor.py")
nomearquivo = input("Nome do arquivo: ")
print("(:q) sair do editor")
print("--------------")
texto=""
gravarsn=""
while True:
	linha = input(" > ")
	if linha == ":q":
        	break
	texto = texto + linha+"\n"

# ao sair do primeiro loop while, exibe
# o que foi digitado pelo usuário.

print("até agora, você escreveu estas coisas lindas comigo:")
print("--------------\n")
print(texto)
print("\n--------------")
print("Obrigado por me usar!")
while True:
	gravarsn=input("(w) substituir arquivo atual || (a) adicionar texto ao arquivo atual\n (q) sair sem gravar\n : ")
	if gravarsn == "q":
		print("Saindo sem gravar.")
		break
	if gravarsn == "w":
		# abre o arquivo e o sobrescreve com o novo conteúdo.
		f = open(nomearquivo,"w")
		f.write(texto)
		f.close()
		print("O texto anterior foi substituído pelo novo.")
		break
	if gravarsn == "a":
		# abre o arquivo e adiciona o conteúdo novo ao final.
                f = open(nomearquivo,"a")
                f.write(texto)
                f.close()
                print("O texto atual foi acrescentado ao arquivo anterior.")
                break

como é possível ver, na primeira linha do programa, ele foi feito para rodar pelo Python 3.


python3 meueditor.py

Se você usa o Linux, pode dar ao script permissão de execução e rodar ele em seguida. Veja como:


chmod +x meueditor.py
./meueditor


Fácil, não é?!
Se boa parte das tarefas secundárias executadas for direcionada a funções, ainda seria possível enxugar mais este código e ainda adicionar funcionalidades… mas isso fica para outro post.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 47 outros assinantes