Foros del Web » Programando para Internet » Python »

Concatenar numeros

Estas en el tema de Concatenar numeros en el foro de Python en Foros del Web. Tengo un problema al momento de hacer una función donde entre un numero entre 1 y 4, donde ele caso e que entre 1 me ...
  #1 (permalink)  
Antiguo 11/01/2013, 10:20
Avatar de camilo1012  
Fecha de Ingreso: febrero-2011
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 1
Exclamación Concatenar numeros

Tengo un problema al momento de hacer una función donde entre un numero entre 1 y 4, donde ele caso e que entre 1 me arroje un numero de un dígito, en caso de entre 2 me arroje un numero de dos dígitos y así sucesivamente hasta llegar al 4.... el código es el siguiente:

Código Python:
Ver original
  1. def azar(x):
  2.     if x==1:
  3.         ra1=random.randint(1,9)
  4.         return ra1
  5.     elif x==2:
  6.         rb1=random.randint(1,9)
  7.         rb2=random.randint(1,9)
  8.         return int(rb1,rb2)
  9.     elif x==3:
  10.         rc1=random.randint(1,9)
  11.         rc2=random.randint(1,9)
  12.         rc3=random.randint(1,9)
  13.         return int(rc1,rc2,rc3)
  14.     elif x==4:
  15.         rd1=random.randint(1,9)
  16.         rd2=random.randint(1,9)
  17.         rd3=random.randint(1,9)
  18.         rd4=random.randint(1,9)
  19.         return rd1,rd2,rd3,rd4


mi duda es como concatenar los resultados en los return
  #2 (permalink)  
Antiguo 11/01/2013, 10:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Concatenar numeros

Por que no simplemente cambiar los rangos?

Código Python:
Ver original
  1. def azar(x):
  2.     if x==1:
  3.         return random.randint(0, 9)
  4.     elif x==2:
  5.         return random.randint(10, 99)
  6.     elif x==3:
  7.         return random.randint(100, 999)
  8.     elif x==4:
  9.         return random.randint(1000, 9999)
  #3 (permalink)  
Antiguo 14/01/2013, 07:28
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Concatenar numeros

Otra posibilidad, quizás no tan clara e incluso quizás no tan eficiente, pero vale la pena pensarlo:

Código Python:
Ver original
  1. def azar(x):
  2.     return int(random.random() * (10 ** x))


Saludos.
  #4 (permalink)  
Antiguo 14/01/2013, 12:17
 
Fecha de Ingreso: enero-2013
Ubicación: 127.0.0.1
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 6
Respuesta: Concatenar numeros

Una alternativa es:

Código Python:
Ver original
  1. from random import randint
  2.  
  3. def azar(x):
  4.     rand = {1: randint(0,9),
  5.             2: randint(10, 99),
  6.             3: randint(100, 999),
  7.             4: randint(1000,9999)}
  8.  
  9.     return rand[x]
  #5 (permalink)  
Antiguo 14/01/2013, 19:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Concatenar numeros

Cita:
Iniciado por AlvaroG Ver Mensaje
Otra posibilidad, quizás no tan clara e incluso quizás no tan eficiente, pero vale la pena pensarlo:

Código Python:
Ver original
  1. def azar(x):
  2.     return int(random.random() * (10 ** x))
Saludos.
Alvaro, lo probé y me di cuenta que no siempre funciona. Esto es por que puede random.random() puede regresar 0.06535 (por ejemplo) y si llamas a azar(4) obtienes 653 y por eso no siempre funciona.
  #6 (permalink)  
Antiguo 14/01/2013, 19:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Concatenar numeros

Cita:
Iniciado por yograterol Ver Mensaje
Una alternativa es:

Código Python:
Ver original
  1. from random import randint
  2.  
  3. def azar(x):
  4.     rand = {1: randint(0,9),
  5.             2: randint(10, 99),
  6.             3: randint(100, 999),
  7.             4: randint(1000,9999)}
  8.  
  9.     return rand[x]
Tampoco creo que sea otra alternativa. Por que los números aleatorios solo son generados una vez.

Ejemplo: No importa cuantas veces llames a azar(4) la respuesta siempre sera la misma.


Edito: No del todo cierto, dado que ese diccionario esta dentro de una función es calculado cada vez que entra a la función, por cual pueden ignorar todo lo de arriba. Si el diccionario fuera generado fuera de la función una sola vez entonces lo anterior seria valido.

Última edición por razpeitia; 14/01/2013 a las 23:38
  #7 (permalink)  
Antiguo 14/01/2013, 23:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Concatenar numeros

Solución no tan eficiente, pero al menos es generalizada para x >= 1

Código Python:
Ver original
  1. from random import randint
  2. def azar(x):
  3.     return randint(10 ** (x - 1) - (x == 1), (10 ** x) - 1)
  #8 (permalink)  
Antiguo 15/01/2013, 07:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Concatenar numeros

Cita:
Iniciado por razpeitia Ver Mensaje
Alvaro, lo probé y me di cuenta que no siempre funciona. Esto es por que puede random.random() puede regresar 0.06535 (por ejemplo) y si llamas a azar(4) obtienes 653 y por eso no siempre funciona.
Cierto, no me había dado cuenta de eso. Si acaso el ejemplo sirve, entonces, para generar números aleatorios entre 0 y 10**x (algo es algo )

Tu último ejemplo me gusta, aunque la conversión implícita entre booleano y entero requiere algo más de comprensión de lo que debería ser necesario para un ejemplo como este, dudo que esa forma de resolver el problema de 10**0 se me hubiera ocurrido

Saludos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:04.