Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

4
respostas

Desafio: hora da prática

EM CONSTRUÇÃO: estou fazendo os exercícios aos poucos. Se possível, por gentileza, me dar o feedback após o término de todas as resoluções.

Aquecimento:

1. Escreva um código que lê a lista abaixo e faça:

lista = [16, 14, 63, 65, 17, 99, 70, 11, 20, 48, 79, 32, 17, 89, 12, 25, 66]
  • A leitura do tamanho da lista
  • A leitura do maior e menor valor
  • A soma dos valores da lista

Ao final exiba uma mensagem dizendo:

"A lista possui [tam] números em que o maior número é [maior] e o menor número é [menor]. A soma dos valores presentes nela é igual a [soma]"
# Lista:
lista = [16, 14, 63, 65, 17, 99, 70, 11, 20, 48, 79, 32, 17, 89, 12, 25, 66]

# Leitura do tamanho da lista:
tam = len(lista)

# Leitura do maior e menor valor:
maior = max(lista)
menor = min(lista)

# Soma dos valores da lista:
soma = sum(lista)

# Exibição da mensagem final:
print(f'A lista possui {tam} números em que o maior número é {maior} e o menor número é {menor}. A soma dos valores presentes nela é igual a {soma}.')

A lista possui 17 números em que o maior número é 99 e o menor número é 11. A soma dos valores presentes nela é igual a 743.

2. Escreva uma função que gere a tabuada de um número inteiro de 1 a 10, de acordo com a escolha da pessoa usuária. Como exemplo, para o número 7, a tabuada deve ser mostrada no seguinte formato:

Tabuada do 7:
7 x 0 = 0
7 x 1 = 7
[...]
7 x 10 = 70
def tabuada(numero):
    print(f'Tabuada do {numero}:')
    for i in range(11):  # de 0 até 10
        print(f'{numero} x {i} = {numero * i}')

# Programa principal:
if __name__ == "__main__":
    numero = int(input("Digite um número inteiro para ver sua tabuada: "))
    tabuada(numero)

Digite um número inteiro para ver sua tabuada: 141
Tabuada do 141:
141 x 0 = 0
141 x 1 = 141
141 x 2 = 282
141 x 3 = 423
141 x 4 = 564
141 x 5 = 705
141 x 6 = 846
141 x 7 = 987
141 x 8 = 1128
141 x 9 = 1269
141 x 10 = 1410

3. Crie a função que leia a lista abaixo e retorne uma nova lista com os múltiplos de 3:

[97, 80, 94, 88, 80, 1, 16, 53, 62, 32, 24, 99]

Utilize o return na função e salve a nova lista na variável mult_3.

def filtragem_multiplos_3(lista):
    nova_lista = []
    for numero in lista:
        if numero % 3 == 0:
            nova_lista.append(numero)
    return nova_lista

# Lista fornecida:
numeros = [97, 80, 94, 88, 80, 1, 16, 53, 62, 32, 24, 99]

# Chamando a função e salvando na variável mult_3:
mult_3 = filtragem_multiplos_3 (numeros)

print(mult_3)

[24, 99]

4. Crie uma lista dos quadrados dos números da seguinte lista [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Lembre-se de utilizar as funções lambda e map() para calcular o quadrado de cada elemento da lista.

# Lista original:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Uso de lambda e map para calcular os quadrados:
quadrados = list(map(lambda x: x**2, numeros))

print(f'A lista da raiz quadrada de cada elemento é: {quadrados}.')

A lista da raiz quadrada de cada elemento é: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100].

Continua...

4 respostas

Olá, Andressa. Como vai?

É excelente ver que você já começou a colocar a mão na massa! Realizar os exercícios aos poucos é uma ótima estratégia para consolidar o aprendizado sem sobrecarga.

