next up previous contents
Siguiente: Rizos for Arriba:Tutor de Python para No-programadores Anterior: Definiendo Funciones   Contenido

Subsecciones

Listas

Variables con más de un valor

Ya ha visto que las variables ordinarias almacenan un solo valor.  Sin embargo, otros tipos de variable pueden almacenar más de un valor.  El tipo más simple es llamado una lista. He aquí un ejemplo de una lista en uso:

cual = input("Cual mes (1-12)? ")
meses = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio',\
'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']
if 1 <= cual <= 12:
print "El mes es",meses[cual - 1]

y un ejemplo de la salida:

Cual mes (1-12)? 3
El mes es Marzo

En este ejemplo meses es una lista. meses queda definida con los renglones meses = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio',\ 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'] (Note que puede usar una \ para dividir un renglón muy largo). [ y ] abren y cierran la lista, mientras las comas  (``,'') sirven para separar los elementos de la lista.  Usamos la lista en meses[cual - 1].  Una lista consiste de elementos numerados a partir de cero.  En otras palabras, si desea Enero deber referirse a meses[0].  Proporcione un número a una lista y la lista le devolverá el valor almacenado en ese lugar.

El enunciado if 1 <= cual <= 12: será verdadero si el valor de cual está entre uno y doce, ambos inclusive (en otras palabras, es lo que usted esperaría si ha visto esto en álgebra).

Podemos considerar la listas como series de cajas.  Por ejemplo, las cajas creadas por demolista = ['vida',42, 'el universo', 6,'y',7] pudieran verse así:

número de caja 0 1 2 3 4 5
demolista `vida' 42 `el universo' 6 `y' 7

Nos referimos a cada caja por su número, así que el enunciado demolista[0] obtendría 'vida', demolista[1] obtendría 42 y así sucesivamente hasta demolista[5] que  resultaría en 7.

Más aspectos de las listas

El siguiente ejemplo es sólo para mostrar muchas otras cosas que las listas pueden hacer (sólo por esta vez no espero que lo escriba, pero sí debiera jugar con listas hasta que se sienta cómodo con ellas). Aquí va:
demolista = ['vida',42, 'el universo', 6,'y',7]
print 'demolista = ',demolista
demolist.append('todas las cosas')
print "despues de anexar 'todas las cosas' ahora demolista es:"
print demolista
print 'len(demolista) =', len(demolista)
print 'demolista.index(42) =',demolista.index(42)
print 'demolista[1] =', demolista[1]
#Ahora haremos un rizo a traves de la lista
c = 0
while c < len(demolista):
print 'demolista[',c,']=',demolista[c]
c = c + 1
del demolista[2]
print "Despues de remover 'el universo' ahora demolista es:"
print demolista
if 'vida' in demolista:
print "encontre 'vida' en demolista"
else:
print "no encontre 'vida' en demolista"
if 'amiba' in demolista:
print "encontre 'amiba' en demolista"
if 'amiba' not in demolista:
print "no encontre 'amiba' en demolista"
demolista.sort()
print 'La demolist ordenada es ',demolista

La salida es:

demolista =  ['vida', 42, 'el universo', 6, 'y', 7]
despues de anexar 'todas las cosas' ahora demolista es:
['vida', 42, 'el universo', 6, 'y', 7, 'todas las cosas']
len(demolista) = 7
demolista.index(42) = 1
demolista[1] = 42
demolista[ 0 ]= vida
demolista[ 1 ]= 42
demolista[ 2 ]= el universo
demolista[ 3 ]= 6
demolista[ 4 ]= y
demolista[ 5 ]= 7
demolista[ 6 ]= todas las cosas
Despues de remover 'el universo' ahora demolista es:
['vida', 42, 6, 'y', 7, 'todas las cosas']
encontre 'vida' en demolista
no encontre 'amiba' en demolista
La demolist ordenada es [6, 7, 42, 'todas las cosas', 'vida', 'y']

