[Python] En que falla mi script?

Iniciado por .:UND3R:., 6 Noviembre 2015, 23:48 PM

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

.:UND3R:.

Código (python) [Seleccionar]
import itertools
res = itertools.product('abcdefghijklmnopqrstuvwxyz', repeat=2) # 2 is the length of your result.
res2 = itertools.product('0123456789', repeat=4) # 4 is the length of your result.

for i in res:
varA = ''.join(i)
for x in res2:
varB = ''.join(x)
print varA + varB


Mi intención es que imprima
Citaraa0000
aa0001
....
..
ww9999

pero no logro que funcione, sospecho que el problema es el for o algo así, pues al momento de imprimir ambos separados, me muestran:
Citaraa
...
ww

y el otro
Citar0000
...
9999

ayuda y gracias :D

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Once

No es necesario complicarse tanto, recuerda que las cadenas comparten algunas propiedades con las listas y las tuplas:

Código (python) [Seleccionar]
letras = 'abcdefghijklmnopqrstuvwxyz'
numeros = '0123456789'

for letra in letras:
   for numero in numeros:
       print (letra * 2 ) + (numero * 4)


Saludos!

tincopasan

#2
Und3r: perdón pero no entiendo, como querés imprimir
así sale:

¿a qué te referís con imprimir separados?

Edito: me olvidé soy rejeropa!

11sep: tu script no tendría el mismo resultado, ya que la salida sería:
aa0000
aa1111
aa2222

Once

#3
Iba a editar mi comentario, ya que no había notado que lo quieres hacer es generar todas las combinaciones (imagino para un diccionario) pero como respondieron hago uno nuevo.

El código está bien, lo que no estás considerando es que itertools te está devolviendo un generador y los generadores se agotan apenas llegan al final. Así cuando recorres el primer elemento de res obtienes "aa" pero en el bucle interior agotas el generador res2. cuando llegas al segundo elemento de res ya no te quedan elementos en res2 así que no se entra al segundo for y no te imprime nada más (aunque el primer busle sí itera todo res).

Por ahora sólo se me ocurre que conviertas el generador res2 en una lista:

Código (python) [Seleccionar]

res2 = list(itertools.product('0......', repeat=4))


Aunque no es muy recomendable.

Edito I: O puedes generar cada vez, dentro del primer for a res2

Edito II: @tincopasan tienes razón, pensé que solo queria generar cada letra repetida dos veces y cada número cuatro (eso me pasa por leer rápido). Y lo que necesita es generar las permutaciones de longitud dos de las letras unidas a las permutaciones de longitud cuatro de los números.

Saludos!



.:UND3R:.

#4
Parece que no se entendió bien jaja, lo que quiero hacer en realidad es una especie de diccionario, tal como comenta 11Sep, la estructura puntual del diccionario es el siguiente

2 letras y 4 dígitos, quedando de esta forma:

CitarAZ0123
BA1999
etc.

Por eso mi idea era crear iteraciones para tener todas las combinaciones posibles:
CitarAA0000

hasta:

CitarWW9999




Cita de: tincopasan en  7 Noviembre 2015, 00:22 AM
Und3r: perdón pero no entiendo, como querés imprimir
así sale:

¿a qué te referís con imprimir separados?

Edito: me olvidé soy rejeropa!

11sep: tu script no tendría el mismo resultado, ya que la salida sería:
aa0000
aa1111
aa2222

arroja eso perfectamente, pero llega hasta aa9999 pero después debería comenzar con ab0000, pero no ocurre, ha de ser lo que dice 11Sep


Gracias por demostrar interés en querer ayudarme, me emociona mucho  ;-)

EDIT:

Creo que 11Sep me dio una pista, estoy corriendo esto a ver que arroja pero creo que funcionará:
Código (python) [Seleccionar]

import itertools
res = itertools.product('abcdefghijklmnopqrstuvwxyz', repeat=2) # 2 is the length of your result.

#for i in res:
# print ''.join(i)

for i in res:
varA = ''.join(i)
res2 = itertools.product('0123456789', repeat=4) # 4 is the length of your result.
for x in res2:
varB = ''.join(x)
print varA + varB

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Once

Cuentanos como te va, pero en teoría debe funcionar. Eso sí, ten en cuenta que la lista de letras va hasta la z así que lo más seguro (si itertools hace las permutaciones en orden) es que te llegue hasta zz9999 y no hasta ww9999

Saludos!

.:UND3R:.

Cita de: 11Sep en  7 Noviembre 2015, 01:14 AM
Cuentanos como te va, pero en teoría debe funcionar. Eso sí, ten en cuenta que la lista de letras va hasta la z así que lo más seguro (si itertools hace las permutaciones en orden) es que te llegue hasta zz9999 y no hasta ww9999

Saludos!

toda la razón, me equivoqué en escribir el hasta, pero funciona de maravilla, gracias por la ayuda  ;-)

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Masita

#7
Aunque ya resolviste tu problema, te dejo aqui otro script para que veas otras maneras de resolver el problema.

Código (python) [Seleccionar]
letras = 'abcdefghijklmnopqrstuvwxyz'

for i in letras:
   for j in letras:
       for z in range(10000):
           print i+j+str(z).zfill(4)


Con el metodo .zfill(numero de digitos) rellenamos con 0 a la izquierda hasta tener la cantidad de digitos que ingresamos.
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....