Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio: hora da prática

#Questão 1: Faça um programa que tenha a seguinte lista contendo os valores de gastos de uma empresa de papel
# Lista com os gastos da empresa
gastos = [2172.54, 3701.35, 3518.09, 3456.61, 3249.38,
           2840.82, 3891.45, 3075.26, 2317.64, 3219.08]

# Calculando a média
media = sum(gastos) / len(gastos)

# Exibindo o resultado
print(f"Média de gastos: R$ {media:.2f}")
# Questão 2: Com os mesmos dados da questão anterior, defina quantas compras foram acima de 3000 reais e calcule a porcentagem quanto ao total de compras.
# Lista com os gastos da empresa
gastos = [2172.54, 3701.35, 3518.09, 3456.61, 3249.38,
           2840.82, 3891.45, 3075.26, 2317.64, 3219.08]

# Contando quantas compras foram acima de 3000
acima_3000 = 0

for valor in gastos:
    if valor > 3000:
        acima_3000 += 1

# Calculando a porcentagem
porcentagem = (acima_3000 / len(gastos)) * 100

# Exibindo os resultados
print(f"Compras acima de R$ 3000: {acima_3000}")
print(f"Porcentagem: {porcentagem:.1f}%")
# Questão 3: Faça um código que colete em uma lista 5 números inteiros quaisquer e imprima a lista. Exemplo: [1,4,7,2,4].
# Criando uma lista vazia
numeros = []

# Coletando 5 números inteiros
for i in range(5):
    numero = int(input(f"Digite o {i+1}º número: "))
    numeros.append(numero)

# Imprimindo a lista
print(numeros)
# Questão 4: Colete novamente 5 inteiros e imprima a lista em ordem inversa à enviada.
# Criando uma lista vazia
numeros = []

# Coletando 5 números inteiros
for i in range(5):
    numero = int(input(f"Digite o {i+1}º número: "))
    numeros.append(numero)

# Exibindo a lista em ordem inversa
print(numeros[::-1])
# Questão5: Faça um programa que, ao inserir um número qualquer, criará uma lista contendo todos os números primos entre 1 e o número digitado.
# Função para verificar se um número é primo
def eh_primo(numero):
    if numero < 2:
        return False
    
    for i in range(2, numero):
        if numero % i == 0:
            return False
    
    return True

# Entrada do usuário
limite = int(input("Digite um número: "))

# Lista para armazenar os números primos
primos = []

# Verificando os números entre 1 e o limite
for n in range(1, limite + 1):
    if eh_primo(n):
        primos.append(n)

# Exibindo os números primos
print(primos)
# Questão 6: Escreva um programa que peça uma data informando o dia, mês e ano e determine se ela é uma data válida para uma análise.
# Entrada da data
dia = int(input("Digite o dia: "))
mes = int(input("Digite o mês: "))
ano = int(input("Digite o ano: "))

# Verificando se o ano é bissexto
bissexto = (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0)

# Quantidade de dias em cada mês
dias_mes = {
    1: 31,
    2: 29 if bissexto else 28,
    3: 31,
    4: 30,
    5: 31,
    6: 30,
    7: 31,
    8: 31,
    9: 30,
    10: 31,
    11: 30,
    12: 31
}

# Verificando se a data é válida
if mes in dias_mes and 1 <= dia <= dias_mes[mes]:
    print("Data válida!")
else:
    print("Data inválida!")
1 resposta
solução!

Olá! Tudo bem?

Parabéns por concluir mais essa etapa! Trabalhar com Listas e Dicionários é um divisor de águas em Data Science, pois é assim que começamos a estruturar grandes volumes de dados para análise.

Aqui estão os destaques técnicos das suas resoluções:

Análise das Questões

  • Questão 1 (Média de Gastos): O uso das funções embutidas sum() e len() é a forma mais eficiente e limpa de calcular a média aritmética em Python.
  • Questão 2 (Contagem e Porcentagem): Você aplicou corretamente a lógica de acumulação (acima_3000 += 1) dentro de um laço for. Esse é o princípio básico de filtragem de dados.
  • Questão 3 e 4 (Manipulação de Listas): O método .append() é essencial para construir listas dinamicamente. Na Questão 4, o uso do fatiamento ([::-1]) para inverter a lista foi uma excelente escolha — é uma técnica performática e muito utilizada.
  • Questão 5 (Lista de Primos): Criar uma função específica (eh_primo) para isolar a lógica de verificação é uma ótima prática de modularização. Isso torna seu código principal muito mais fácil de ler e manter.
  • Questão 6 (Validação de Data): Esta foi a mais complexa e você se saiu muito bem!
  • Lógica de Bissexto: Você aplicou a regra matemática completa para anos bissextos.
  • Uso de Dicionários: Usar um dicionário para mapear os meses aos seus respectivos dias (dias_mes) é muito mais elegante e rápido do que escrever vários if/elif.

Dica de Ouro para Data Science

Nas questões 1 e 2, você lidou com uma lista manual de gastos. Conforme você avançar, verá que essas operações de média e filtragem são feitas de forma quase instantânea usando bibliotecas como Pandas.

Por exemplo, no Pandas, sua Questão 2 seria resolvida em apenas uma linha:
df[df['gastos'] > 3000].count()

Reflexão:

Na Questão 6, você validou datas de forma manual. Na Ciência de Dados, lidamos muito com séries temporais (vendas por dia, sensores de temperatura, etc.). Você sabia que o Python possui uma biblioteca nativa chamada datetime que já faz todas essas validações de bissexto e dias do mês automaticamente?

Excelente trabalho, continue com esse foco e organização nos seus códigos!

Espero que possa ter lhe ajudado!