sequência = [1, 3, 5, 7, 9]
quadrados = []
for número in sequência:
    # print(id(quadrados)) # curiosidade
    quadrados.append(número**2)

# print('------')
    
outro_exemplo = "Hugo Nobrega"
vogais_encontradas = ""
for letra in outro_exemplo:
    # print(id(vogais_encontradas)) # curiosidade
    if letra in 'aeiouAEIOU':
        # vogais_encontradas =  vogais_encontradas + letra
        vogais_encontradas += letra

# Exemplo: fazer uma função que recebe uma lista de inteiros
# e retorna uma nova lista, com os elementos múltiplos de 3

def múltiplos(lista_de_números, divisor):
    """
    Recebe uma lista de inteiros e um inteiro
    e retorna uma nova lista, com os elementos da lista dada
    que são múltiplos daquele inteiro
    """
    lista_de_múltiplos = []
    for número in lista_de_números:
        if número % divisor == 0:
            lista_de_múltiplos.append(número)
    return lista_de_múltiplos

# Exemplo

from datetime import datetime

def exemplo_minuto(minuto_desejado):
    """
    Printa "." na tela até que os minutos do horário atual sejam minuto_desejado
    """
    # enquanto o minuto de agora não for minuto_desejado, imprime ponto
    while datetime.now().minute != minuto_desejado:
        print('.', end=' ')
    print('acabou!')

# Revisitando aula 07

from random import randrange

def contador_de_resultados_dado_6_for(quantidade_repetições=10**6):
    """Sorteia um número inteiro aleatório de 1 a 6 (inclusive)
    quantidade_repetições (inteiro) vezes e conta quantas vezes
    cada um foi sorteado, retornando em um dicionário"""

    contagens = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}

    for _ in range(quantidade_repetições):
        sorteio = randrange(1, 6 + 1)
        contagens[sorteio] += 1

    return contagens

def fibo_for(n):
    """
    Retorna o n-ésimo número de Fibonacci (n inteiro, assumindo n > 2)
    """
    penúltimo = 0
    último    = 1
    for _ in range(2, n+1):
        atual = penúltimo + último
        penúltimo, último = último, atual
    return atual

# Exemplo ambicioso: fazer uma ou mais funções para receber uma lista de elementos do tipo
# (nome, nota_p1, nota_p2, nota_p3) e retornar a lista dos alunos aprovados de acordo
# com o nosso cálculo de média (maior nota peso 3, segunda maior peso 2, menor peso 1)
# média para aprovação >= 5

from math import ceil

def média(notas):
    """
    Recebe uma sequência de 3 notas (floats) e calcula a média pela nossa fórmula
    """
    em_ordem_crescente = sorted(notas)
    pré_nota = (1*em_ordem_crescente[0] + 2*em_ordem_crescente[1] + 3*em_ordem_crescente[2])/6
    return (ceil(10*pré_nota))/10
    
def aprovados(alunos_e_notas):
    """
    Recebe uma lista de elementos do tipo
    (nome, nota_p1, nota_p2, nota_p3) e retorna um dicionário dos alunos aprovados de acordo
    com o nosso cálculo de média (maior nota peso 3, segunda maior peso 2, menor peso 1),
    com suas respectivas médias
    média para aprovação >= 5
    """
    aprovados = {}
    for aluno_e_notas in alunos_e_notas:
        nome = aluno_e_notas[0]
        notas = aluno_e_notas[1:]
        média_desse_aluno = média(notas)
        if média_desse_aluno >= 5:
            aprovados[nome] = média_desse_aluno
    return aprovados

def lista_de_aprovados_v2(alunos_e_notas):
    """
    Recebe uma lista de elementos do tipo
    (nome, nota_p1, nota_p2, nota_p3) e retorna a lista dos alunos aprovados de acordo
    com o nosso cálculo de média (maior nota peso 3, segunda maior peso 2, menor peso 1)
    média para aprovação >= 5
    """
    aprovados = []
    for nome, n1, n2, n3 in alunos_e_notas:
        média_desse_aluno = média((n1,n2,n3))
        if média_desse_aluno >= 5:
            aprovados.append(nome)
    return aprovados

# Exemplos de compreensão
#
# quadrados
quadrados_compreensão = [número**2 for número in [1,3,5,7,9]]

# outro exemplo
exemplo = ''.join([letra+letra for letra in 'Hugo Nobrega'])

# exemplo: dicionário de números de 1 a 20 e seus quadrados
# por extenso:
resultado = {}
for número in range(1, 20+1):
    resultado[número] = número**2

# por compreensão:
resultado_compreensão = {número:número**2 for número in range(1,20+1)}
