2
respostas

Momento dos Projetos

Momento dos projetos

Questão 6

num = int(input('Informe um número inteiro de 1 a 10: '))

print(f'Tabuada do {num}:')
for i in range(1, 11):
  resultado = num * i
  print(f'{num} x {i} = {resultado}')

Informe um número inteiro de 1 a 10: 7
Tabuada do 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70

Questão 7

num = int(input("Digite o número: "))

eh_primo = True

if num <= 1 :
  eh_primo = False

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

if eh_primo:
  print(f'O número {num} é primo')
else:
  print(f'O número {num} não é primo')

Digite o número: 14
O número 14 não é primo

Questão 8

idade = int(input('Informe a idade (ou número negativo para encerrar): '))

contador_0_25 = 0
contador_26_50 = 0
contador_51_75 = 0
contador_76_100 = 0

while idade >= 0:
  if idade >= 0 and idade <= 25:
    contador_0_25 += 1
  elif idade >= 26 and idade <= 50:
    contador_26_50 += 1
  elif idade >= 51 and idade <= 75:
    contador_51_75 += 1
  elif idade >= 76 and idade <= 100:
    contador_76_100 += 1
  
  idade = int(input('Informe a idade (ou número negativo para encerrar): '))

print('Distribuição de idades:')
print('[0-25]:', contador_0_25)
print('[26-50]:', contador_26_50)
print('[51-75]:', contador_51_75)
print('[76-100]:', contador_76_100)

Informe a idade (ou número negativo para encerrar): 84
Informe a idade (ou número negativo para encerrar): 42
Informe a idade (ou número negativo para encerrar): 41
Informe a idade (ou número negativo para encerrar): -23
Distribuição de idades:
[0-25]: 0
[26-50]: 2
[51-75]: 0
[76-100]: 1

Questão 9

votos_candidato1 = 0
votos_candidato2 = 0
votos_candidato3 = 0
votos_candidato4 = 0
votos_nulos = 0
votos_branco = 0

for i in range(0,20):
  voto = int(input('Informe seu voto:'))
  if voto == 1:
    votos_candidato1 += 1
  elif voto == 2:
    votos_candidato2 += 1
  elif voto == 3:
    votos_candidato3 += 1
  elif voto == 4:
    votos_candidato4 += 1
  elif voto == 5:
    votos_nulos += 1
  elif voto == 6:
    votos_branco += 1
  else:
    print('Voto inválido.')

print(f'Votos candidato 1: {votos_candidato1}')
print(f'Votos candidato 2: {votos_candidato2}')
print(f'Votos candidato 3: {votos_candidato3}')
print(f'Votos candidato 4: {votos_candidato4}')
print(f'Votos nulos: {votos_nulos}')
print(f'Votos em branco; {votos_branco}')
print(f'Percentual de votos nulos: {(votos_nulos / 20 * 100)}')
print(f'Percentual de votos em branco: {(votos_branco / 20 * 100)}')

Informe seu voto:2
Informe seu voto:4
Informe seu voto:3
Informe seu voto:-1
Voto inválido.
Informe seu voto:2
Informe seu voto:4
Informe seu voto:4
Informe seu voto:3
Informe seu voto:2
Informe seu voto:1
Informe seu voto:4
Informe seu voto:6
Informe seu voto:8
Voto inválido.
Informe seu voto:5
Informe seu voto:4
Informe seu voto:3
Informe seu voto:1
Informe seu voto:4
Informe seu voto:3
Informe seu voto:2
Votos candidato 1: 2
Votos candidato 2: 4
Votos candidato 3: 4
Votos candidato 4: 6
Votos nulos: 1
Votos em branco; 1
Percentual de votos nulos: 5.0
Percentual de votos em branco: 5.0

2 respostas

Olá, Jonatan. Como vai?

Excelente ver que você continuou avançando nos desafios e chegou na seção do Momento dos Projetos. O uso de estruturas condicionais combinadas com laços de repetição ficou muito bem estruturado no seu código.

