def imprimir_menu():Y esta es la salida:
print '1. Imprimir numeros telefonicos'
print '2. Agregar un numero telefonico'
print '3. Borrar un numero telefonico'
print '4. Buscar un numero telefonico'
print '5. Cerrar el programa'
numeros = {}
seleccion_menu = 0
imprimir_menu()
while seleccion_menu != 5:
seleccion_menu = input("Escriba un numero (1-5):")
if seleccion_menu == 1:
print "Numeros Telefonicos:"
for x in numeros.keys():
print "Nombre: ",x," \tNumero: ",numeros[x]
elif seleccion_menu == 2:
print "Agregar nombre y numero"
nombre = raw_input("Nombre:")
telefono = raw_input("Numero:")
numeros[nombre] = telefono
elif seleccion_menu == 3:
print "Borrar nombre y numero"
nombre = raw_input("Nombre:")
if numeros.has_key(nombre):
del numeros[nombre]
else:
print "No pude encontrar a ", nombre
elif seleccion_menu == 4:
print "Buscar numero"
nombre = raw_input("Nombre:")
if numeros.has_key(nombre):
print "El numero es",numeros[nombre]
else:
print "No pude encontrar a ",nombre
elif seleccion_menu != 5:
imprimir_menu()
1. Imprimir numeros telefonicosEl programa es similar al anterior de la lista de nombres, que vimos en el capítulo de listas. El programa funciona del modo siguiente: Primero, definimos la función
2. Agregar un numero telefonico
3. Borrar un numero telefonico
4. Buscar un numero telefonico
5. Cerrar el programa
Escriba un numero (1-5):2
Agregar nombre y numero
Nombre:Joe
Numero:545-4464
Escriba un numero (1-5):2
Agregar nombre y numero
Nombre:Jill
Numero:979-4654
Type in a number (1-5):2
Agregar nombre y numero
Nombre:Fred
Numero:132-9874
Escriba un numero (1-5):1
Numeros telefonicos:
Nombre: Jill Numero: 979-4654
Nombre: Joe Numero: 545-4464
Nombre: Fred Numero: 132-9874
Escriba un numero (1-5):4
Buscar numero
Nombre:Joe
El numero es 545-4464
Escriba un numero (1-5):3
Borrar nombre y numero
Nombre:Fred
Escriba un numero (1-5):1
Numeros telefonicos:
Nombre: Jill Numero: 979-4654
Nombre: Joe Numero: 545-4464
Escriba un numero (1-5):5
imprimir_menu
. imprimir_menu
solamente imprime un menu que luego usamos dos veces en el programa.
Luego viene el renglón de apariencia extraña numeros
= {}
. Todo lo que ese renglón hace es decirle a Python
que numeros es un diccionario. Los siguientes renglones hacen
que el menú funcione. Los renglones:
for x in numeros.keys():recorren el diccionario e imprimen toda la información. La función numeros.keys() devuelve una lista empleada por el rizo for. La lista devuelta por keys no esta ordenada así que si desea orden alfabético debe ordenarla. De modo parecido a las listas, la declaración numeros[x] se usa para obtener un miembro específico del diccionario. Claro que en este caso x es una hilera. A continuación, el renglón numeros[nombre] = telefono agrega un nombre y un número de teléfono al diccionario. Si nombreya hubiera existido en el diccionario, el contenido de telefonoreemplazaría el valor anterior. Luego los renglones:
print "Nombre: ",x," \tNumero: ",numeros[x]
if numeros.has_key(nombre):ven si un nombre en particular está en el diccionario y lo borran si así era. La función
del numeros[nombre]
numeros.has_key(nombre)
devuelve verdadero si la clave nombre existe en el diccionario numeros
o devuelve falso si no es así. El rengló del numeros[nombre]
borra la clave nombre y el valor asociado con esa clave. Los
renglones:
if numeros.has_key(nombre):revisa si el diccionario posee una clave en particular y, si dicha clave existe, entonces imprime el número telefónico asociado con dicha clave. Por último, si la selección del menú no es válida, imprime de nuevo el menú para que usted se divierta.
print "El numero es",numeros[nombre]
Revisión rápida: Los diccionarios tienen claves y valores. Las claves pueden ser hileras o números. Las claves apuntan hacia los valores. Los valores pueden se cualquier tipo de variable (incluyendo listas o hasta diccionarios (esos diccionarios o listas también pueden contener diccionarios o listas dentro de ellos (qué miedo ¿verdad? :) )). Este es un ejemplo de un diccionario que contiene una lista:
puntos_max = [25,25,50,25,100]
asignaciones = ['tarea cap 1','tarea cap 2','examen ','tarea cap 3','prueba']
estudiantes = {'#Max':puntos_max}
def imprimir_menu():
print "1. Agregar un estudiante"
print "2. Borrar un estudiante"
print "3. Imprimir calificaciones"
print "4. Registrar calificacion"
print "5. Imprimir menu"
print "6. Cerrar el programa"
def imprimir_todas_califs():
print '\t',
for i in range(len(asignaciones)):
print asignaciones[i],'\t',
claves = estudiantes.keys()
claves.sort()
for x in claves:
print x,'\t',
calificaciones = estudiantes[x]
imprimir_califs(calificaciones)
def imprimir_califs(calificaciones):
for i in range(len(calificaciones)):
print calificaciones[i],'\t\t',
y esta es una muestra de la salida:
imprimir_menu()
seleccion_menu = 0
while seleccion_menu != 6:
seleccion_menu = input("Elija una opcion del menu (1-6):")
if seleccion_menu == 1:
nombre = raw_input("Agregar al estudiante:")
estudiantes[nombre] = [0]*len(puntos_max)
elif seleccion_menu == 2:
nombre = raw_input("Borrar al estudiante:")
if estudiantes.has_key(nombre):
del estudiantes[nombre]
else:
print "El estudiante: ",nombre," no esta en el diccionario"
elif seleccion_menu == 3:
imprimir_todas_califs()
elif seleccion_menu == 4:
print "Registro de calificacion"
nombre = raw_input("Estudiante:")
if estudiantes.has_key(nombre):
calificaciones = estudiantes[nombre]
print "Escriba el la calificacion para registrar"
print "Escriba 0 (cero) para salir"
for i in range(len(asignaciones)):
print i+1,' ',asignaciones[i],'\t',
imprimir_califs(calificaciones)
cual = 1234
while cual != -1:
cual = input("Cual calificacion quiere cambiar:")
cual = cual-1
if 0 <= cual < len(calificaciones):
calificacion = input("Calificacion:")
calificaciones[cual] = calificacion
elif cual != -1:
print "Calificacion no valida"
else:
print "No encontre a ese estudiante"
elif seleccion_menu != 6:
imprimir_menu()
1. Agregar un estudiante
2. Borrar un estudiante
3. Imprimir calificaciones
4. Registrar calificacion
5. Imprimir menu
6. Cerrar el programa
Elija una opcion del menu (1-6):3
tarea cap 1 tarea cap 2 examen tarea cap 3 prueba
#Max 25 25 50 25 100
Elija una opcion del menu:6
1. Agregar un estudiante
2. Borrar un estudiante
3. Imprimir calificaciones
4. Registrar calificacion
5. Imprimir menu
6. Cerrar el programa
Elija una opcion del menu:1
Agregar al estudiante:Bill
Elija una opcion del menu:4
Registro de calificacion
Estudiante:Bill
Escriba el la calificacion para registrar
Escriba 0 (cero) para salir
1 tarea cap 1 2 tarea cap 2 3 examen 4 tarea cap 3 5 prueba
0 0 0 0 0
Cual calificacion quiere cambiar:1
Calificacion:25
Cual calificacion quiere cambiar:2
Calificacion:24
Cual calificacion quiere cambiar:3
Calificacion:45
Cual calificacion quiere cambiar:5
Calificacion:95
Cual calificacion quiere cambiar:0
Elija una opcion del menu (1-6):3
tarea cap 1 tarea cap 2 examen tarea cap 3 prueba
#Max 25 25 50 25 100
Bill 25 24 45 0 95
Elija una opcion del menu (1-6):El programa funciona de la siguiente manera. Básicamente, la variable estudiantes es un diccionario en el cual los nombres de los estudiantes sirven de claves y las calificaciones son los valores asociados a las claves. Los dos primeros renglones crean dos listas. El siguiente renglón
estudiantes = {'#Max':puntos_max}
crea
un nuevo diccionario con la clave #Max
y el valor asociado como
[25,25,50,25,100] (dado que ese era el contenido de puntos_max
cuando fue efectuada la declaración) (Uso la clave #Max
porque el símbolo #
tiene precedencia alfabética
sobre todos los demás caracteres alfabéticos). Luego
definimos imprimir_menu
. A continuación definimos
la función imprimir_todas_califs
en los renglones:
defObserver cómo obtenemos primero las claves del diccionario estudiantes con la función keys en el renglón claves = estudiantes.keys() . claves es una lista, así que le podemos aplicar todas las funciones propias de las listas. Luego ordenamos las claves con la función claves.sort() ya que claves es una lista. for se usa para recorrer todas las claves. Las calificaciones quedan guardadas como una lista dentro de un diccionario, de modo que la asignación calificaciones = estudiantes[x] le da a la variable calificaciones la lista que está guardada en la clave x. La funciónimprimir_todas_califs
():
print '\t',
for i in range(len(asignaciones)):
print asignaciones[i],'\t',
claves = estudiantes.keys()
claves.sort()
for x in claves:
print x,'\t',
calificaciones = estudiantes[x]
imprimir_califs(calificaciones)
imprimir_califs
solamente imprime una
lista y es definica unos cuantos renglones después.
Los renglones posteriores del programa instrumentan las varias opciones
del menú. El renglón estudiantes[nombre] = [0]*len(puntos_max)
agrega un estudiante a la clave de su nombre. La notación [0]*len(puntos_max)
sólo crea un arreglo de ceros de la misma longitud que la lista puntos_max
.
La opción para borrar un estudiante, borra un estudiante de modo similar al ejemplo del directorio telefonico. La opción para registrar calificaciones es un poco más complicada. En el renglón calificaciones = estudiantes[nombre] la variable calificaciones obtiene una referencia a las calificaciones del estudiante de nombre nombre. El registro de una calificación es efectuado en el renglón calificaciones[cual] = calificacion. Tal vez se haya fijado que el valor calificaciones nunca es asignado al diccionario de estudiantes (como sería el caso de estudiantes[nombre] = calificaciones). La razón por la que no hacemos eso es que calificaciones es de hecho otro nombre para estudiantes[nombre] y por eso, el simple hecho de cambiar calificaciones cambia estudiante[nombre].
Los diccionarios proporcionan un modo fácil de asociar claves y
valores. Esto puede usarse para seguir fácilmente el rastro
de datos que están asociados a varias claves.