1
resposta

[Dúvida] Aplicação WHILE vs FOR

Como exercício de desafio / fixação, tentei criar um código em Python que permitisse que o usuário entrasse com um número e o sistema respondesse se esse número é primo ou não.

A melhor solução que encotrei foi o uso do WHILE
Porém, **gostaria da ajuda de vocês para compreender de o FOR .. IN poderia ser usado nesse contexto. **

Meu código / solução atual:

numero = int(input('Qual número quer testar?'))
n=2  # Inicio no 2, porque todos os números são divisíveis por 1

while n < numero:     # O bloco ocorre entre 2 e o número escolhido.
  teste = numero % n  # Buscamos o "resto" da divisão

  if teste == 0:      # Se o "resto" é igual a zero, achamos um divisor e o número não é primo
    print (f'Número não é primo. Divisor {n} gera resto igual a {teste}')
    break             # paro de chamar o código quando encontramos o primeiro divisor, para não sobrecarregar o sistema

  n +=1  

if teste > 0:
  
  print ('Número é primo')

print ('\n --- \n Fim')
1 resposta

Olá, Thaliane! Como vai?

Excelente iniciativa de praticar com números primos! Essa é uma das melhores formas de entender como o computador "pensa".

Sua solução com while está logicamente correta e muito bem explicada. Para responder sua dúvida: sim, o for .. in não só pode ser usado, como é a escolha mais comum (e "Pythônica") para esse cenário.


A diferença fundamental entre eles

  • while: É usado quando não sabemos exatamente quantas vezes o código vai rodar (dependemos de uma condição que pode mudar a qualquer momento).
  • for .. in: É usado quando sabemos exatamente o intervalo de elementos que queremos percorrer.

No caso dos números primos, como você já definiu que o teste ocorre entre o número 2 e o número escolhido, o intervalo é conhecido. É aí que entra a função range().


Refatorando seu código para for

Veja como o código fica mais limpo, pois o for já cuida de iniciar a variável e incrementá-la (n += 1) automaticamente:

numero = int(input('Qual número quer testar? '))
e_primo = True # Assumimos que é primo até provar o contrário

for n in range(2, numero):
    if numero % n == 0:
        print(f'Número não é primo. Divisor {n} gera resto 0.')
        e_primo = False
        break # Encontrou um divisor? Para tudo!

if e_primo and numero > 1:
    print('Número é primo')
else:
    if numero <= 1:
        print('Números menores ou iguais a 1 não são primos.')

print('\n --- \n Fim')

Por que usar o for aqui?

  1. Menos código: Você não precisa criar o n = 2 fora do laço nem o n += 1 no final.
  2. Segurança: No while, se esquecermos o n += 1, o programa entra em "loop infinito". No for, o range garante que o ciclo terá um fim.
  3. Legibilidade: Para quem lê seu código, o for n in range(2, numero) diz imediatamente: "estou testando todos os números deste pedaço".

Dica de Performance para Coordenadores

Se você testar um número muito grande (como 1.000.001), o for levará tempo. Uma curiosidade matemática: você não precisa testar até o número final. Se você testar apenas até a raiz quadrada do número, você já consegue afirmar se ele é primo ou não!

$$limite = \sqrt{numero}$$

Isso economiza milhares de processamentos em bases de dados gigantes.

Ficou clara a substituição do contador manual do while pelo intervalo automático do for? Se você tentar aplicar isso em outro exercício e travar, é só me chamar!