Aventurando-se com Python

Terceira Aula

Estruturas de Repetição:

while

Loops

Muitas vezes precisamos executar um trecho de código várias vezes. Isso se chama loop (repetição). Cada repetição é chamada de iteração. No Python temos o while e for, para isso.

'''
O while recebe uma expressão booleana e avalia o valor dessa expressão. 
Se a expressão retorna True, ele executa os comandos que estão dentro 
do while. Ao término da execução desse comandos, ou seja, ao término 
da iteração, a expressão é novamente avaliada e se continua retornando 
True, os comandos são executados novamente. Quando a expressão começar 
a retornar False, o while não será mais executado.
'''
x = 1
tabuada = int(input("Digite um número para calcularmos a sua tabuada: "))

while x < 11:
    valor = tabuada * x
    print(str(tabuada) + ' x ' + str(x) + ' = ' + str(valor))
    x += 1

Break

'''
Podemos precisar parar o loop, caso algo aconteça durante a iteração.
Podemos usar o break, que interrompe o fluxo atual da iteração 
e sai do while.
'''

while True:
    numero = input("Digite um inteiro para calcularmos o seu quadrado " + 
        "[digite q para saí]: ")
    if numero == 'q':
        break
    quadrado = int(numero) * int(numero)
    print("O quadrado de " + numero + " é: " + str(quadrado))

Continue

'''
Parecido com o break, mas ele somente para a iteração atual e retorna 
para o while verificar a expressão e executar a próxima iteração
'''

while True:
    numero = input("Digite um inteiro para calcularmos o seu quadrado " + 
        "[digite q para saí]: ")
    if numero == 'q':
        break

    if int(numero) % 2 == 0: # Número par? Só calcularei o quadrado de ímpares
        continue

    quadrado = int(numero) * int(numero)
    print("O quadrado de " + numero + " é: " + str(quadrado))

Se lembra do Else?

'''
Caso, um while termine sem o uso de um break, 
podemos usar o else pra executar um código alternativo
No exemplo, verificamos se em uma lista, existe um número par.
'''
numeros = [1, 3, 7, 19]
posicao = 0

while posicao < len(numeros):
    numero = numeros[posicao]
    if int(numero) % 2 == 0: # Número par?
        print("Encontramos um número par!")
        break
    posicao += 1
else:
    print("Não há números pares na lista")

Estruturas de Repetição:

for

For

'''
O while é legal. Mas muitas vezes, queremos acessar itens de uma coleção.
Podemos fazer isso com o while. Ficaria algo assim:
'''

planetas = ['Marte', 'Terra', 'Júpiter', 'Vênus']
posicao = 0

while posicao < len(planetas):
    print(planetas[posicao])
    posicao += 1

'''
Precisei criar uma variável auxiliar, descobrir o lenght da lista,
incrementar o valor da variável auxiliar e verificar se ele não ultrapassou
o length da lista. Usando o for, fica melhor.
''' 

for planeta in planetas:
    print(planeta)

Iterables

'''
Listas são iterables. Iterables são estruturas que permitem que percorra 
ela toda de elemento a elemento, um por um. String, Sets, Tuplas e 
Dicionários são iterables. 
O for é feito justamente para usar com iterables. Então, posso fazer isso.
'''

palavra = "Uma palavra"

for letra in palavra:
    print(letra)

# U
# m
# a
# 
# p
# a
# l
# a
# v
# r
# a

Break, Continue e Else

'''
O significado do break, continue e else são os mesmo quando usados no 
while
'''

compras = []

for produto in compras:
    print('A compra foi feita')
    break
else:
    print('Parece que alguém esqueceu de fazer as compras de novo!')

Iterando sobre múltiplos Iterables

'''
Você acredita que eu posso iterar sobre mais de uma lista ao mesmo tempo?
Eu posso a função zip() para isso.
'''
dias = ["Domingo", "Segunda", "Terça", "Quarta"]
programas = ["Faustão", "CQC", "Jó"]
horarios = ["22:00", "00:00", "02:00"]

for dia, programa, horario in zip(dias, programas, horarios):
    print("No(a) " + dia + " eu sempre assisto ao " + 
        programa + " e vou dormir às " + horario)

# No(a) Domingo eu sempre assisto ao Faustão e vou dormir às 22:00
# No(a) Segunda eu sempre assisto ao CQC e vou dormir às 00:00
# No(a) Terça eu sempre assisto ao Jó e vou dormir às 02:00

'''
O zip para de retornar itens quando acaba a menor coleção. 
Veja que ainda tinha a quarta na lista de dias.
'''

Range

Range

'''
Se lembram dos Iterables? Lista, Strings e etc...
Pois bem, eu posso precisar criar Iterables, em uma determinada sequência numérica.
Para isso, posso usar a função range(inicio, fim, pulo). Ela me retorna um Iterable.
Então posso usá-los no nosso for.
'''
# Me retorna uma sequencia de 0 a 9.
for numero in range(0, 10): 
    print numero

# O único parâmetro obrigatório é o fim.
for numero in range(10): # O inicio por padrão é 0
    print numero

# O passo por padrão é 1. Eu posso alterar assim
for numero in range(0, 10, 2): # Nesse caso, precisa declarara o inicio também
    print numero

# Fazendo em ordem decrescente
for numero in range(10, -1, -1): # Nesse caso, precisa declarara o passo -1 também
    print numero

