Ir al contenido principal

Quiéres estos diseños en tu ropa o en diferentes productos?

Publicidad

Cómo crear dados con python

Python es un lenguaje de programación que permite crear códigos de manera muy eficiente y rápida. Todo esto gracias a su gran cantidad de modulos internos que facilitan mucho el proceso.

Para crear una función que nos permita simular el lanzamiento de dados necesitamos obviamente un módulo que se encargue de retornar números al azar. En Python, el módulo es Random.

import random

Random es un modulo con una gran cantidad de funciones que administran el "azar". Usándolo se puede obtener números dentro de un rango o seleccionar directamente un valor dentro de una lista. Esta última es la que en este caso será usada para crear los dados.

Lo que esparamos que haga el código es que devuelva números al igual que lo haría si lanzaramos dados. Cuando lanzamos los dados en el mundo real, agarramos la cantidad y el tipo de dados que queremos lanzar. Por ejemplo, tomamos 2 dados de 6 caras.

Luego de seleccionarlos, obviamente los lanzamos y obtenemos los valores individuales que luego podríamos sumar, descartar alguno (el más bajos o alto), etc.

Bien, entonces siguiendo ese mismo proceso, se puede crear la función. Le damos un nombre a la clase para crear los dados:

class crear_dado:

Evidentemente, se le puede dar cualquier nombre. Cuando tomamos los dados en el mundo real, seleccionamos la cantidad (a) y el tipo de dados (b), como ya sabemos. Para describir esto, usaremos la notación usual que se aplica a los lanzamientos de dados: NdX. N es la cantidad de dados que se usaran, d indica que el siguiente número, X, asigna la cantidad de lados que tiene el dado. Si queremos lanzar 6 dados de 6 caras, la notación sería: "6d6", una cadena de caracteres.

Asi que, al crear el objeto o la instancia de la clase, necesitamos hacer lo mismo. Para eso, en la función constructora añadimos los parámetros que le darán forma a los dados que arrojaremos:


def __init__(self,notacion):
	#a=numero de dados; b=numero de lados
	self.n = 0
	self.sides = []
	a, b, switch = "","", False

Al crear los dados con Python, se usará la notación NdX. Por ejemplo:

dados = crear_dado("2d6")

El código debe ser capaz de leer el texto y separar el número de dado del número de caras. Se usa una variable llamada switch con valor "booleano" para saber cuando pasar de uno a otro. Además, usando el número de lados se genera una lista de números con los valores desde el 1 hasta el número asignado en la notación.


        for x in notacion:
            if x == "d":
                if a == "": a="1"
                switch = True
                continue
            if switch == False:
                a += x
            else:
                b += x
        if b:
            for x in range(1,int(b)+1):
                self.sides.append(x)
            self.n = int(a)
        else:
            self.sides.append(a)
            self.n = 1

En este punto, la clase es capaz de leer la notación y asignar los dos valores a las variables "a" (para el numero de dados) y "b" (para el número de lados). Ahora necesitamos crear el método que se encargará de lanzar los dados usando estos dos valores.

Este método debe retornar un valor númerico (si se asigna un solo dado) o una lista de valores (si hay más de un solo dado) seleccionandolo al azar de la lista generada a partir del número de lados, es decir, un número del 1 hasta el número de lados asignados.


	def roll(self):
    	results = []
        for x in range(0,self.n):
			results.append( random.choice(self.sides) )
		if len(results) == 1:
			return results[0]
		else:
			return results

Y así, completamos la clase que se usará para la creación de los dados:


import random

class crear_dado:
    def __init__(self,notacion):
        #a=numero de dados; b=numero de lados
        self.n = 0
        self.sides = []
        a, b, switch = "","", False
        for x in notacion:
            if x == "d":
                if a == "": a="1"
                switch = True
                continue
            if switch == False:
                a += x
            else:
                b += x
        if b:
            for x in range(1,int(b)+1):
                self.sides.append(x)
            self.n = int(a)
        else:
            self.sides.append(a)
            self.n = 1
    def roll(self):
        results = []
        for x in range(0,self.n):
            results.append( random.choice(self.sides) )
        if len(results) == 1:
            return results[0] # array
        else:
            return results

Como ya vimos, para crear una instancia de la clase se usa:

dados = crear_dado("2d6")

Y se lanzan los dados usando el método roll():

dados.roll()

Este es un simple código para crear un lanzador de dados con Python. Bastante sencillo y funcional que sirve tal vez en juegos o aplicaciones que involucren el uso de dados o simplemente para lanzar dados por diversión.

Comentarios