Como puedo tener todas las combinaciones de letras?

Iniciado por Pregma Sogma, 24 Enero 2017, 00:05 AM

0 Miembros y 1 Visitante están viendo este tema.

Pregma Sogma


Hola me gustarian que me ayuden porque quisiera hacer un programa en python que haga todas las combinaciones de letras del abcdario castellano A la Z y los numeros 0 al 9.

Pero lo que yo hago en python no me funciona y me gustaria tener ese programa que haga todas las combinaciones de letras y numeros.........gracias

engel lex

explica "todas las combinaciones" da 3 ejemplos a ver
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Yidu

No estaria de mas que revisaras el modulo itertools. No se tu nivel de programacion y pretender crear un algoritmo de este tipo sin usar modulos lo veo complicado.

Si quieres crear las combinaciones en grupos de tres, por ejemplo, sera asi:

Código (python) [Seleccionar]
from itertools import combinations
numeros = range(0, 10)
for x in combinations(numeros, 3):
print(x)


Salida:

(0, 1, 2)
(0, 1, 3)
(0, 1, 4)
(0, 1, 5)
(0, 1, 6)
(0, 1, 7)
(0, 1, 8)
(0, 1, 9)
(0, 2, 3)
(0, 2, 4)
(0, 2, 5)
(0, 2, 6)
(0, 2, 7)
(0, 2, 8)
(0, 2, 9)
(0, 3, 4)
(0, 3, 5)
(0, 3, 6)
(0, 3, 7)
(0, 3, 8)
(0, 3, 9)
(0, 4, 5)
(0, 4, 6)
(0, 4, 7)
(0, 4, 8)
(0, 4, 9)
(0, 5, 6)
(0, 5, 7)
(0, 5, 8)
(0, 5, 9)
(0, 6, 7)
(0, 6, 8)
(0, 6, 9)
(0, 7, 8)
(0, 7, 9)
(0, 8, 9)
(1, 2, 3)
(1, 2, 4)
(1, 2, 5)
(1, 2, 6)
(1, 2, 7)
(1, 2, 8)
(1, 2, 9)
(1, 3, 4)
(1, 3, 5)
(1, 3, 6)
(1, 3, 7)
(1, 3, 8)
(1, 3, 9)
(1, 4, 5)
(1, 4, 6)
(1, 4, 7)
(1, 4, 8)
(1, 4, 9)
(1, 5, 6)
(1, 5, 7)
(1, 5, 8)
(1, 5, 9)
(1, 6, 7)
(1, 6, 8)
(1, 6, 9)
(1, 7, 8)
(1, 7, 9)
(1, 8, 9)
(2, 3, 4)
(2, 3, 5)
(2, 3, 6)
(2, 3, 7)
(2, 3, 8)
(2, 3, 9)
(2, 4, 5)
(2, 4, 6)
(2, 4, 7)
(2, 4, 8)
(2, 4, 9)
(2, 5, 6)
(2, 5, 7)
(2, 5, 8)
(2, 5, 9)
(2, 6, 7)
(2, 6, 8)
(2, 6, 9)
(2, 7, 8)
(2, 7, 9)
(2, 8, 9)
(3, 4, 5)
(3, 4, 6)
(3, 4, 7)
(3, 4, 8)
(3, 4, 9)
(3, 5, 6)
(3, 5, 7)
(3, 5, 8)
(3, 5, 9)
(3, 6, 7)
(3, 6, 8)
(3, 6, 9)
(3, 7, 8)
(3, 7, 9)
(3, 8, 9)
(4, 5, 6)
(4, 5, 7)
(4, 5, 8)
(4, 5, 9)
(4, 6, 7)
(4, 6, 8)
(4, 6, 9)
(4, 7, 8)
(4, 7, 9)
(4, 8, 9)
(5, 6, 7)
(5, 6, 8)
(5, 6, 9)
(5, 7, 8)
(5, 7, 9)
(5, 8, 9)
(6, 7, 8)
(6, 7, 9)
(6, 8, 9)
(7, 8, 9)

Aunque debes tener cuidado de cuantos grupos de numeros quieres las combinacion. Ya que podria tardar bastante el proceso. Y con la letras es parecido. De todas formas no se si confundes permutaciones con combinaciones.
Deberias, entonces, cambiar el codigo asi:

Código (python) [Seleccionar]
from itertools import permutations
numeros = range(0, 10)
for x in permutations(numeros, 3):
print(x)



explorer

A mi me salen muchas combinaciones...

$ perl6 -e 'my @a = ("A".."Z", 0..9).flat; say (@a X @a X @a).elems'
46656

Yidu

Cita de: explorer en 28 Enero 2017, 18:04 PM
A mi me salen muchas combinaciones...

$ perl6 -e 'my @a = ("A".."Z", 0..9).flat; say (@a X @a X @a).elems'
46656


Bueno...a eso se le llama explosion combinatoria. Dependiendo el conjunto de numeros o letras que queramos combinar, el asunto se hace inabordable. Incluso si queremos almacenar dichas combinaciones en algun fichero. Creo que no tardaria mucho en llenarse el disco duro.

En el ejemplo que puse con 10 numeros en grupos de 3 salen 120 combinaciones.

Pregma Sogma

Yidu el codigo que me diste me funciono muy bien pero...hay alguna manera de cambiar la cantidad de numeros que podrian haber en un grupo por ejemplo:
Que cuando el programa genere una combinacion de numeros y letras en un grupo y termine agregue otron digito osea:
A
B
C
D
...
X
Y
Z
1
2
3
4
...
9
Y que cuando termine de hacer todas las combinaciones le agregue un 2 a la cantidad de digitos en un grupo...entonces:
AA
AB
AC
AD
...
AX
AY
AZ
A1
A2
A3
...
A9
Y Luego seria:
BA
BB
BC
BD
...
BX
BY
BZ
...
Etc.. Osea que cada vez que termine agregue otro digito al grupo y que haya un if que pare el programa en ZZZ9....espero tu respuesta

engel lex

#6
un for y en lugar del 3, la variable del for...

estás claro que si usas 7 digitos o más, tardará dias y si los guardas, llenarás tu discoduro verdad?

ten en cuenta que la formula de cantidad de combinaciones es

charsetcantidad digitos

charset = (la cantidad de elementos a usar, si son letras de "A" a la "Z" son 26)

así que 7 digitos son 8.031.810.176 combinaciones a 8 bytes por cada una... son 59Gb

generar letras continuas nunca es buena idea para nada...


es decir, que quieres hacer con esto?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Yidu

Yo soy de la misma idea que engel lex. Lo suyo es saber bien que quieres hacer y profundizar mas en el tema de los bucles e iteradores. La gracia y morbo de la programacion, es crearte pequeños retos para luego superarlos. Y creeme, es mas gratificante. Si te dan el codigo hecho no crearas esos mecanismos propios para la resolucion de problemas. Aunque yo tambien, a veces, he preguntado cosas en los foros. Y cuando me han dado la solucion, no tiene tanta gracia que cuando uno la consigue por si mismo. Pero claro, un pequeña ayuda siempre es necesaria.

Te pongo un enlace dondo tocan estos temas. Sobre el modulo itertools. Por cierto, mirate bien dicho blog que es oro puro sobre python. Casi, una guia de referencia.

http://python-para-impacientes.blogspot.com.es/2015/08/bucles-eficientes-con-itertools.html