Keywords: easytut

Siguiente: Rizos for Arriba: Tutor de Python para No-programadores Anterior: Definiendo Funciones Contenido
Subsecciones

- Variables con más de un valor
- Más aspectos de las listas
- Ejemplos
- Ejercicios

# 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 lista`es 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 operador`in` 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".

Anterior: Rizos For Arriba: Tutor de Python para No-programadores Anterior: Definiendo Funciones Contenido
Traducido por Victor M. Rosas-Garcia quimico69@yahoo.com