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

[Projeto] Aquecendo na programação

Aquecendo na programação

  1. Faça um programa que tenha a seguinte lista contendo os valores de gastos de uma empresa de papel [2172.54, 3701.35, 3518.09, 3456.61, 3249.38, 2840.82, 3891.45, 3075.26, 2317.64, 3219.08]. Com esses valores, faça um programa que calcule a média de gastos. Dica: use as funções built-in sum() e len().
gastos = [2172.54, 3701.35, 3518.09, 3456.61, 3249.38,
          2840.82, 3891.45, 3075.26, 2317.64, 3219.08]

media = sum(gastos) / len(gastos)

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

compras_acima_3000 = 0

for gasto in gastos:
    if gasto > 3000:
        compras_acima_3000 += 1

porcentagem = (compras_acima_3000 / len(gastos)) * 100

print(f"Compras acima de R$ 3000: {compras_acima_3000}")
print(f"Porcentagem sobre o total: {porcentagem:.2f}%")
  1. 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].
numeros = []

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

print("Lista de números:", numeros)
  1. Colete novamente 5 inteiros e imprima a lista em ordem inversa à enviada.
numeros = []

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

print("Lista em ordem inversa:", numeros[::-1])
  1. Faça um programa que, ao inserir um número qualquer, cria uma lista contendo todos os números primos entre 1 e o número digitado.
numero = int(input("Digite um número inteiro: "))

primos = []

for n in range(2, numero + 1):
    eh_primo = True

    for divisor in range(2, n):
        if n % divisor == 0:
            eh_primo = False
            break

    if eh_primo:
        primos.append(n)

print("Números primos entre 1 e", numero, ":")
print(primos)
  1. Escreva um programa que peça uma data informando o dia, mês e ano e determine se ela é válida para uma análise.
dia = int(input("Digite o dia: "))
mes = int(input("Digite o mês: "))
ano = int(input("Digite o ano: "))

data_valida = True

if ano <= 0:
    data_valida = False
elif mes < 1 or mes > 12:
    data_valida = False
elif dia < 1:
    data_valida = False
else:
    # Meses com 31 dias
    if mes in [1, 3, 5, 7, 8, 10, 12]:
        if dia > 31:
            data_valida = False

    # Meses com 30 dias
    elif mes in [4, 6, 9, 11]:
        if dia > 30:
            data_valida = False

    # Fevereiro
    elif mes == 2:
        # Verifica se o ano é bissexto
        if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0):
            if dia > 29:
                data_valida = False
        else:
            if dia > 28:
                data_valida = False

if data_valida:
    print("A data é válida.")
else:
    print("A data é inválida.")
1 resposta
solução!

Olá, Cássio. Como vai?

Mais uma vez, parabéns pela excelente entrega dos seus códigos! É muito gratificante ver como você estruturou cada um dos exercícios propostos com clareza. Você usou com maestria recursos muito poderosos do Python, como a técnica de fatiamento (numeros[::-1]) para inverter a lista de forma rápida e elegante, além de criar uma lógica impecável para a validação do ano bissexto no exercício de datas.

Como você já está avançando super bem pelas estruturas de dados no Python, trago algumas dicas técnicas e de boas práticas para elevar ainda mais o nível dos seus códigos atuais:


1. Otimização no Código de Números Primos

O seu código funciona perfeitamente, mas no mundo da Ciência de Dados, a performance é um fator muito importante. No seu laço interno, você está testando todos os divisores até n.

Matematicamente, não precisamos testar todos os números. Se um número tem um divisor, ele obrigatoriamente será menor ou igual à raiz quadrada desse número (ou seja, n 0.5).

  • Aplicando essa regra e pulando os números pares (já que nenhum número par maior que 2 é primo), seu código roda muito mais rápido em números grandes:
numero = int(input("Digite um número inteiro: "))
primos = []

if numero >= 2:
    primos.append(2)  # O único primo par

for n in range(3, numero + 1, 2):  # Anda apenas pelos ímpares
    eh_primo = True
    limite = int(n ** 0.5) + 1  # Limita os testes até a raiz quadrada de n
    
    for divisor in range(3, limite, 2):
        if n % divisor == 0:
            eh_primo = False
            break
            
    if eh_primo:
        primos.append(n)

print(f"Números primos entre 1 e {numero}:")
print(primos)

2. Tratando a Validação de Datas de Forma Nativa

O seu algoritmo para validar o calendário manualmente ficou excelente e demonstra um ótimo domínio de lógica condicional com if/elif/else.

No entanto, no dia a dia de um Cientista de Dados, nós evitamos recriar regras de calendário do zero para não deixar o código complexo. O Python possui a biblioteca nativa datetime, que resolve todo esse problema em pouquíssimas linhas e já lida nativamente com anos bissextos e meses com 30 ou 31 dias:

from datetime import datetime

dia = int(input("Digite o dia: "))
mes = int(input("Digite o mês: "))
ano = int(input("Digite o ano: "))

try:
    # Tenta construir a data. Se os valores forem inválidos, o Python gera um erro.
    data_analise = datetime(ano, mes, dia)
    print("A data é válida.")
except ValueError:
    print("A data é inválida.")

O uso do bloco try/except é uma prática padrão de mercado para capturar exceções e validações de dados de forma limpa.

Continue com esse foco excelente nos exercícios de aquecimento, pois essa base sólida fará toda a diferença nos próximos módulos de análise de dados!

Espero que possa ter lhe ajudado!