Foros Python
random.choice() no es tan aletaorio - Versión para impresión

+- Foros Python (https://foro.recursospython.com)
+-- Foro: Desarrollo (https://foro.recursospython.com/forumdisplay.php?fid=1)
+--- Foro: General (https://foro.recursospython.com/forumdisplay.php?fid=9)
+--- Tema: random.choice() no es tan aletaorio (/showthread.php?tid=186)



random.choice() no es tan aletaorio - konniskatt - 20-08-2018

Pues el problema está en mi "juego" que hice con mi librería, viendo las coordenadas que se generan aleatoriamente para colocar objetos en la pantalla, muchas veces las mismas coordenadas se repiten más de 10 veces, lo que me lleva a pensar que random.choice() no es al parecer 100% aleatorio.
Me podrían decir una alternativa para hacer lo mismo que random.choice(), pero 100% aleatorio?
PD: No quiero ninguna dependencia no estándar extraña, solo librerías que vienen incluidas con Python.
Acá les dejo un fragmento del código donde está la funcion que se encarga de generar los objetos aleatorios anteriormente mencionados:

Código:
  1. def drawbox(): # generate random objects
  2.   x, y, xpos, ypos = [], [], [], []
  3.   a, b, c, d = 1, 1, 1, 1
  4.  
  5.   while a <= 55: # Generando la caja limitadora
  6.       gotoxy(a, 1)
  7.       puts("═")
  8.       a += 1
  9.  
  10.   while b <= 55:
  11.       gotoxy(b, 25)
  12.       puts("═")
  13.       b += 1
  14.  
  15.   while c <= 25:
  16.       gotoxy(1, c)
  17.       puts("║")
  18.       c += 1
  19.  
  20.   while d <= 25:
  21.       gotoxy(55, d)
  22.       puts("║")
  23.       d += 1
  24.  
  25.  
  26.   gotoxy(55, 1)
  27.   puts("╗")
  28.   gotoxy(55, 25)
  29.   puts("╝")
  30.   gotoxy(1, 1)
  31.   puts("╔")
  32.   gotoxy(1, 25)
  33.   puts("╚")
  34.  
  35.   for xi in range(2, 54): # Generando los objetos
  36.       x.append(xi)
  37.       for yi in range(2, 24):
  38.           y.append(yi)
  39.           random.seed(time.time()); epochext = time.time()
  40.  
  41.           xrand = random.choice(x)
  42.           yrand = random.choice(y)
  43.  
  44.           gotoxy(xrand, yrand)
  45.           textcolor(random.choice(colorlist))
  46.           puts("×")
  47.  
  48.           yield xrand, yrand

Gracias


RE: random.choice() no es tan aletaorio - Francisco - 21-08-2018

Algunas alternativas estándares son random.SystemRandom y el módulo secrets, especialmente para fines criptográficos.

  1. import random
  2. sr = random.SystemRandom()
  3. sr.choice(["a", "b", "c"])


  1. >>> import secrets
  2. >>> secrets.choice(["a", "b", "c"])


Saludos


RE: random.choice() no es tan aletaorio - konniskatt - 21-08-2018

(21-08-2018, 12:07 AM)Francisco escribió: Algunas alternativas estándares son random.SystemRandom y el módulo secrets, especialmente para fines criptográficos.

  1. import random
  2. sr = random.SystemRandom()
  3. sr.choice(["a", "b", "c"])


  1. >>> import secrets
  2. >>> secrets.choice(["a", "b", "c"])


Saludos
Gracias!