Los diccionarios o matrices asociativas, como también son llamados, deben su nombre a que son colecciones que relaciona una clave y un valor.
Para ejemplificar un poco lo anterior quiero compartirles un ejercicio que he realizado mientras desarrollaba el curso de Python en Platzi.
Bueno, para empezar he definido 3 funciones que realizan tareas sencillas como obtener el factorial de un número. Para entenderlo mejor, debemos entender que un factorial representa un producto de una serie de números enteros secuenciales y su fórmula matemática sería:
z! = z(z-1)(z-2)(z-3)(z-n…)
5! = 5(5-1)(5-2)(5-3)(5-4) ⇒ 54321 = 120
Ahora bien, en código definimos una función a la cual he llamado factorial de la siguiente manera:
deffactorial():
posteriormente pedimos al usuario que ingrese un número con el que realizaremos la operación y lo almacenamos en una variable la cual llamaremos factor :
deffactorial():
factor = input(“Ingresa el valor\n”)
Teniendo en cuenta que lo que ingresará el usuario es un número utilizamos la función input, también se podría escribir int(input(“Ingresa el valor\n”) para garantizar que el número sea un entero.
Seguido creamos una variable, esta funcionará como un acumulador y la inicializamos en 1.
deffactorial():""" Factorial """
factor = input(“Ingresa el valor\n”)
number = factor
acom = 1
Por último creamos un ciclo while.
deffactorial():""" Factorial """
factor = input(“Ingresa el valor\n”)
number = factor
acom = 1while factor > 0:
acom *= factor
factor -= 1print “>>> El factorial de {} es : {}”.format(number, acom)
Nuestro ciclo evalúa que el número que el usuario escriba sea mayor que cero, si es verdadero multiplicamos nuestra variable acumuladora que contiene como valor el número uno por el factor que es el número que ingresa el usuario y luego factor se resta en uno.
Cabe recalcar que la variable number contiene solamente el valor factor que ingresó el usuario con el propósito de utilizarlo en la función format que utilizamos en el print, ya que si usamos la variable factor esta será cero porque a medida que realizamos el ciclo disminuye.
La segunda función una suma sucesiva a partir del número 1 bajo la ecuación n(n + 1)/2, por ejemplo:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
7(7 + 1)/2 = 28
esta función es bastante sencilla de entender por lo que avanzaré a la siguiente función.
La tercera función convierte un número decimal en un número binario.
defbinario():""" Convertir a binario """
num = input(“Escribe el valor que deseas convertir”)
number = num
binary = ‘ ’
while num // 2 != 0:
binary = str(num % 2) + binary
num = num // 2
result = str(num) + binary
print “>>> el número binario de { } es: { }”. format(number, result)
En esta función declaramos la variable num donde recibimos el valor ingresado por el usuario y binary donde ingresamos el valor binario. Posteriormente creamos un ciclo while donde evaluamos que la división entera del número ingresado por el usuario entre 2 no sea cero. Si nuestra condición es verdadera se obtiene el módulo del número que ingresó el usuario entre 2, este valor lo convertimos a una cadena con str() y lo concatenamos a la variable binary, luego el valor de num será el valor que ingreso el usuario dividido entre 2 este valor será el entero, esto se repite hasta que el ciclo sea Falso.
result recibe como valor el último cociente y lo convierte en una cadena y lo concatena a binary. Y por último imprimimos el resultado.
Para correr nuestras funciones creamos nuestro famoso
if __name__ == ‘__main__’:
posteriormente creamos lo siguiente:
end_up = False
option = ‘Escribe la opción que deseas’
menu = { ‘a’: factorial, ‘b’: sum_sucesiva, ‘c’: binario }
whilenot end_up:
print (‘=’) * len(option)
print(option)
print (‘=’) * len(option)
for opcion, functioninmenu.iteritems():
message = '{}) {}'.format(opcion, function.__doc__)
print(message)
value_answer = str(raw_input('\nOpción : ').lower())
end_up = value_answer == 'terminar'
tarea = menu.get(value_answer,None)
if tarea:
tarea()
else:
print("Hemos terminado nuestra tarea,\nHasta pronto")
end_up lo iniciamos con el valor False y otra variable option que invita al usuario a escoger las diferentes tareas que se pueden realizar, posteriormente creamos un diccionario que tiene como clave la a, la b y la c y respectivamente su valor son las funciones factorial, sum_sucesiva y binario. Nuestro diccionario tiene como valor funciones ya que en python todo son objetos y las funciones no se escapan.
Seguido tenemos un ciclo while que evalúa la variable end_up pero antepone el operador lógico not, cuando iniciamos la variable end_ up lo hicimos con el valor False al poner el operador not lo estaríamos negando y ahora es verdadero, por lo tanto diríamos mientras verdadero…
Dentro del ciclo imprimimos la variable option que contiene el mensaje para el usuario, un poco más abajo encontramos un nuevo ciclo que imprime las claves de nuestro diccionario y sus valores que en este caso son las funciones, sin embargo utilizamos el .doc que lo que hace es llamar la documentación que se encuentra en las funciones (Palabras que se encuentran comentadas con “”" “”").
También tenemos una variable value_answer, está contiene la opción que ha escogido el usuario, seguido esta de nuevo nuestra variable end_up que nos indica que si la respuesta del usuario es terminar se convierte en verdadera y Falsa en nuestro while por lo tanto terminará en ciclo, de no ser así, la variable tarea obtiene la opción que escoge el usuario, si esa opción no es a, b , c o terminar hace none.
Por último tenemos un if donde si obtiene los valores esperados como a, b, c nos llevará a la función que realizará la tarea que esperamos y programamos al comienzo, y un else que imprime una despedida en caso de escribir terminar como respuesta.
Bien, espero haberme hecho entender, estoy en twitter como @Pro_cristancho y el código completo está en https://github.com/procristancho/menuPy/blob/master/menu.py
I am sharing this web page cool games which helps you to play this game without download.
Yo para hacer el cambio de decimal a binario he escrito esto:
defbinari(): num = int(input("Que numero quieres ver en vinario: ")) bi = "" w = num * 2 i = Falsewhile i == False: w = w // 2 r = w % 2 bi =str(r) + bi if w <= 3: bi ="1" + bi i = True print(bi)```