Python - Reto en python

 
Vista:

Reto en python

Publicado por Marco (2 intervenciones) el 21/10/2020 08:29:42
Hola!
Recientemente me encontré con un reto de programación en python, pero no consigo dar con el resultado, por eso vengo a pedir ayuda, si alguien sabe como podría resolverlo me seria de mucha ayuda. el reto es:

Existe un numero entero positivo de 4 dígitos que presenta las siguientes características:

1. La suma de todos sus dígitos es 16.
2. El primero digito es un numero par.
3. El segundo digito es un numero primo.
4. El cuarto digito es la tercera parte del primer digito.

Debe organizar el algoritmo mediante funciones en donde cada una de ellas tenga una única responsabilidad.

el codigo que tengo de momento es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
## este esta bien
def sumarDigitos(pNum):
    total = 0
 
    while(pNum):
        suma = pNum%10
        pNum = pNum // 10
        total = total + suma
 
    if (total == 16):
        return True
    return False
 
 
 
# este es necesario porque se usa en extraer
def contarDigitos(pNum):
    contador = 0
 
    while(pNum != 0):
        pNum = pNum //10
        contador = contador +1
    else:
        return contador
 
 
# esta se va a usar en la funcion principal para extraer el digito que se necesite segun la instruccion
def extraer(posicion, pNum):
    posContador = contarDigitos(pNum)
 
    while (pNum != 0):
        if (posContador == posicion):
            return pNum % 10
        pNum == pNum//10
        posContador = posContador-1
    return "Posicion no valida"
 
 
 
 
###########aqui ocupamos determinar la posicion 1 del numero para usarlo en la def de esPar
###########tambien la posicion 2 para saber si esPrimo
###########la posicion 4 para saber si es = a la tercera parte del digito 1
 
 
 
#estas 3 funciones las necesitamos en la funcion principal
def esPar(pNum):
    if(pNum % 2 == 0 ):
        return True
    return False
 
 
 
def esPrimo(pNum2):
    divisorInicial = 2
 
    while (divisorInicial < pNum2):
        if (pNum2 % divisorInicial == 0 ):
            return False
        return True
 
 
 
def terceraParte(pNum):
    while (pNum<pNum):
        if (pNum == pNum//3):
            return True
        return False
 
 
 
####ALGORITMO PRINCIPAL###
 
 
 
def acertijo():
    pNum = 1000
 
    while (pNum <= 9999):
 
        if((sumarDigitos(pNum)==True) and (extraer(1, pNum)%2 == 0) and (extraer (2, pNum) and ((extraer(4, pNum ))== (extraer(1, pNum)//3))):
            return pNum
 
        pNum = pNum + 1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Reto en python

Publicado por algoritmo (245 intervenciones) el 21/10/2020 10:40:24
Hola

Espero que te sirva. He cambiado algunas cosas :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
def sumarDigitos(pNum):
    total = 0
 
    while(pNum):
        suma = pNum%10
        pNum = pNum // 10
        total = total + suma
 
    if (total == 16):
        return True
    return False
 
 
 
# este es necesario porque se usa en extraer
def contarDigitos(pNum):
    contador = 0
 
    while(pNum != 0):
        pNum = pNum //10
        contador = contador +1
    else:
        return contador
 
 
# esta se va a usar en la funcion principal para extraer el digito que se necesite segun la instruccion
def extraer(posicion, pNum):
    texto = str(pNum)
    try:
        return int(texto[posicion-1])
    except:
        return 'Posicion no valida'
 
 
###########aqui ocupamos determinar la posicion 1 del numero para usarlo en la def de esPar
###########tambien la posicion 2 para saber si esPrimo
###########la posicion 4 para saber si es = a la tercera parte del digito 1
 
 
 
#estas 3 funciones las necesitamos en la funcion principal
def esPar(pNum):
    if(pNum % 2 == 0 ):
        return True
    return False
 
def esPrimo(pNum2):
    return pNum2 in [1, 2, 3, 5, 7]
 
def terceraParte(pNum):
    return pNum/3.0
 
####ALGORITMO PRINCIPAL###
 
 
 
def acertijo():
    pNum = 1000
 
    while (pNum <= 9999):
 
        if(sumarDigitos(pNum)==True and
           extraer(1, pNum)%2 == 0 and
           esPrimo(extraer(2, pNum)) and
           extraer(4, pNum ) == terceraParte(extraer(1, pNum))):
            print(pNum)
 
        pNum = pNum + 1
 
acertijo()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar