Olá Laís!
Analisando o código que você compartilhou, parece que o problema está na lógica utilizada para determinar se um número é primo ou não. Vamos entender o que está acontecendo:
Você está utilizando um laço for
para verificar se o número num
é divisível por algum número no intervalo de 2 até num - 1
. Isso está correto, pois um número primo é aquele que só é divisível por 1 e por ele mesmo.
O problema surge quando você utiliza o print
dentro do laço for
. Cada vez que o laço executa e não encontra um divisor, ele imprime que o número é primo. Isso não é correto, pois você só deve afirmar que o número é primo depois de verificar todos os possíveis divisores.
Para corrigir isso, você pode utilizar uma variável para marcar se o número é primo ou não. Aqui está uma sugestão de como modificar o seu código:
#pedindo o número
num = int(input('Coloque um número: '))
#se o número for positivo
if num > 1:
# variável para marcar se o número é primo
eh_primo = True
#começar a contagem do número 2 pois a divisão por 1 dá resto 0
for i in range(2, num):
#caso a divisão não deixe resto
if num % i == 0:
eh_primo = False
break # sai do laço, pois já encontrou um divisor
# verifica a flag para determinar se é primo ou não
if eh_primo:
print(f'{num} é um número primo')
else:
print(f'{num} não é um número primo')
#caso seja número negativo ou 1
else:
print(f'{num} não é um número primo')
Dessa forma, você só vai imprimir a mensagem uma vez, após verificar todos os possíveis divisores. Além disso, se um divisor for encontrado, a variável eh_primo
se tornará False
e o laço será interrompido com o break
, otimizando o seu código.
Espero que essa explicação ajude a resolver o problema que você estava enfrentando. Continue praticando e você vai ver como com o tempo essas lógicas se tornam mais intuitivas.
Espero ter ajudado e bons estudos!