Sobre as resoluções que você postou:

  • Exercício 1 (Aquecimento): Sua solução está perfeita e muito "Pythônica". Você utilizou corretamente as funções integradas len(), max(), min() e sum(), que são muito eficientes para manipular coleções de dados.
  • Exercício 2 (Tabuada): A estrutura da sua função ficou muito clara. O uso do range(11) para garantir que o multiplicador vá de 0 até 10 foi uma escolha certeira. Também é muito bom ver que você já utiliza o bloco if __name__ == "__main__":, que é uma boa prática fundamental em Python para organizar o que é definição de função e o que é execução de código.

Como você pediu um feedback enquanto constrói as resoluções, deixo duas pequenas dicas de boas práticas para os próximos passos:

  1. Tratamento de Erros: No exercício da tabuada, se o usuário digitar uma letra em vez de um número, o programa exibirá um erro de ValueError. Como o curso também aborda exceções, você pode tentar envolver o input em um bloco try-except no futuro.
  2. Validação de Intervalo: O enunciado sugeria números de 1 a 10. Embora sua função funcione para qualquer número (como o 141 do seu teste), você pode adicionar uma verificação simples caso queira restringir a entrada conforme o desafio pediu.

Ficarei no aguardo das suas próximas resoluções! Sinta-se à vontade para postar aqui assim que terminar os próximos tópicos.

Espero que possa ter lhe ajudado!

Continuação:

Aplicando a projetos:

5. Você foi contratado(a) como cientista de dados de uma associação de skate. Para analisar as notas recebidas de skatistas em algumas competições ao longo do ano, você precisa criar um código que calcula a pontuação dos(as) atletas. Para isso, o seu código deve receber 5 notas digitadas pelas pessoas juradas.

Para calcular a pontuação de um(a) skatista, você precisa eliminar a maior e a menor pontuação dentre as 5 notas e tirar a média das 3 notas que sobraram. Retorne a média para apresentar o texto:

"Nota da manobra: [media]"

def calcular_pontuacao():
    # Nome do atleta:
    nome = input('Digite o nome do atleta: ')
    
    notas = []
    
    # Recebimento das cinco notas dos jurados:
    for i in range(5):
        while True:
            nota = float(input(f'Digite a nota do jurado {i+1} (0 a 10): '))
            if 0 <= nota <= 10:
                notas.append(nota)
                break
            else:
                print('Nota inválida! Digite um valor entre 0 e 10.')
    
    # Ordenação das notas:
    notas.sort()
    
    # Descarte da menor e da maior nota:
    menor = notas[0]
    maior = notas[-1]
    notas_validas = notas[1:-1]
    
    # Cálculo da média das três notas restantes:
    pontuacao_final = sum(notas_validas) / len(notas_validas)
    
    print(f'Atleta: {nome}')
    print(f'Notas recebidas: {notas}')
    print(f'Menor nota descartada: {menor}')
    print(f'Maior nota descartada: {maior}')
    print(f'Notas válidas: {notas_validas}')
    print(f'Nota da manobra: {pontuacao_final:.2f}')

# Função:
calcular_pontuacao()

Digite o nome do atleta: Sky
Digite a nota do jurado 1 (0 a 10): 8.9
Digite a nota do jurado 2 (0 a 10): 9.2
Digite a nota do jurado 3 (0 a 10): 9.6
Digite a nota do jurado 4 (0 a 10): 9.7
Digite a nota do jurado 5 (0 a 10): 9.9

Atleta: Sky
Notas recebidas: [8.9, 9.2, 9.6, 9.7, 9.9]
Menor nota descartada: 8.9
Maior nota descartada: 9.9
Notas válidas: [9.2, 9.6, 9.7]
Nota da manobra: 9.50

6. Para atender a uma demanda de uma instituição de ensino para a análise do desempenho de seus(suas) estudantes, você precisa criar uma função que receba uma lista de 4 notas e retorne:

  • maior nota
  • menor nota
  • média
  • situação (Aprovado(a) ou Reprovado(a))
  • Para testar o comportamento da função, os dados podem ser exibidos em um texto:
