3
respostas

[Projeto] DESAFIO: HORA DA PRATICA

A Alura caprichou nos exercícios dessa aula, mas consegui fazer:

https://colab.research.google.com/drive/1Fl1HCkrlIuJtM54PGwZdLsF9qldKugGe?usp=drive_link

  1. Escreva um programa que peça dois números inteiros e imprima todos os números inteiros entre eles.
import time as t

# Area de Variaveis

num1 = int(input("Digite o primeiro número: "))
num2 = int(input("Digite o segundo número: "))

# Processamento e Saída
print(f'\nNumeros entre {num1} e {num2}')

for n in range(num1+1, num2):
  print(n, end=" | ")
  t.sleep(1)
  1. Escreva um programa para calcular quantos dias levará para a colônia de uma bactéria A ultrapassar ou igualar a colônia de uma bactéria B, com base nas taxas de crescimento de 3% e 1,5% respectivamente. Considere que a colônia A inicia com 4 elementos e a B com 10.
# IMPORTAÇÕES
import time as t

# AREA DE VARIAVEIS

bacteria_A = 4
bacteria_B = 10

tx_crescA = 0.03 # 3%
tx_crescB = 0.015 # 1.5%

# Contador
dias = 0

# PROCESSAMENTO E SAIDA
while bacteria_A <= bacteria_B:
  bacteria_A *= (1 + tx_crescA)
  bacteria_B *= (1 + tx_crescB)
  dias = dias + 1
  print(f'{dias}',end= '|')
  t.sleep(0.25)

print("\n")

print(f"\nRESULTADOS")
print(f"*************************************************************************")
print(f"\nLevará {dias} dias para a colônia A ultrapassar ou igualar a colônia B.")
print(f'\nPopulação de A após {dias} dias: {bacteria_A:.2f}')
print(f'População de B após {dias} dias: {bacteria_B:.2f}\n')
print(f"*************************************************************************")
  1. Para tratar uma quantidade de 15 dados de avaliações de pessoas usuárias de um serviço da empresa, precisamos verificar se as notas são válidas. Então, escreva um programa que vai receber a nota de 0 a 5 de todos os dados e verificar se é um valor válido. Caso seja inserido uma nota acima de 5 ou abaixo de 0, repita até que a pessoa usuária insira um valor válido.
import time as t

# AREA DE VARIAVEIS
notas_avaliacoes = []
num_avaliacoes = 15

# PROCESSAMENTO
for i in range(num_avaliacoes):
  while True:
    try:
      nota = int(input(f"Digite a nota {i+1} (de 0 a 5): "))
      if 0 <= nota <= 5:
        notas_avaliacoes.append(nota)
        break # Sai do loop while se a nota for válida
      else:
        print("Valor inválido! Por favor, digite uma nota entre 0 e 5.")
    except ValueError:
      print("Entrada inválida! Por favor, digite um número inteiro.")
  t.sleep(0.5) # Pequeno atraso para melhor legibilidade no console

# SAÍDA
print(f"\nTodas as {num_avaliacoes} notas válidas foram inseridas:")
print(notas_avaliacoes)
  1. Desenvolva um programa que leia um conjunto indeterminado de temperaturas em Celsius e informe a média delas. A leitura deve ser encerrada ao ser enviado o valor -273°C.
# AREA DE VARIAVEIS
temperaturas = []
soma_temperaturas = 0
contador_temperaturas = 0

# PROCESSAMENTO
while True:
  try:
    temp_str = input("Digite uma temperatura em Celsius (-273 para encerrar): ")
    temperatura = float(temp_str)

    if temperatura == -273:
      print("Leitura encerrada.")
      break
    else:
      temperaturas.append(temperatura)
      soma_temperaturas += temperatura
      contador_temperaturas += 1

  except ValueError:
    print("Entrada inválida! Por favor, digite um número.")

# SAÍDA
if contador_temperaturas > 0:
  media_temperaturas = soma_temperaturas / contador_temperaturas
  print(f"\nA média das {contador_temperaturas} temperaturas inseridas é: {media_temperaturas:.2f}°C")
else:
  print("Nenhuma temperatura válida foi inserida.")
  1. Escreva um programa que calcule o fatorial de um número inteiro fornecido pela pessoa usuária. Lembrando que o fatorial de um número inteiro é a multiplicação desse número por todos os seus antecessores até o número 1. Por exemplo, o fatorial de 5 é 5 x 4 x 3 x 2 x 1 = 120.
# AREA DE VARIAVEIS
numero = -1 # Inicializa com um valor inválido para entrar no loop
fatorial = 1