Comprehensions

Comprehensions

'''
O Comprehension é a maneira pythonica de criar estruturas de dados a 
partir de Iterables. Uma Estrutura de Dados é um conjunto de dados: 
Listas, Tuplas. Eu posso criar essas estruturas sem o Comprehension. 
Mas a sintaxe dos Comprehensions é bem mais enxuta e elegante. 
Criando uma lista de números ao quadrado sem o comprehension:
'''

numeros = [2, 3, 4]

# 1°
numeros_quadrados = []
numeros_quadrados.append(numeros[0] ** 2)
numeros_quadrados.append(numeros[1] ** 2)
numeros_quadrados.append(numeros[2] ** 2)

# 2°
numeros_quadrados = []
posicao = 0
while posicao < len(numeros):
    numeros_quadrados.append(numeros[i] ** 2)
    posicao += 1

# 3°
numeros_quadrados = []
for i in numeros:
    numeros_quadrados.append(i ** 2)

# Com Comprehension
numeros_quadrados = [numero ** 2 for numero in numeros]

Usando condicionais

'''
Para criar a minha nova estrutura, eu posso restringir os itens da antiga 
estrutura a determinadas condições usando os condicionais do Python. 
Se aprovados às condições, o itens farão parte da nova estrutura.
Por exemplo, para fazer uma lista com todos os números ímpares
de outra lita.
'''
lista_original = [2, 1, 42, 5, 63, 73, 9, 34]

# Sem comprehensions
numeros_impares = []
for i in lista_original:
    if i % 2:
	numeros_impares.append(i)

# Com Comprehensions
numeros_impares = [numero for numero in lista_original if numero % 2]

Tuplas

Tuplas

'''
Uma tupla é uma lista imutável. Ela não pode ser modificada após 
ser criada.
'''

# Criando
fisicos = ('Newton', 'Kepler', 'Galileu', 'Einstein')

# Acessando
fisicos[1] # Kepler
fisicos[-1] # Einstein
fisicos[1:3] # Kepler, Einstein

# Tamanho
len(fisicos)

# Tuplas são imutáveis. Elas não podem ser alteradas.
# Tuplas não tem append(), extend(), insert(), remove(), and pop().

# Dica:
(a, b, c) = "ABC" # Uma tupla de variáveis.

a # A
b # B
c # C

# Multi-atribuição
(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)

Sets

Sets

'''
Sets são conjuntos não ordenados. Lembram-se de conjuntos matemáticos?
Em conjuntos, não podem existir elementos repetidos.
'''

# Criando...
planetas = {'Marte', 'Terra', 'Júpiter', 'Vênus'}
outros_planetas = set(['Saturno', 'Mercúrio'])
set_vazio = set()


# Adicionando...
planetas.add('Python') # A posição de inserção é aleatória
planetas.add('Terra') # Terra já existe, então nada acontece
planetas.update({1, 2, 5}) # update() recebe um iterable.
planetas.update([1, 2, 3], ('Meu Deus', 2, 4)) # Pode receber quantos quiser

# Removendo...
planetas.discard('Terra') # Remove Terra
planetas.discard('Terra') # Terra não está mais, nada acontece
planetas.remove('Marte') # Remove Marte
planetas.remove('Marte') # Marte não está mais, lança erro.
planetas.pop() # Remove um elemento qualquer, um aleatório
planetas.clear() # Remove tudo

# Procurando...
'Terra' in planetas # False

Sets são conjuntos, então...

'''
Nós podemos aplicar operações comuns da teoria dos conjuntos 
numéricos aos sets do Python.
'''

# Criando...
planetas = {'Marte', 'Terra', 'Júpiter', 'Vênus', 'Saturno', 'Urano'}
outros_planetas = {'Saturno', 'Mercúrio', 'Python', 'Terra', 'Netuno', 'Vênus'}

# Soma de Conjuntos
planetas.union(outros_planetas)

# Diferença de Conjuntos
planetas.difference(outros_planetas)

# Interseção de Conjuntos
planetas.intersection(outros_planetas)

# Diferença Simétrica de Conjuntos
planetas.symmetric_difference(outros_planetas)

Dicionários

Dicionários

'''
Sets são conjuntos não ordenados de pares chave/valor. 
Um par chave/valor é quando uma chave representa a maneira de identificar 
um valor. Eu posso acessar qualquer valor, apenas informando a sua chave.
'''
# Criando...
domingo = {'programa': 'Faustão', 'horario': '22:00'}
segunda = {'programa': 'Jô', 'horario': '02:00'}

# Acessando...
domingo['programa'] # Faustão

# Adicionando...
domingo['esporte'] = 'Futebol'

# Alterando...
domingo['programa'] = 'Gugu'

# Excluindo...
del domingo['programa']

# Tamanho...
len(domingo) # 2

# Chaves podem ser inteiros
segunda[23] = 'Qualquer coisa'

# Valores podem ser qualquer coisa praticamente
rotina = {
    'domingo': {'programa': 'Faustão', 'horario': '22:00', 'esporte': 0},
    'segunda': {'programa': 'Jô', 'horario': '02:00', 'tarefas': ('Dormir', 'Descansar', 'Cochilar', 'Dormir')}
}

Curso de Python - 3° Aula (PyLadies Fortaleza)

By Wilmerson da Silva

Curso de Python - 3° Aula (PyLadies Fortaleza)

  • 802