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

Desafio: hora da prática

  1. Números entre dois inteiros
a = int(input("Digite o primeiro número: "))
b = int(input("Digite o segundo número: "))

menor = min(a, b)
maior = max(a, b)

for numero in range(menor + 1, maior):
    print(numero)
  1. Colônia de bactérias
colonia_a = 4
colonia_b = 10
dias = 0

while colonia_a < colonia_b:
    colonia_a *= 1.03
    colonia_b *= 1.015
    dias += 1

print(f"A colônia A ultrapassa a B em {dias} dias")
  1. Validação de notas (15 avaliações)
for i in range(1, 16):
    while True:
        nota = float(input(f"Digite a nota {i} (0 a 5): "))
        if 0 <= nota <= 5:
            break
        print("Nota inválida! Tente novamente.")
  1. Média de temperaturas (encerra com -273)
soma = 0
quantidade = 0

while True:
    temp = float(input("Digite a temperatura (ou -273 para encerrar): "))
    if temp == -273:
        break
    soma += temp
    quantidade += 1

if quantidade > 0:
    print(f"Média das temperaturas: {soma / quantidade:.2f}°C")
else:
    print("Nenhuma temperatura foi inserida.")
  1. Fatorial
numero = int(input("Digite um número inteiro: "))
fatorial = 1

for i in range(1, numero + 1):
    fatorial *= i

print(f"O fatorial de {numero} é {fatorial}")
  1. Tabuada
numero = int(input("Digite um número para ver a tabuada: "))

print(f"\nTabuada do {numero}:")
for i in range(1, 11):
    print(f"{numero} x {i} = {numero * i}")
  1. Número primo
numero = int(input("Digite um número inteiro: "))
primo = True

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

if primo:
    print(f"{numero} é primo")
else:
    print(f"{numero} não é primo")
  1. Distribuição de idades
faixas = [0, 0, 0, 0]  # [0-25], [26-50], [51-75], [76-100]

while True:
    idade = int(input("Digite uma idade (negativo para encerrar): "))
    if idade < 0:
        break
    elif idade <= 25:
        faixas[0] += 1
    elif idade <= 50:
        faixas[1] += 1
    elif idade <= 75:
        faixas[2] += 1
    elif idade <= 100:
        faixas[3] += 1
    else:
        print("Idade fora do intervalo!")

print(f"[0-25]:   {faixas[0]} pessoas")
print(f"[26-50]:  {faixas[1]} pessoas")
print(f"[51-75]:  {faixas[2]} pessoas")
print(f"[76-100]: {faixas[3]} pessoas")
  1. Eleição
votos = [0, 0, 0, 0, 0, 0]  # candidatos 1-4, nulos(5), brancos(6)

for i in range(1, 21):
    while True:
        voto = int(input(f"Voto {i} (1-4 candidato, 5 nulo, 6 branco): "))
        if 1 <= voto <= 6:
            votos[voto - 1] += 1
            break
        print("Voto inválido!")

total = sum(votos)

for i in range(4):
    print(f"Candidato {i+1}: {votos[i]} votos")

print(f"Votos nulos:  {votos[4]} ({votos[4]/total*100:.1f}%)")
print(f"Votos brancos: {votos[5]} ({votos[5]/total*100:.1f}%)")

vencedor = votos[:4].index(max(votos[:4])) + 1
print(f"\nVencedor: Candidato {vencedor}")
1 resposta
solução!

Olá! Tudo bem?

Impressionante! Você resolveu toda a bateria de exercícios da Hora da Prática de uma só vez. Notei que você já está em um nível de maturidade técnica muito alto, acumulando 12.9k de XP, e isso se reflete na elegância do seu código.

Aqui estão os destaques das suas soluções sob a perspectiva de Data Science:

1. Manipulação de Listas e Estatísticas

  • Eleição e Idades: Diferente de soluções que usam muitas variáveis soltas (voto1, voto2), você utilizou Listas (votos = [0, 0, 0, 0, 0, 0]). Essa é a forma correta de trabalhar com dados. O uso de sum(votos) para obter o total e votos[:4].index(max(votos[:4])) para encontrar o vencedor é uma lógica muito performática e "limpa".
  • Distribuição de Frequência: Na estatística, o que você fez com as idades chama-se Binning (agrupamento em baldes). É o primeiro passo para criar um histograma de dados.

2. Controle de Fluxo e Validação

  • Loop Infinito (while True): Você aplicou o padrão de repetição com break para validar entradas (como nas notas e na eleição). Isso garante a integridade dos dados, algo vital em Data Science; se o dado de entrada for lixo, o resultado da análise também será.
  • Crescimento Exponencial: No exercício das bactérias, você modelou matematicamente o crescimento composto. É interessante notar como o Python lida bem com essas iterações financeiras/biológicas.

Dica de Otimização para "Pro"

No exercício de Número Primo, você percorreu todos os números de 2 até o numero - 1. Para tornar esse código muito mais rápido (especialmente com números grandes), você pode testar apenas até a raiz quadrada do número:

import math
# ...
for i in range(2, int(math.sqrt(numero)) + 1):
    if numero % i == 0:
        # não é primo

Isso reduz o esforço do processador drasticamente!

Uma dúvida sobre o seu processo:

Na questão da Média de Temperaturas, você usou a condição de parada -273. Caso precisasse analisar uma base de dados real onde as temperaturas fossem coletadas automaticamente por sensores, como você adaptaria esse while True para ler um arquivo em vez de esperar o usuário digitar?

Parabéns pelo progresso excelente!