# PROCESSAMENTO
while True:
  try:
    numero_str = input("Digite um número inteiro não negativo para calcular o fatorial: ")
    numero = int(numero_str)

    if numero < 0:
      print("Entrada inválida! O número deve ser não negativo.")
    else:
      break # Sai do loop se o número for válido
  except ValueError:
    print("Entrada inválida! Por favor, digite um número inteiro.")

if numero == 0:
  fatorial = 1 # Fatorial de 0 é 1
else:
  for i in range(1, numero + 1):
    fatorial *= i

# SAÍDA
print(f"\nO fatorial de {numero} é: {fatorial}")
3 respostas
  1. Escreva um programa 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 2, a tabuada deve ser mostrada no seguinte formato:
# AREA DE VARIAVEIS
numero_tabuada = 0 # Inicializa com um valor inválido

# PROCESSAMENTO
while True:
  try:
    numero_str = input("Digite um número inteiro de 1 a 10 para gerar a tabuada: ")
    numero_tabuada = int(numero_str)

    if 1 <= numero_tabuada <= 10:
      break # Sai do loop se o número for válido
    else:
      print("Valor inválido! Por favor, digite um número entre 1 e 10.")
  except ValueError:
    print("Entrada inválida! Por favor, digite um número inteiro.")

# SAÍDA
print(f"\nTabuada do {numero_tabuada}:")
print("--------------------")
for i in range(1, 11):
  resultado = numero_tabuada * i
  print(f"{numero_tabuada} x {i:2} = {resultado:3}")
print("--------------------")
  1. Os números primos possuem várias aplicações dentro da Ciência de Dados em criptografia e segurança, por exemplo. Um número primo é aquele que é divisível apenas por um e por ele mesmo. Assim, faça um programa que peça um número inteiro e determine se ele é ou não um número primo.
# AREA DE VARIAVEIS
numero = -1 # Inicializa com valor inválido

# PROCESSAMENTO - Solicita e valida a entrada do usuário
while True:
  try:
    numero_str = input("Digite um número inteiro para verificar se é primo: ")
    numero = int(numero_str)

    if numero < 0:
      print("Entrada inválida! Por favor, digite um número inteiro não negativo.")
    else:
      break # Sai do loop se o número for válido
  except ValueError:
    print("Entrada inválida! Por favor, digite um número inteiro.")

# Lógica para verificar se é primo
is_primo = True
if numero <= 1:
  is_primo = False
elif numero == 2:
  is_primo = True
elif numero % 2 == 0:
  is_primo = False
else:
  # Verifica divisibilidade apenas por números ímpares até a raiz quadrada do número
  # (não precisamos importar math.sqrt, podemos usar i*i <= numero)
  i = 3
  while i * i <= numero:
    if numero % i == 0:
      is_primo = False
      break
    i += 2

# SAÍDA
if is_primo:
  print(f"\nO número {numero} é primo.")
else:
  print(f"\nO número {numero} não é primo.")
  1. Vamos entender a distribuição de idades de pensionistas de uma empresa de previdência. Escreva um programa que leia as idades de uma quantidade não informada de clientes e mostre a distribuição em intervalos de [0-25], [26-50], [51-75] e [76-100]. Encerre a entrada de dados com um número negativo.
# AREA DE VARIAVEIS
contagem_0_25 = 0
contagem_26_50 = 0
contagem_51_75 = 0
contagem_76_100 = 0

# PROCESSAMENTO
print("Digite as idades dos clientes. Digite um número negativo para encerrar.")
while True:
  try:
    idade_str = input("Digite a idade: ")
    idade = int(idade_str)

    if idade < 0:
      print("Entrada de dados encerrada.")
      break
    elif 0 <= idade <= 25:
      contagem_0_25 += 1
    elif 26 <= idade <= 50:
      contagem_26_50 += 1
    elif 51 <= idade <= 75:
      contagem_51_75 += 1
    elif 76 <= idade:
      # A idade pode ser maior que 100, mas a categoria é até 100 ou mais
      contagem_76_100 += 1
    else:
      print("Idade inválida (negativa ou fora de um intervalo esperado, mas positiva). Ignorando.")

  except ValueError:
    print("Entrada inválida! Por favor, digite um número inteiro.")

