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?
- Menos código: Você não precisa criar o
n = 2 fora do laço nem o n += 1 no final. - 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. - 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!