Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Pregma Sogma en 24 Enero 2017, 00:05 am



Título: Como puedo tener todas las combinaciones de letras?
Publicado por: Pregma Sogma en 24 Enero 2017, 00:05 am

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


Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: engel lex en 24 Enero 2017, 00:08 am
explica "todas las combinaciones" da 3 ejemplos a ver


Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: Yidu en 25 Enero 2017, 19:31 pm
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
  1. from itertools import combinations
  2. numeros = range(0, 10)
  3. for x in combinations(numeros, 3):
  4. print(x)
  5.  

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
  1. from itertools import permutations
  2. numeros = range(0, 10)
  3. for x in permutations(numeros, 3):
  4. print(x)
  5.  



Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: explorer en 28 Enero 2017, 18:04 pm
A mi me salen muchas combinaciones...

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


Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: Yidu en 29 Enero 2017, 11:39 am
A mi me salen muchas combinaciones...

Código:
$ 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.


Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: Pregma Sogma en 31 Enero 2017, 00:37 am
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


Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: engel lex en 31 Enero 2017, 00:43 am
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?


Título: Re: Como puedo tener todas las combinaciones de letras?
Publicado por: Yidu en 31 Enero 2017, 19:06 pm
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 (http://python-para-impacientes.blogspot.com.es/2015/08/bucles-eficientes-con-itertools.html)