Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ayuda, mi contador no va de 1 en 1
#1
Estimados, recurro nuevamente a ustedes.
Estoy tratando de resolver un problema en un ejercicio que consta de dos partes.
La primera es ver si cumple con la condicion de ser pandigital, es decir, si cuenta con los numeros del 0 al 9.
Hasta ahi no hay problema.
La segunda parte es ver si los ultimos 3 digitos componen un numero primo.
El asunto aqui es que hago el contador para probar dividirlo y el contador aumenta en forma exponencial y no 1 + 1.
Copio y pego lo que he hecho a ver si alguien detecta mi error.

# pandigital - contiene todos los numeros del 0 al 9 *- 0123456789 -*
# ver si n es pandigital, y si sus ultimas 3 cifras con primos


def panprimo(n):
    # a parir de aca validar si es pandigital
    numero = str(n)
    if len(numero) < 10:
        pandigital = False
    else:
        lista = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
        for x in numero:
            if x in lista:
                lista.remove(x)
        if len(lista) == 0:
            pandigital = True
        else:
            pandigital = False
    print("Pandigital ", pandigital)
    numpri = n%1000
    i = 2
    print(numpri)
    while i<= numpri:
        if (numpri % i) == 0:
            print ("i vale ", i)
            primo = False
        else:
            primo = True
        i+=1
    print("primo ", primo)
    if pandigital and primo is True:
        return True
    else:
        return False
print(panprimo(12340567894))


a continuacion pego lo que arrojan los print

Pandigital  True
894

i vale  2

i vale  3

i vale  6

i vale  149

i vale  298

i vale  447

i vale  894

primo  False
False



Desde ya muchas gracias!!!!!
Responder
#2
Hola, Alex.

La variable i del bucle aumenta correctamente de 1 en 1. El problema es que el print() al cual hacés referencia está dentro de un condicional:

  1. if (numpri % i) == 0:
  2. print ("i vale ", i)


De modo que solo estás imprimiendo el valor de i cuando numpri % i == 0.

Saludos
Responder
#3
Hola denuevo Francisco.
Bueno, tuve en cuenta lo que me indicaste, y además note que al comprobar si el numero era divisible entre algún valor de 'i' no me salia del bucle, seguía buscando otros valores y finalmente salía del bucle con un valor erróneo en el resultado.
Esto lo solucione aplicando el 'break' que me sugeriste en la otra consulta, lo puse al comprobar que 'numpri' es divisible entre algun valor de 'i'.
Denuevo mil gracias.
Saludos!!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)