Este ejemplo usa un montón de funciones nuevas.  Note que puede imprimir toda la lista simplemente con print.  La función append se usa para añadir un elemento nuevo al final de la lista.  len devuelve cuántos elementos hay en la lista. Los índices válidos de una lista (esto es, los números que pueden usarse dentro de []) varían de 0 a len - 1.  La función index dice cuál es la primera ubicación de un elemento en una lista.  Note cómo demolista.index(42) devuelve 1 y cuando demolista[1] es ejecutado devuelve 42.  El renglón #Ahora haremos un rizo a traves de la listaes sólo un recordatorio para el programador (también llamado un comentario). Python no hace caso de los renglones que comienzan con #. Luego, los renglones:

c = 0
while c < len(demolista):
print 'demolista[',c,']=',demolista[c]
c = c + 1
Crean una variable c la cual comienza con el valor 0 y es incrementada hasta que alcanza el último índice de la lista.  Mientras tanto, el enunciado print imprime cada elemento de la lista.

El comando del puede ser usado para remover de la lista un elemento en particular.  Los siguientes renglones usan el operadorin para evaluar si un elemento dado está o no en la lista.

La función sort ordena la lista.  Esto es útil si necesita una lista ordenada de menor a mayor número o alfabéticamente. Observe que esto reacomoda la lista.

En resumen, para una lista puede uno usar las siguientes operaciones:

ejemplo explicación
lista[2] devuelve el elemento de índice 2
lista[2] = 3 asigna el valor 3 al elemento de índice 2
del lista[2] remueve el elemento de índice 2
len(lista) devuelve la longitud de lista
"valor" in lista es verdadero si "valor" es un elemento de lista
"valor" not in lista es verdadero si "valor" no es un elemento en lista
lista.sort() ordena lista
lista.index("valor") devuelve el índice del primer lugar donde aparece "valor"
lista.append("valor") anexa un elemento "valor" al final de lista

El siguiente ejemplo usa estas operaciones de un modo más útil:

articulo_menu = 0
lista = []
while articulo_menu != 9:
print "--------------------"
print "1. Imprime la lista"
print "2. Anexa un nombre a la lista"
print "3. Remueve un nombre de la lista"
print "4. Cambia un elemento de la lista"
print "9. Cierra el programa"
articulo_menu = input("Elija un articulo del menu: ")
if articulo_menu == 1:
actual = 0
if len(lista) > 0:
while actual < len(lista):
print actual,". ",list[actual]
actual = actual + 1
else:
print "la lista esta vacia"
elif articulo_menu == 2:
nombre = raw_input("Escriba un nombre para anexar: ")
lista.append(nombre)
elif articulo_menu == 3:
borra_nombre = raw_input("Cual nombre le gustaria quitar: ")
if borra_nombre in lista:
numero_elemento = lista.index(borra_nombre)
del lista[numero_elemento]
#El codigo anterior solo borra la primera instancia
# del nombre. El siguiente codigo debido a Gerald quita todas.
#while borra_nombre in lista:
# numero_elemento = lista.index(borra_nombre)
# del lista[numero_elemento]
else:
print borra_nombre," no esta en la lista"
elif articulo_menu == 4:
nombre_viejo = raw_input("Cual nombre le gustaria cambiar: ")
if nombre_viejo in lista:
numero_articulo = lista.index(nombre_viejo)
nombre_nuevo = raw_input("Cual es el nuevo nombre: ")
lista[numero_articulo] = nombre_nuevo
else:
print nombre_viejo," no esta en la lista"
print "Adios"

Y esta es parte de la salida:

--------------------
1. Imprime la lista
2. Anexa un nombre a la lista
3. Remueve un nombre de la lista
4. Cambia un elemento de la lista
9. Cierra el programa

Elija un articulo del menu: 2
Escriba un nombre para anexar: Jack

Elija un articulo del menu: 2
Escriba un nombre para anexar: Jill

Elija un articulo del menu: 1
0 . Jack
1 . Jill

Elija un articulo del menu: 3
Cual nombre le gustaria quitar: Jack

Elija un articulo del menu: 4
Cual nombre le gustaria cambiar: Jill
Cual es el nuevo nombre: Jill Peters

Elija un articulo del menu: 1
0 . Jill Peters

Elija un articulo del menu: 9
Adios

