Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
random.choice() no es tan aletaorio
#1
Exclamation 
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:
[code]
def drawbox(): # generate random objects
  x, y, xpos, ypos = [], [], [], []
  a, b, c, d = 1, 1, 1, 1

  while a <= 55: # Generando la caja limitadora
      gotoxy(a, 1)
      puts("═")
      a += 1

  while b <= 55:
      gotoxy(b, 25)
      puts("═")
      b += 1

  while c <= 25:
      gotoxy(1, c)
      puts("║")
      c += 1

  while d <= 25:
      gotoxy(55, d)
      puts("║")
      d += 1


  gotoxy(55, 1)
  puts("╗")
  gotoxy(55, 25)
  puts("╝")
  gotoxy(1, 1)
  puts("╔")
  gotoxy(1, 25)
  puts("╚")

  for xi in range(2, 54): # Generando los objetos
      x.append(xi)
      for yi in range(2, 24):
          y.append(yi)
          random.seed(time.time()); epochext = time.time()

          xrand = random.choice(x)
          yrand = random.choice(y)

          gotoxy(xrand, yrand)
          textcolor(random.choice(colorlist))
          puts("×")

          yield xrand, yrand
[/code]

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

Código:
import random
sr = random.SystemRandom()
sr.choice(["a", "b", "c"])

Código:
>>> import secrets
>>> secrets.choice(["a", "b", "c"])

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(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.

Código:
import random
sr = random.SystemRandom()
sr.choice(["a", "b", "c"])

Código:
>>> import secrets
>>> secrets.choice(["a", "b", "c"])

Saludos
Gracias!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)