Analisando as suas respostas, as Questões 6, 7 e 8 estão perfeitas. A lógica para identificar números primos na Questão 7 com o uso do break ficou excelente, e a estrutura do while com a leitura da idade no final do bloco na Questão 8 está corretíssima para evitar loops infinitos.

Na Questão 9, o seu código funciona muito bem e atende ao que foi pedido. No entanto, existe um pequeno detalhe conceitual sobre votos inválidos que pode impactar o cálculo final das porcentagens em cenários reais, além de uma oportunidade de deixar o código mais dinâmico. Vamos analisar esses pontos:

Ajustando o cálculo de percentual com votos inválidos

No seu código, se o usuário digitar um número que não está entre 1 e 6 (como o -1 ou o 8 que apareceram no seu teste), o programa exibe Voto inválido..

Porém, o laço for está fixo para rodar exatamente 20 vezes (range(0, 20)). Quando ocorre um voto inválido, ele gasta uma das 20 rodadas, mas não soma esse voto em nenhuma categoria. No final, o cálculo do percentual continua dividindo por 20固定:

print(f'Percentual de votos nulos: {(votos_nulos / 20 * 100)}')

Se houverem votos inválidos, o total de votos válidos, nulos e brancos somados não será 20. Para tornar o seu programa mais robusto e imune a erros de digitação, podemos criar uma variável para contar apenas os votos totais confirmados ou usar um laço while que só avança quando um voto correto for computado.

Sugestão de Melhoria Prática

Podemos trocar o número fixo 20 por uma variável que armazena o total de votos válidos e nulos preenchidos, ou simplesmente somar todos os votos computados para fazer o cálculo. Veja esta ideia de implementação:

votos_candidato1 = 0
votos_candidato2 = 0
votos_candidato3 = 0
votos_candidato4 = 0
votos_nulos = 0
votos_branco = 0

# Criamos uma variável para controlar o total de votos computados com sucesso
votos_totais = 0

print("Digite os votos (1 a 4 para candidatos, 5 para nulo, 6 para branco):")

# Usando o while garantimos que coletamos exatamente 20 votos válidos/nulos/brancos
while votos_totais < 20:
    voto = int(input(f'Informe o voto número {votos_totais + 1}: '))
    
    if voto == 1:
        votos_candidato1 += 1
        votos_totais += 1
    elif voto == 2:
        votos_candidato2 += 1
        votos_totais += 1
    elif voto == 3:
        votos_candidato3 += 1
        votos_totais += 1
    elif voto == 4:
        votos_candidato4 += 1
        votos_totais += 1
    elif voto == 5:
        votos_nulos += 1
        votos_totais += 1
    elif voto == 6:
        votos_branco += 1
        votos_totais += 1
    else:
        print('Voto inválido. Por favor, digite uma opção de 1 a 6.')

print('-' * 30)
print(f'Votos candidato 1: {votos_candidato1}')
print(f'Votos candidato 2: {votos_candidato2}')
print(f'Votos candidato 3: {votos_candidato3}')
print(f'Votos candidato 4: {votos_candidato4}')
print(f'Votos nulos: {votos_nulos}')
print(f'Votos em branco: {votos_branco}')

# Agora a divisão é feita pelo total real de votos computados
percentual_nulos = (votos_nulos / votos_totais) * 100
percentual_branco = (votos_branco / votos_totais) * 100

print(f'Percentual de votos nulos: {percentual_nulos:.2f}%')
print(f'Percentual de votos em branco: {percentual_branco:.2f}%')
  • O uso do :.2f}% no final serve para formatar o número flutuante, mostrando apenas duas casas decimais após a vírgula, o que deixa o relatório final com uma visualização bem mais limpa.

Notou também que na string de fechamento do seu código original continha um ponto e vírgula em Votos em branco;? É um detalhe simples de digitação, mas que vale a pena corrigir para manter a saída uniforme.

Você está demonstrando uma evolução excelente na construção de algoritmos. Continue praticando e explorando essas variações.

Espero que possa ter lhe ajudado!

Olá Evendro!

Estarei fazendo a correção para que o meu código fique mais dinâmico.

Obrigado pelo seu feedback!