"O(a) estudante obteve uma média de [media], com a sua maior nota de [maior] pontos e a menor nota de [menor] pontos e foi [situacao]"
def analisar_desempenho(nome, notas):
    maior = max(notas)
    menor = min(notas)
    media = sum(notas) / len(notas)
    situacao = "aprovado" if media >= 7 else "reprovado"
    
    resultado = (
        f'O estudante {nome} obteve uma média de {media:.2f}, '
        f'com a sua maior nota de {maior} pontos '
        f'e a menor nota de {menor} pontos e foi {situacao}.'
    )
    
    return resultado


# Inserção de dados:
nome_estudante = input("Digite o nome do estudante: ")

notas = []
for i in range(4):
    nota = float(input(f'Digite a {i+1}ª nota: '))
    notas.append(nota)

print(analisar_desempenho(nome_estudante, notas))

Digite o nome do estudante: Benjamin
Digite a 1ª nota: 8.5
Digite a 2ª nota: 9.0
Digite a 3ª nota: 8.0
Digite a 4ª nota: 9.5
O estudante Benjamin obteve uma média de 8.75, com a sua maior nota de 9.5 pontos e a menor nota de 8.0 pontos e foi aprovado.

7. Você recebeu uma demanda para tratar 2 listas com os nomes e sobrenomes de cada estudante concatenando-as para apresentar seus nomes completos na forma Nome Sobrenome. As listas são:

nomes = ["joão", "MaRia", "JOSÉ"]
sobrenomes = ["SILVA", "souza", "Tavares"]

O texto exibido ao fim deve ser parecido com:

"Nome completo: Ana Silva"
nomes = ["joão", "MaRia", "JOSÉ"]
sobrenomes = ["SILVA", "souza", "Tavares"]

# Função que normaliza e concatena nome e sobrenome:
def formatar_nome_completo(par):
    nome, sobrenome = par
    return f'Nome completo: {nome.capitalize()} {sobrenome.capitalize()}'

# Utilizando map para aplicar a função em cada par de nome e sobrenome>
nomes_completos = list(map(formatar_nome_completo, zip(nomes, sobrenomes)))

# Resultados:
for nc in nomes_completos:
    print(nc)

Nome completo: João Silva
Nome completo: Maria Souza
Nome completo: José Tavares

Continua...

Continuação:

8. Como cientista de dados em um time de futebol, você precisa implementar novas formas de coleta de dados sobre o desempenho de jogadores e do time como um todo. Sua primeira ação é criar uma forma de calcular a pontuação do time no campeonato nacional a partir dos dados de gols marcados e sofridos em cada jogo.Escreva uma função chamada calcula_pontos que recebe como parâmetros duas listas de números inteiros, representando os gols marcados e sofridos pelo time em cada partida do campeonato. A função deve retornar a pontuação do time e o aproveitamento em percentual, levando em consideração que a vitória vale 3 pontos, o empate vale 1 ponto e a derrota 0 pontos. Para teste, utilize as seguintes listas de gols marcados e sofridos:

gols_marcados = [2, 1, 3, 1, 0]
gols_sofridos = [1, 2, 2, 1, 3]

Provável texto exibido:

"A pontuação do time foi de [pontos] e seu aproveitamento foi de [aprov]%"
def calcula_pontos(gols_marcados, gols_sofridos):
    pontos = 0
    for gm, gs in zip(gols_marcados, gols_sofridos):
        if gm > gs:       # vitória
            pontos += 3
        elif gm == gs:    # empate
            pontos += 1
        # derrota não soma pontos
    
    # Pontuação máxima possível (3 pontos por jogo):
    pontos_maximos = len(gols_marcados) * 3
    
    # Aproveitamento em percentual:
    aproveitamento = (pontos / pontos_maximos) * 100
    
    return pontos, aproveitamento

# Teste com os dados fornecidos:
gols_marcados = [2, 1, 3, 1, 0]
gols_sofridos = [1, 2, 2, 1, 3]

pontos, aproveitamento = calcula_pontos(gols_marcados, gols_sofridos)

