Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Exercício 7 - Opinião do instrutor

Escrevi meu código e bateu algumas coisas com a opinião do instrutor, porém estou com dificuldade de executar de uma maneira melhor. Entradas como 2, não dão o resultado, e entradas como 9 repetem que é número primo e uma delas que não é primo. Onde posso estar errando? código escrito com comentários sobre o exercício 7

2 respostas
solução!

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:

  1. 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.

  2. 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!

Olá,

Eu executei o seguinte código, que evita a repetição dos prints:

num = int(input('Insira um número inteiro não-negativo: '))
if num ==1 or num == 0 :
    print(f'{num} não é primo')
elif num == 2:
    print(f'{num} é primo')
else:    
    for i in range (2,num):
        if num%i == 0:
            print(f'{num} não é primo')
            break
        elif i == num - 1:
            print(f'{num} é primo')