1
resposta

[Projeto] Desafio Prático de Python: Estruturas de Dados, Condicionais e Listas

1

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(media)

2

contador = 0

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

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

print(contador)
print(porcentagem)

3

lista = []

for i in range(5):
numero = int(input("Digite um número: "))
lista.append(numero)

print(lista)

4

lista = []

for i in range(5):
numero = int(input("Digite um número: "))
lista.append(numero)

print(lista[::-1])

5

numero = int(input("Digite um número: "))
primos = []

for num in range(2, numero + 1):
primo = True

for i in range(2, num):
    if num % i == 0:
        primo = False
        break

if primo:
    primos.append(num)

print(primos)

6

dia = int(input("Dia: "))
mes = int(input("Mês: "))
ano = int(input("Ano: "))

if mes == 2:
if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0):
max_dias = 29
else:
max_dias = 28

elif mes in [4, 6, 9, 11]:
max_dias = 30

elif mes in [1,3,5,7,8,10,12]:
max_dias = 31

else:
max_dias = 0

if dia >= 1 and dia <= max_dias:
print("Data válida")
else:
print("Data inválida")

1 resposta

Olá, Filipe! Tudo bem?

Parabéns pela conclusão do desafio! Suas soluções demonstram um domínio sólido da sintaxe do Python e, principalmente, uma ótima capacidade de aplicar estruturas condicionais e de repetição para resolver problemas lógicos complexos.

Aqui estão os destaques técnicos da sua entrega:

Análise das Soluções

  • Questão 1 e 2 (Análise de Gastos): Você utilizou corretamente as funções sum() e len() para extrair estatísticas da lista. A lógica do contador para filtrar valores acima de 3000 está perfeita e é a base para o tratamento de dados em Data Science.
  • Questão 3 e 4 (Manipulação de Listas): O uso do método .append() dentro de um laço for é a forma correta de construir listas dinamicamente. Na questão 4, o uso do fatiamento ([::-1]) para inverter a lista foi uma escolha muito eficiente e elegante.
  • Questão 5 (Números Primos): Sua lógica de laços aninhados está correta. O uso do break ao encontrar um divisor é uma excelente prática de otimização, pois interrompe o processamento assim que a condição de "não primo" é confirmada.
  • Questão 6 (Validação de Calendário): Esta questão exige atenção redobrada aos detalhes, e você cobriu todos os pontos críticos:
  • Identificou corretamente a regra dos anos bissextos para o mês de fevereiro.
  • Categorizou os meses com 30 e 31 dias usando a estrutura elif mes in [...], o que deixa o código muito mais legível do que vários if isolados.

Dicas de "Engenheiro de Software"

Para elevar ainda mais o nível do seu código, aqui estão duas sugestões:

  1. Tratamento de Entradas: Nas questões 3 e 4, se o usuário digitar uma letra em vez de um número, o programa irá travar. Futuramente, você pode usar o bloco try/except para lidar com esses erros de forma amigável.
  2. Uso de Funções: Na questão dos números primos, transformar a verificação em uma função (ex: def eh_primo(n):) tornaria seu código mais modular e fácil de reutilizar em outros projetos.

Seu desempenho de 7.9k de XP mostra que você está progredindo rápido e com qualidade! Continue praticando e explorando novas formas de otimizar seus algoritmos.

Espero que possa ter lhe ajudado!

Na Questão 6, agora que você já domina a lógica manual, você sabia que o Python possui uma biblioteca nativa chamada calendar que possui uma função específica para verificar se um ano é bissexto?