print(f'A pontuação do time foi de {pontos} e seu aproveitamento foi de {aproveitamento:.2f}%')

A pontuação do time foi de 7 e seu aproveitamento foi de 46.67%

9. Você recebeu o desafio de criar um código que calcula os gastos de uma viagem para um das quatro cidades partindo de Recife, sendo elas: Salvador, Fortaleza, Natal e Aracaju. O custo da diária do hotel é de 150 reais em todas elas e o consumo de gasolina na viagem de carro é de 14 km/l, sendo que o valor da gasolina é de 5 reais o litro. O gastos com passeios e alimentação a se fazer em cada uma delas por dia seria de [200, 400, 250, 300], respectivamente. Sabendo que as distâncias entre Recife e cada uma das cidades é de aproximadamente [850, 800, 300, 550] km, crie três funções nas quais: a 1ª função calcule os gastos com hotel (gasto_hotel), a 2ª calcule os gastos com a gasolina (gasto_gasolina) e a 3ª os gastos com passeio e alimentação (gasto_passeio). Para testar, simule uma viagem de 3 dias para Salvador partindo de Recife. Considere a viagem de ida e volta de carro.

# Função para cálculo de gastos com hotel:
def gasto_hotel(dias, valor_diaria=150):
    return dias * valor_diaria

# Função para cálculo de gastos com gasolina:
def gasto_gasolina(distancia, consumo=14, preco_gasolina=5):
    litros = distancia / consumo
    return litros * preco_gasolina

# Função para cálculo de gastos com passeio e alimentação:
def gasto_passeio(dias, gasto_diario):
    return dias * gasto_diario


# Dados da viagem:
cidades = ["Salvador", "Fortaleza", "Natal", "Aracaju"]
distancias = [850, 800, 300, 550]  # km
gastos_passeio = [200, 400, 250, 300]  # por dia

# Simulação: 3 dias em Salvador:
dias_viagem = 3
cidade = "Salvador"
indice = cidades.index(cidade)
distancia_total = distancias[indice] * 2  # ida e volta
gasto_diario_passeio = gastos_passeio[indice]

# Cálculos:
hotel = gasto_hotel(dias_viagem)
gasolina = gasto_gasolina(distancia_total)
passeio = gasto_passeio(dias_viagem, gasto_diario_passeio)

total = hotel + gasolina + passeio

print(f'Com base nos gastos definidos, uma viagem de {dias_viagem} dias para {cidade} saindo de Recife custaria R$ {total:.2f}.')

Com base nos gastos definidos, uma viagem de 3 dias para Salvador saindo de Recife custaria R$ 1657.14.

Continua...

Continuação:

10. Você iniciou um estágio em uma empresa que trabalha com processamento de linguagem natural (NLP). Sua líder requisitou que você criasse um trecho de código que recebe uma frase digitada pela pessoa usuária e filtre apenas as palavras com tamanho maior ou igual a 5, exibindo-as em uma lista. Essa demanda é voltada para a análise do padrão de comportamento de pessoas na escrita de palavras acima dessa quantidade de caracteres.

Dica: utilize as funções lambda e filter() para filtrar essas palavras. Lembrando que a função embutida filter() recebe uma função (no nosso exemplo uma função lambda) e filtra um iterável de acordo com a função. Para tratar a frase use replace() para trocar a ',' '.', '!' e '?' por espaço.

Use a frase "Aprender Python aqui na Alura é muito bom" para testar o código.

# Frase de teste:
frase = "Aprender Python aqui na Alura é muito bom"

# Substituição de pontuações por espaço:
frase_tratada = frase.replace(",", " ").replace(".", " ").replace("!", " ").replace("?", " ")

# Divisão da frase em palavras:
palavras = frase_tratada.split()

# Filtragem de palavras com tamanho maior ou igual a 5:
palavras_filtradas = list(filter(lambda palavra: len(palavra) >= 5, palavras))

# Resultado:
print(palavras_filtradas)

['Aprender', 'Python', 'Alura', 'muito']