Ese fue un programa largo.  Veamos el código fuente. El renglón lista = [] hace la variable lista una lista sin artículos (o elementos).  El siguiente renglón importante es while articulo_menu != 9:.  Este renglón comienza un rizo que habilita el menú de opciones para este programa.  Los siguientes renglones muestran el menú y deciden qué parte del programa ejecutar.

La sección:

actual = 0
if len(lista) > 0:
while actual < len(lista):
print actual,". ",lista[actual]
actual = actual + 1
else:
print "La lista esta vacia"
recorre la lista e imprime cada nombre. len(lista) dice cuántos elementos hay en una lista.  Si len devuelve 0 entonces la lista está vacía.

Luego, unos cuantos rengloes después, aparece el enunciado lista.append(nombre).  Usa la función append para anexar un elemento al final de la lista.  Salte dos renglones más y observe esta sección del código:

numero_articulo = lista.index(borra_nombre)
del lista[numero_articulo]
Aquí la función index se emplea para encontrar el valor del índice que será usado después para remover el artículo.  del lista[numero_articulo] se emplea para remover un artículo de la lista.

La siguiente sección

nombre_viejo = raw_input("Cual nombre le gustaria cambiar: ")
if nombre_viejo in lista:
numero_articulo = lista.index(nombre_viejo)
nombre_nuevo = raw_input("Cual es el nuevo nombre: ")
lista[numero_articulo] = nombre_nuevo
else:
print nombre_viejo," no esta en la lista"
usa index para hallar el numero_articulo y luego pone nombre_nuevo en lugar de nombre_viejo.

Ejemplos

prueba.py

## Este programa hace una prueba de conocimientos

verdad = 1
falso = 0

# Primero hagamos las preguntas de la prueba
# Despues modificaremos esto para usar archivos en disco.
def obtener_preguntas():
# observe como los datos quedan guardados en una lista de listas
return [["Cual es el color de cielo en un dia claro?","azul"],\
["Cual es la respuesta a la vida, el universo y todas las cosas?","42"],\
["Cual es una palabra de cuatro letras para trampa de ratones?","gato"]]
# Esto hace una sola pregunta
# toma una sola pregunta
# devuelve verdad si el usuario escribio la respuesta correcta, si no, falso
def revisa_pregunta(pregunta_y_repuesta):
#extrae la pregunta y la respuesta de la lista
pregunta = pregunta_y_respuesta[0]
respuesta = pregunta_y_respuesta[1]
# da la pregunta al usuario
repuesta_usuario = raw_input(pregunta)
# compara la respuesta del usuario con la respuesta correcta
if respuesa == respuesta_usuario:
print "Correcto"
return verdad
else:
print "Incorrecto, lo correcto era:",repuesta
return falso
# Esto hara todas las preguntas
def examinar(preguntas):
if len(preguntas) == 0:
print "No hay preguntas."
# el return sale de la funcion
return
indice = 0
correctas = 0
while indice < len(preguntas):
#Revisa la pregunta
if revisa_pregunta(preguntas[indice]):
correctas = correctas + 1
#ve a la siguiente pregunta
indice = indice + 1
#observe el orden del calculo, primero multiplica y luego divide
print "Obtuvo ",correctas*100/len(preguntas),"% correcto de",len(questions)

#ahora hagamos el examen
examinar(obtener_preguntas())

Muestra:

Cual es el color de cielo en un dia claro?verde
Incorrecto, lo correcto era: azul
Cual es la respuesta a la vida, el universo y todas las cosas?42
Correcto
Cual es una palabra de cuatro letras para trampa de ratones?gato
Correcto
Obtuvo 66 % correcto de 3

Ejercicios

Expanda el programa prueba.py para que tenga un menú con la opción de tomar el examen, viendo la lista de preguntas y respuestas, y una opción para cerrar el programa. También, añada una nueva pregunta, "Que ruido hace una maquina verdaderamente avanzada?" con la respuesta "ping".


next up previous contents
Anterior: Rizos For Arriba:Tutor de Python para No-programadoresAnterior: Definiendo Funciones   Contenido
Josh Cogliati jjc@honors.montana.edu
Traducido por Victor M. Rosas-Garcia quimico69@yahoo.com