Script Python faz chover no seu terminal

A tarefa deste pequeno script Python é simular chuva no seu terminal.
O meu exemplo foi rodado com o Python 2, em uma máquina Debian Linux. Sinta-se à vontade para experimentar em outras plataformas contudo.

O script, abaixo, joga 100 gotas aleatórias de ‘chuva’ no seu terminal e é um ótimo exemplo do uso da função random no Python.

Se você não tiver um compilador ou interpretador Python disponível, no momento, experimente um destes compiladores/interpretadores online.

Veja o que mais o script faz:

  • usa o caractere “/” para representar as gotas de chuva. Mas você pode escolher qualquer outro.
    Se você trocar o caractere “/” para ” ‘ “, vai parecer que está caindo neve no seu terminal.
  • ao final da chuva, uma mensagem é exibida centralizada na tela.
  • roda em qualquer tamanho de terminal.
  • o código contém docstrings para descrever os parâmetros da função principal.

Segue o código:


import curses
import random
import time

myscreen = curses.initscr()
curses.curs_set(0) # suprime exibição do cursor
HEIGHT, WIDTH = myscreen.getmaxyx() 
RAIN = '/' # altere aqui a aparência da gota de chuva
TIME = 10 

def make_it_rain(window, tot_time, msg, wait_time, num_drops):
    """
    window    :: curses window 
    time      :: Tempo total da chuva
    msg       :: Mensagem exibida ao final da chuva
    wait_time :: Tempo entre cada tela
    num_drops :: Numero de gotas de chuva em cada cena
    """
    for _ in range(tot_time):
        for i in range(num_drops):
            x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)       
            window.addstr(x,y,RAIN)
        window.refresh()
        time.sleep(wait_time)
        window.erase()

    window.refresh()
    window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)


if __name__ == '__main__':
    make_it_rain(myscreen, TIME, "A CHUVA ACABOU!", 0.1, 60)
    myscreen.getch()
    curses.endwin()

Eu gravei o meu script com o nome de chuva.py
Execute o código com o Python 2:

python2 chuva.py

Referências

http://codegolf.stackexchange.com/questions/107545/its-raining-in-terminal.
https://elias.praciano.com/2017/01/faca-chover-no-seu-terminal-com-este-script-python/.

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 48 outros assinantes

Tipos de dados no Python

Variáveis podem ter diversos tipos de valores, para você trabalhar em uma linguaguem.
É justamente dos tipos possíveis destes valores, dentro da linguagem Python, que iremos falar (muito rapidamente) neste post.
Cada valor é um tipo de dado, ou datatype.
Ao contrário de outras linguagens de programação, aqui não há necessidade de declarar exatamente que tipo de dado é uma variável, antes de usá-la.
O Python vai saber como tratar sua variável, internamente, de acordo com o datatype dela.
Os tipos de dados nativos mais importantes, são:

  • Booleans ou booleanos — cujos valores possíveis são True ou False (Verdadeiro ou Falso, respectivamente).
  • Números — que podem ser inteiros (1, 2, 4 etc), ponto flutuante ou float (1.1, 3.14159 etc), fracionários (3/4, 2/6 etc) ou, mesmo, complexo
    Numbers can be integers ( 1 and 2 ), floats ( 1.1 and 1.2 ), fractions ( 1/2 and 2/3 ), or even complexos.
  • Strings ou cadeias de caracteres — são sequencias de caracteres Unicode (“isto é uma string”).
  • Bytes e byte arrays.
  • Listas — são sequencias ordenadas de valores.
  • Tuples ou tuplas — também são sequencias ordenadas de valores, com a diferença de que são imutáveis.
  • Sets são conjuntos não ordenados de valores.
  • Dictionaries ou dicionários — são conjuntos não ordenados de pares de valores-chave (key-value pairs).

Claro que há muito mais tipos do que estes. Convém lembrar que tudo é objeto no Python, de forma que há tipos de dados que correspondem a módulos, funções, classes, métodos, arquivos e (inclusive!) código compilado.

Referências

https://docs.python.org/3/reference/datamodel.html#objects-values-and-types.
http://excript.com/python/tipos-de-dados-python.html.

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 48 outros assinantes

Indentação do código no Python

A indentação é muito importante para o desenvolvedor Python.
Ela exerce um papel que vai além do visual e de facilitar a leitura do código.
Ocorre que alguns elementos, como as funções do Python, não têm “delimitadores” que indicam explicitamente seu começo e fim.
O código de uma função, por exemplo, não fica envolto em chaves {}, como você já deve ter observado em outras linguagens.
O único delimitador são os ‘ : ‘ (dois pontos), além da própria indentação.
No exemplo, que segue, definimos a função fib()
Note que os “>>>” indicam que código foi digitado e executado dentro de uma shell Python.