# SAÍDA
print("\nDistribuição de idades dos pensionistas:")
print(f"[0-25]........: {contagem_0_25} clientes")
print(f"[26-50].......: {contagem_26_50} clientes")
print(f"[51-75].......: {contagem_51_75} clientes")
print(f"[76-100+].....: {contagem_76_100} clientes")
  1. Em uma eleição para gerência em uma empresa com 20 pessoas colaboradoras, existem quatro candidatos(as). Escreva um programa que calcule o(a) vencedor(a) da eleição. A votação ocorreu da seguinte maneira:
  • Cada colaborador(a) votou em uma das quatro pessoas candidatas (que representamos pelos números 1, 2, 3 e 4).

  • Também foram contabilizados os votos nulos (representados pelo número 5) e os votos em branco (representados pelo número 6).

    Ao final da votação, o programa deve exibir o número total de votos para cada candidato(a), os nulos e os votos em branco. Além disso, deve calcular e exibir a porcentagem de votos nulos em relação ao total de votos e a porcentagem de votos em branco em relação ao total de votos.

# AREA DE VARIAVEIS
num_colaboradores = 20
votos_candidato = {1: 0, 2: 0, 3: 0, 4: 0}
votos_nulos = 0
votos_em_branco = 0

# PROCESSAMENTO
print("Eleição para Gerência - Por favor, insira o voto de cada colaborador:")
print("Candidatos: 1, 2, 3, 4 | Nulo: 5 | Branco: 6")

for i in range(num_colaboradores):
  while True:
    try:
      voto_str = input(f"Colaborador(a) {i + 1}/{num_colaboradores}, digite seu voto: ")
      voto = int(voto_str)

      if 1 <= voto <= 4:
        votos_candidato[voto] += 1
        break
      elif voto == 5:
        votos_nulos += 1
        break
      elif voto == 6:
        votos_em_branco += 1
        break
      else:
        print("Voto inválido! Por favor, digite um número entre 1 e 6.")
    except ValueError:
      print("Entrada inválida! Por favor, digite um número inteiro.")

# SAÍDA
print("\n--- RESULTADOS DA ELEIÇÃO ---")
print("Votos por Candidato:")
for candidato, votos in votos_candidato.items():
  print(f"Candidato {candidato}: {votos} votos")

print(f"Votos Nulos: {votos_nulos} votos")
print(f"Votos em Branco: {votos_em_branco} votos")

total_votos = num_colaboradores # O total de votos é sempre o número de colaboradores

# Cálculos de porcentagem
porcentagem_nulos = (votos_nulos / total_votos) * 100 if total_votos > 0 else 0
porcentagem_brancos = (votos_em_branco / total_votos) * 100 if total_votos > 0 else 0

print("\n--- PORCENTAGENS ---")
print(f"Porcentagem de Votos Nulos: {porcentagem_nulos:.21f}%")
print(f"Porcentagem de Votos em Branco: {porcentagem_brancos:.2f}%")

Olá, Luiz. Como vai?

Parabéns pela dedicação em resolver todos os exercícios do desafio! A lógica que você construiu está excelente, e o fato de você ter compartilhado as resoluções detalhadas no fórum ajuda muito outros estudantes que possam estar com dúvidas ou buscando inspiração.

Gostei bastante de ver que você já está aplicando práticas importantes de resiliência de código, como o uso estruturado dos blocos try/except para tratar erros de digitação do usuário e evitar que o programa quebre. Além disso, a sua lógica para encontrar números primos otimizando a busca até a raiz quadrada (i * i <= numero) foi uma sacada brilhante em termos de performance computacional!

Para agregar ainda mais valor ao seu aprendizado e complementar o seu excelente trabalho, deixo aqui uma sugestão de boas práticas focada na reutilização de código (princípio DRY - Don't Repeat Yourself).

Como você precisou validar entradas numéricas em quase todos os exercícios utilizando a mesma estrutura de while True com try/except, em projetos do dia a dia nós costumamos encapsular essa repetição dentro de uma função.

Veja um exemplo prático de como você pode criar uma função genérica para ler e validar números inteiros, deixando o corpo principal do seu script muito mais limpo e legível:

def ler_inteiro(mensagem, mensagem_erro="Entrada inválida! Por favor, digite um número inteiro."):
    while True:
        try:
            valor = int(input(mensagem))
            return valor # O return já encerra a função e o loop de uma vez
        except ValueError:
            print(mensagem_erro)

# Exemplo de utilização da função no seu exercício de idades:
idade = ler_inteiro("Digite a idade: ")

Você pode, inclusive, evoluir essa função no futuro para receber parâmetros de valor mínimo e máximo. Assim, a verificação de notas de 0 a 5, por exemplo, ficaria em apenas uma linha no seu código principal.

Continue com esse excelente ritmo de estudos, codificação e compartilhamento. É exatamente assim que se constrói uma base técnica sólida na área de Dados!

Espero que possa ter lhe ajudado!