Código de Python - Generar particiones de un número (suma de otros números)

Imágen de perfil
Val: 1.126
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Generar particiones de un número (suma de otros números)gráfica de visualizaciones


Python

Publicado el 8 de Marzo del 2017 por Kip (28 códigos)
3.325 visualizaciones desde el 8 de Marzo del 2017
Clase que ayuda a generar as particiones de un numero es decir que a partir de un numero se generan las combinaciones de posibles números cuya suma entre si es el total del numero dado.

Su uso es simple:

Instanciamos la clase enviandole como parametro el numero del cual se hara la particion

1
particiones = NParticiones(5)

Luego tenemos dos opciones en la clase para obtener los resultados:

Acceder a la propiedad particiones que es una lista de todas las particiones del numero

1
print particiones.particiones

Aquella propiedad mencionada anteriormente tendría una estructura como la siguiente:

1
[[4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1], [1, 1, 1, 1, 1]]

Llamar al metodo print_particiones(), aquel metodo se encargara de imprimir por pantalla lo siguiente:

1
particiones.print_particiones()

Mostrara:

1
2
3
4
5
6
5 = 4 + 1
5 = 3 + 2
5 = 3 + 1 + 1
5 = 2 + 2 + 1
5 = 2 + 1 + 1 + 1
5 = 1 + 1 + 1 + 1 + 1

Requerimientos

Python 2.X
Python 3.X

1.0
estrellaestrellaestrellaestrellaestrella(3)

Actualizado el 7 de Julio del 2017 (Publicado el 8 de Marzo del 2017)gráfica de visualizaciones de la versión: 1.0
3.326 visualizaciones desde el 8 de Marzo del 2017
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
class NParticiones:
 
    particiones = []
 
    def __init__(self, num):
        self.num = num
        self.particiones = self.__gen_particiones(self.num)
        self.__order_particiones()
 
    def print_particiones(self):
        string_particiones = ''
        for serie in self.particiones:
            string_particiones += str(self.num) + ' = ' + ' + '.join([str(num) for num in serie]) + '\n'
        print (string_particiones)
 
    def __order_particiones(self):
        order_particiones = []
        for serie in self.__gen_particiones(self.num):
            order_particiones.append(sorted(serie, reverse=True))
        self.particiones = order_particiones
 
    def __gen_particiones(self, num, limit = False):
        if limit == False: limit = num
        if num == 1:
            yield [1]
        elif num < 1:
            yield []
        else:
            for x in range(min(num, limit), 0, -1):
                if self.num == x: continue
                for i in self.__gen_particiones(num - x, x):
                    i.append(x)
                    yield i



Comentarios sobre la versión: 1.0 (3)

4 de Julio del 2017
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
Mauricio
13 de Abril del 2020
estrellaestrellaestrellaestrellaestrella
Amigo ahora si quisiera mostrar solo 3 operandos, nooo todos los posibles operadores que den la suma total al numero introducido, esta vez solo 3 operandos que den todas las sumas posibles, como lo puedo hacer???
Responder
Mauricio
13 de Abril del 2020
estrellaestrellaestrellaestrellaestrella
Espero una respuesta tuya amigo, pronto gracias.
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3897