>>> def fib(n):
>>>     a, b = 0, 1
>>>
>>>     while a < n:
>>>         print(a, end=' ')
>>>         a, b = b, a+b
>>>     print()
>>>
>>> fib(1000)

Baseado no exemplo acima:

  1. blocos de código são definidos pela sua indentação.
    Quando falamos em “blocos de código”, nos referimos às funções, declarações if, laços (ou loops) while, for etc.
    No exemplo acima, temos um laço while, claramente definido pela indentação. Observe.
    Isto significa que espaços em branco não devem ser digitados à toa, por que serão levados em consideração pelo interpretador/compilador. Eles precisam ser consistentes.
    Ao final, a primeira linha fora da indentação, já não faz parte da função, portanto.
  2. As declarações while também são seguidas de um bloco de código. Enquanto expressão definida na linha do while for verdadeira, o bloco indentado será executado. Caso contrário, o interpretador sai do bloco.
  3. Você pode usar linhas em branco dentro do seu código de blocos. Elas não serão consideradas pelo interpretador e não servem para finalizar uma função, por exemplo.
    Portanto, se uma linha em branco puder acrescentar legibilidade do seu código, sinta-se à vontade para usar.
    Apenas preste atenção na indentação e siga escrevendo o seu código.

O Python usa quebras de parágrafos (carriage returns) para separar declarações, além de ‘ : ‘ (dois pontos) e indentação para diferenciar blocos de código.

Este requisito do Python, ajuda a criar uniformidade visual no código escrito, mesmo que por programadores diferentes.

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 48 outros assinantes

O que são objetos no Python?

A resposta curta para esta pergunta é: tudo.
De fato, tudo é objeto para o Python, uma linguagem de programação concebida dentro da “filosofia” da orientação a objetos.
Tudo pode ter atributos e métodos.
Todas as funções têm um atributo __doc__ embutido — que retorna a docstring definida dentro do código fonte da função.
O módulo sys é um objeto que, entre outras coisas, tem um atributo chamado path (caminho).
Claro que, diferentes linguagens de programação podem dar significados (levemente) diferentes para o termo “objeto”.
Para algumas linguagens, todos os objetos precisam ter atributos e métodos. Para outras, o conceito implica em que todos os seus objetos são subclasses.
Já no Python, a definição é mais flexível — alguns objetos não possuem atributos ou métodos, mas podem tê-los.
Também, nem todos os objetos podem ser subclasses.

No sentido de que os conceitos podem ser aplicados a uma variável ou passado como argumento a uma função, no Python tudo é objeto.

As funções são objetos de primeira classe, bem como os módulos.
Você pode passar uma função como argumento para outra função, por exemplo.
As classes também são objetos de primeira classe, o que se estende às suas instâncias.
Para não restar dúvidas, strings também são objetos, bem como as listas etc.
Tudo é objeto no Python.

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 48 outros assinantes

Use as docstrings para documentar seu código Python

Se você está lendo isso, provavelmente sabe o quanto é importante documentar seu trabalho, desde o início.
Depois de escrito, o código ainda vai ser lido inúmeras vezes.
Programadores experientes conhecem bem a situação de revisitar código escrito meses atrás e — se não estiver bem documentado — ficar coçando a cabeça para entender “o que diabos esta porcaria faz?”
O Python facilita escrever código legível e você só precisa se aproveitar disso.
Um destes recursos são as documentation strings ou texto de documentação — ou docstrings.

Quando posicionada adequadamente, dentro de uma função, a docstring pode informar o que a função faz e como usar corretamente seus parâmetros.
Em editores e IDEs avançadas, o texto da docstring passará a ser exibido a cada vez que a função for invocada dentro do código — como uma ajuda sensível ao contexto.
python docstrings in komodo editor
Na figura, acima, é possível ver o exemplo dentro do Komodo Editor.
Use 3 aspas simples para iniciar uma docstring e, novamente, para finalizar.
Veja um exemplo:

def minha_funcao(parametro=True):
    ''' texto de documentação específico da função minha_funcao
    que leva um único parâmetro, que é verdadeiro por padrão
    '''
    
minha_funcao()

As aspas triplas podem ser usadas aonde você quiser. Serão mais comumente encontradas em docstrings.
Mas você pode usá-las apenas para inserir comentários em múltiplas linhas, em qualquer ponto do seu codigo.

As aspas simples triplas informam ao interpretador Python que se trata de uma string em múltiplas linhas.
Tudo o que você quiser escrever cabe dentro deste espaço — o que inclui, além do texto, as quebras de linha, os espaços em branco ou outras aspas.
Se você for usar docstrings para documentar uma função, tenha em mente que elas devem ser iniciadas logo abaixo da função, como no exemplo dado, logo acima.

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 48 outros assinantes