Fugindo para as Colinas Com Python

Me
Eu faço perguntas em reuniões que eu não sei nada e reunião explode; não é de propósito
Eu falo rárpido

O Problema

  • "Hello world" não é muito didático
  • Escrever "Fujam para as colinas"
  • ... com randomização de alguns elementos.
  • Ex: "Cujam para as folinas", "Lujam para as cofinas" e "Nujam para as folicas"

Solução

"""Randomize a "Run to the hills" phrase."""

from __future__ import print_function

import random
from argparse import ArgumentParser


CONSONANTS = ['f', 'j', 'c', 'l', 'n']
PASSPHRASE = '{}u{}am para as {}o{}i{}as'


def print_phrase(consonants):
    """Print the phrase with the randomized consonants."""
    print(PASSPHRASE.format(*consonants).capitalize())


def totally_random():
    """Run a totally random way."""
    random.shuffle(CONSONANTS)
    print_phrase(CONSONANTS)


def switch_two():
    """Run by changing two steps at a time."""
    first = random.randint(0, 1)
    second = random.randint(2, 4)

    CONSONANTS[second], CONSONANTS[first] = \
        CONSONANTS[first], CONSONANTS[second]
    print_phrase(CONSONANTS)


if __name__ == "__main__":
    args = ArgumentParser()
    args.add_argument('-t', '--totally',
                      dest='totally',
                      default=False,
                      action='store_true',
                      help='Like, toootaly random')
    args.add_argument('-s', '--short',
                      dest='short',
                      default=False,
                      action='store_true',
                      help='Not so random')
    result = args.parse_args()

    if result.totally:
        totally_random()
    elif result.short:
        switch_two()
    else:
        print('Dude, option!')

Docstrings


"""Randomize a "Run to the hills" phrase."""    
                        

Módulos e imports


import random
from argparse import ArgumentParser
                        

Módulos e imports

Visão de módulos

Módulos e imports

import

Módulos e imports

from X import Y

Variáveis e tipos


CONSONANTS = ['f', 'j', 'c', 'l', 'n']
PASSPHRASE = '{}u{}am para as {}o{}i{}as'
                        

Funções


def print_phrase(consonants):
    """Print the phrase with the randomized consonants."""
                        

Funções


def print_phrase(consonants, something_else):
                        

Funcões


def soma(primeiro, segundo):
    total = primeiro + segundo
    return total
                        

Funções


soma(1, 2)
                        

Funções


soma(primeiro=2, segundo=3)
                        

Funções


soma(segundo=3, primeiro=2)
                        

Funções


def soma(primeiro=0, segundo=0):
                        

soma()
soma(1)
soma(segundo=3)
                        

Pausa: Varargs


def soma(primeiro, segundo):
    total = primeiro + segundo
    return total
                        

soma(1)
                        

soma(1, 2, 3)
                        

Pausa: Varargs


TypeError: soma() takes exactly 2 arguments (3 given)
                        

Pausa: Varargs


def soma(*valores):
                        

Pausa: Varargs


def soma(*valores):
    print(valores)
                        

soma(1, 2, 3, 4, 5)
                        

[1, 2, 3, 4, 5]
                        

Pausa: Varargs


def soma(inicial, segundo=0, *valores):
    print(inicial)
    print(segundo)
    print(valores)

                        

soma(2)
                        

2
0
[]
                        

Pausa: Varargs

E o que acontece com parâmetros com nomes?

Pausa: Varargs


def soma(**valores):
    print(valores)
                        

soma(primeiro=1, segundo=2)
                        

{'primeiro': 1, 'segundo': 2}
                        

Pausa: Varargs

O legal de varargs (e o asterísco) é que ele funciona pros dois lados: Não só ele transforma parâmetros em lista, mas ele também pode funcionar para converter uma lista em parâmetros.

Pausa: Varargs


params = [4, 4]
soma(*params)
                        

Pausa: Objetos

Sem entrar em detalhes sobre como criar objetos:

  • Objetos tem métodos (funções associadas a um objeto)
  • Para chamar um método, usa-se '.' e o nome do método
  • Strings são objetos

Pausa: Objetos


"isso é uma string"
                        

Pausa: Objetos


help("isso é uma string")
                        

Pausa: Objetos


"isso é uma string".capitalize()
                        

frase = "isso é uma string"
frase.capitalize()
                        

Welcome to Hell


    print(PASSPHRASE.format(*consonants).capitalize())
                        

Welcome to Hell

O que sabemos:

  • PASSPHRASE é uma string.
  • .format deve ser um método de strings.
  • consonants é uma lista
  • *consonants tá transformando a lista em parâmetros
  • capitalize também deve ser um método de strings