taller listasyeasygui

16
TALLER LISTAS Y VENTANAS CON EASYGUI Resumen talleres anteriores En el taller de gráficos tortuga, se dio una noción intuitiva del concepto de subrutina y función de Python. En ciertos momentos un programador puede necesitar efectuar una misma tarea en distintos puntos del programa o repetirla un cierto número de veces. Para evitar tener que volver a escribir una y otra vez las mismas instrucciones, Python permiten agrupar porciones de programa y reutilizarlas cuando sea necesario utilizando la palabra clave def. En los gráficos tortuga, puede ser tedioso escribir las instrucciones para dibujar un cuadrado cada vez que se necesite, utilizando la palabra clave def se puede construir un procedimiento que dibuje un cuadrado y llamarlo por su nombre cada vez que sea necesario. El siguiente ejemplo dibuja un cuadrado 2 veces, separado cierta distancia: Note la diferencia entre la definición del procedimiento y su llamada. El bloque def y las instrucciones que están bajo 4 espacios equivalen a la definición y dibuja_cuadrado() es la llamada al procedimiento. No es obligatorio, pero es deseable ubicar las definiciones y las llamadas de la siguiente manera:

Upload: albert-page

Post on 13-Jan-2017

81 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Taller listasyeasygui

TALLER LISTAS Y VENTANAS CON EASYGUI

Resumen talleres anteriores

En el taller de gráficos tortuga, se dio una noción intuitiva del concepto de subrutina yfunción de Python. En ciertos momentos un programador puede necesitar efectuar unamisma tarea en distintos puntos del programa o repetirla un cierto número de veces. Para evitar tener que volver a escribir una y otra vez las mismas instrucciones, Pythonpermiten agrupar porciones de programa y reutilizarlas cuando sea necesario utilizando lapalabra clave def.

En los gráficos tortuga, puede ser tedioso escribir las instrucciones para dibujar uncuadrado cada vez que se necesite, utilizando la palabra clave def se puede construir unprocedimiento que dibuje un cuadrado y llamarlo por su nombre cada vez que seanecesario.

El siguiente ejemplo dibuja un cuadrado 2 veces, separado cierta distancia:

Note la diferencia entre la definición del procedimiento y su llamada.

El bloque def y las instrucciones que están bajo 4 espacios equivalen a la definición ydibuja_cuadrado() es la llamada al procedimiento.

No es obligatorio, pero es deseable ubicar las definiciones y las llamadas de la siguientemanera:

Page 2: Taller listasyeasygui

En las primeras líneas los módulos que necesita el programa, posteriormente lasdefiniciones y por último el programa principal o las llamadas a los procedimientos ofunciones.

Como lo muestra la figura anterior se hace una distinción conceptual entre procedimiento yfunción la diferencia entre los dos radica en que el procedimiento no tiene la palabra clavereturn mientras que una función si.Técnicamente el procedimiento ejecuta ciertas instrucciones pero no devuelve un resultadoprocesado al programa, en cambio la función devuelve un resultado al programa mediantela palabra clave returnEl código siguiente muestra las diferencias entre procedimientos y funciones:

Page 3: Taller listasyeasygui

Listas y Tuplas

Tuplas

Son tipos de datos inmutables eso quiere decir que una vez definidos no se puedenmodificar, Las operaciones de las listas son aplicables a las tuplas menos las que impliquenmodificiones (agregar, insertar, modificar o eliminar elementos).Se definen con paréntesis separados por comas

Ejemplo:

numeros_digitos=(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

El resto del taller se dedicará en su mayoría a las listas.

Listas

Las listas son conjuntos ordenados de elementos (números, cadenas, listas, etc). Las listas se delimitan por corchetes ([ ]) y los elementos se separan por comas. Las listas pueden contener elementos del mismo tipo, por ejemplo:

primos = [2, 3, 5, 7, 11, 13]

dias_laborables = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"]

Pueden contener elementos de tipos distintos:

fecha = ["Lunes", 27, "Octubre", 1997]

O pueden contener a otras listas:

dias_de_la_semana = [ ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"] , ["Sabado","Domingo"]]

Es posible acceder a cada uno de los elementos por medio de un índice que va desde 0hasta el número de elementos.

La lista vacía se define por [ ]

Page 4: Taller listasyeasygui

Operaciones con listas

Imprimir por pantalla un elemento de la lista

nombres = ["Pedro", "Juan", "Carlos"]print(nombres[2])

La salida por pantalla es:Carlos

Modificar un elemento

nombres = ["Pedro", "Juan", "Carlos"]nombres[0]= "Luis"print(nombres)

La salida por pantalla es:['Luis', 'Juan', 'Carlos']

Agregar elementos al final

nombres = ["Pedro", "Juan", "Carlos"]nombres.append("Maria")print(nombres)

La salida por pantalla es:['Luis', 'Juan', 'Carlos', 'Maria']

Agregar elementos en una posición específica

nombres = ["Pedro", "Juan", "Carlos"]nombres.insert(1,"Sara")print(nombres)

La salida por pantalla es:['Pedro', 'Sara', 'Juan', 'Carlos']

nombres = ["Pedro", "Juan", "Carlos"]nombres.insert(2,"Juliana")print(nombres)

La salida por pantalla es:['Pedro', 'Juan', 'Juliana', 'Carlos']

Page 5: Taller listasyeasygui

Borrar un índice específico

nombres = ["Pedro", "Juan", "Carlos"]del nombres[2]print(nombres)

La salida por pantalla es:['Pedro', 'Juan']

Saber si un valor está o no en una lista

Para saber si un valor está en una lista se puede utilizar el operador in. La sintaxis sería"elemento in lista" y devuelve un valor lógico: True si el elemento está en la lista, False si elelemento no está en la lista.

Por ejemplo, el programa siguiente comprueba si el usuario es una persona autorizada:

personas_autorizadas = ["Alberto", "Carmen"] nombre = input("Dígame su nombre: ") if nombre in personas_autorizadas: print("Está autorizado") else: print("No está autorizado")

Para saber si un valor no está en una lista se pueden utilizar los operadores not in. Lasintaxis sería "elemento not in lista" y devuelve un valor lógico: True si el elemento no estáen la lista, False si el elemento está en la lista.

Por ejemplo, el programa siguiente comprueba si el usuario es una persona autorizada:

personas_autorizadas = ["Alberto", "Carmen"] nombre = input("Dígame su nombre: ") if nombre not in personas_autorizadas: print("No está autorizado") else: print("Está autorizado")

Para averiguar la posición de un valor dentro de una lista

Se usa la operación index()

Ejemplo:

dias_laborables = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"] print(dias_laborables.index("Jueves"))

La salida por pantalla es: 3

Page 6: Taller listasyeasygui

Si el elemento no existe devuelve un error por lo cual es necesario verificar con antelación siel elemento existe con la palabra clave in

Obtener el numero de elementos de una lista

Se utiliza la palabra clave lenPor ejemplo:

dias_laborables = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"] tamano=len(dias_laborables)print(tamano)

La salida por pantalla es: 5

Obtener el mínimo valor entre los elementos de una lista

Se utiliza la palabra clave minPor ejemplo:

numeros_primos = [3,7,5,1] minimo=min(numeros_primos)print(minimo)

La salida por pantalla es: 1

Obtener el máximo valor entre los elementos de una lista

Se utiliza la palabra clave maxPor ejemplo:

numeros_primos = [3,7,5,1]maximo=max(numeros_primos)print(maximo)

La salida por pantalla es: 7

Invertir el orden de una lista

Se utiliza la palabra clave reversePor ejemplo:

numeros_primos = [3,7,5,1]numeros_primos.reverse()print(numeros_primos)

Page 7: Taller listasyeasygui

La salida por pantalla es: [1, 5, 7, 3]

Ordenar los elementos de una lista en forma ascendente

Se utiliza la propiedad sortPor ejemplo:

numeros_primos = [3,7,5,1]numeros_primos.sort()print(numeros_primos)

La salida por pantalla es: [1, 3, 5, 7]

Ordenar los elementos de una lista en forma descendente

Se utiliza la propiedad sort con el parámetro (reverse=True)

Por ejemplo:

numeros_primos = [3,7,5,1]numeros_primos.sort(reverse=True)print(numeros_primos)

La salida por pantalla es: [7, 5, 3, 1]

Recorrer los elementos de una lista

Forma directa

dias_laborables = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"] for dia in dias_laborables: print(dia)

La salida por pantalla es:

Lunes Martes Miercoles Jueves Viernes

Page 8: Taller listasyeasygui

Forma indirecta

dias_laborables = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"] i=0 while i<len(dias_laborables): print(dias_laborables[i]) i=i+1

La salida por pantalla es:

Lunes Martes Miercoles Jueves Viernes

Extraer sublistas

Se puede extraer parte de una lista utilizando la notación nombre_lista[inicio : fin+1] porejemplo:

lista1 = ["A", "B", "C", "D", "E"] print(lista1[0:3])

La salida por pantalla es: ['A', 'B', 'C']

y

print(lista1[:])

La salida por pantalla es: ['A', 'B', 'C', 'D', 'E']

Que equivale a todos los elementos de la lista.

Concatenar dos listas

Las listas se concatenan mediante el operador + siempre y cuando sean dos listas

El siguiente programa define dos listas una con dias_laborables y otra con dias_no_laborables y las concatena en una nueva lista denominada dias_de_la_semana observeque la lista resultante se puede imprimir usando la función print:

Page 9: Taller listasyeasygui

EASYGUI

Easygui es un módulo para python que permite generar ventanas mediante llamadassimples a funciones.

Easygui no se encuentra disponible directamente en python, es necesario instalarlo paraque funcione. La versión de pyzo que se encuentra en la página del curso ya lo tiene enfuncionamiento, para que otros entornos de python revise su instalación en la siguientedirecciónhttp://easygui.sourceforge.net/sourceforge_site_as_of_2014_11_21/download/version_0.96/index.html.

Para nuestro caso basta con descargar el pyzo de la página del curso, descomprimir eimportar al inicio del programa, así:

from easygui import *

Métodos principales de Easygui

Otras funcionalidades pueden ser consultadas en la siguiente enlace (en inglés):http://easygui.sourceforge.net/tutorial.html

Mostar una ventana con un mensaje simple

Muestra un cuadro de dialogo con un mensaje

mensaje cadena de caracteres que aparece en el centro del cuadro de dialogo antes delcuadro de textotitulo título de la ventanatexto_boton es el texto que será mostrado en el botón

msgbox(mensaje, titulo, texto_boton)

El siguiente ejemplo muestra un simple cuadro de dialogo:

Page 10: Taller listasyeasygui

from easygui import *

mensaje="Mensaje"titulo="Titulo"texto_boton="Aceptar"msgbox(mensaje, titulo, texto_boton)

Mostar una ventana con un texto específico o una lista

textbox(mensaje, titulo, texto)

mensaje cadena de caracteres que aparece en el centro del cuadro de dialogo antes delcuadro de textotitulo título de la ventanatexto puede ser un valor de tipo texto o una lista y constituye lo que se quiere mostrar

El siguiente ejemplo muestra la siguiente ventana:

from easygui import *

titulo="Titulo"mensaje="Mensaje"texto="Hola mundo"textbox(mensaje, titulo, texto)

Ventana que solicita al usuario una cadena de caracteres

mensaje cadena de caracteres que aparece en el centro del cuadro de dialogo antes delcuadro de textotitulo título de la ventanavalor_inicial es una cadena de caracteres que se muestra por defecto en el cajón de texto

Page 11: Taller listasyeasygui

texto=enterbox(mensaje, titulo, valor_inicial)

El siguiente ejemplo muestra una ventana que solicita al usuario una cadena de caracteres yel resultado lo almacena en la variable texto.

from easygui import *

titulo="Titulo"mensaje="Mensaje"valor_inicial="Ingrese una cadena por favor"texto=enterbox(mensaje, titulo, valor_inicial)

Los valores ingresados por el usuario son almacenados en la variable texto que puede serdefinida con cualquier nombre y posteriormente usada en el transcurso del programa.

Ventana que solicita un número entero al usuario

Muestra un mensaje para que el usuario ingrese un número entero

mensaje cadena de caracteres que aparece en el centro del cuadro de dialogo antes delcuadro de textotitulo título de la ventanavalor_inicial es un número entero que se muestra por defectolimite_inferior es el menor número entero que será aceptadolimite_superior es el mayor número entero que será aceptado

entero=integerbox(mensaje, titulo,valor_inicial, limite_inferior, limite_superior)

La ventana se mostrará repetidamente hasta que el usuario ingrese el valor correcto

El siguiente ejemplo muestra una ventana que solicita al usuario un número entero entre 1y 50 como valor inicial pone 0 en el cuadro de dialogo. El valor resultante se almacena en la variable entero.

Page 12: Taller listasyeasygui

from easygui import *

titulo="Titulo"mensaje="Mensaje"valor_inicial=0limite_inferior=1limite_superior=50entero=integerbox(mensaje, titulo, valor_inicial, limite_inferior, limite_superior)

Ventana Si – No

Muestra un cuadro de dialogo con dos botones (cuyo título se puede definir) y devuelve 1 o0 según la elección del usuario.

mensaje cadena de caracteres que aparece en el centro del cuadro de dialogo antes delcuadro de textotitulo título de la ventanaLa tupla ("Si","No") se puede modificar para que los títulos de los botones tengan laapariencia que el programador desee

ynbox(mensaje, titulo,("Si","No"))

El siguiente código muestra un cuadro de dialogo y según la elección del usuario imprimepor pantalla “Eligió aceptar” o “Eligió cancelar” según el caso

from easygui import *

mensaje = "¿Desea continuar?"titulo = "Porfavor confirme"if ynbox(mensaje, titulo,("Si","No"))==1 : #Acciones si el usuario elije si print("Eligio aceptar")else: #Acciones si el usuario elije no print("Eligio cancelar")

Page 13: Taller listasyeasygui

El siguiente código hace lo mismo que el anterior solo que no se el resultado de ynbox nose compara con 1

from easygui import *

mensaje = "¿Desea continuar?"titulo = "Porfavor confirme"if ynbox(mensaje, titulo,("Si","No")): #Acciones si el usuario elije si print("Eligio aceptar")else: #Acciones si el usuario elije no print("Eligio cancelar")

Ventana de selección

Muestra una ventana con una lista de opciones de las cuales el usuario puede elegir una, suacción se ejecuta cuando oprime el botón aceptar.

mensaje cadena de caracteres que aparece en el centro del cuadro de dialogo antes delcuadro de textotitulo título de la ventanalista_opciones es una lista que contiene los textos de las diferentes opciones

choicebox(mensaje, titulo, lista_opciones)

El siguiente ejemplo muestra su funcionamiento

from easygui import *

mensaje ="Elija su opcion"titulo = "Menu"lista_opciones = ["Opcion 1", "Opcion 2", "Opcion 3"]eleccion = choicebox(mensaje, titulo, lista_opciones)

Page 14: Taller listasyeasygui

if eleccion=="Opcion 1": print("Eligio 1")elif eleccion=="Opcion 2": print("Eligio 2")elif eleccion=="Opcion 3": print("Eligio 3")else: print("El usuario elige cancelar")

Menú con ventanas para una aplicación

El siguiente código genera un menú de opciones con ventanas utilizando los elementosanteriormente descritos que puede ser utilizado para sus proyectos y programas:

from easygui import *

while True: mensaje ="Elija su opcion" titulo = "Menu" lista_opciones = ["Opcion 1", "Opcion 2", "Opcion 3"] eleccion = choicebox(mensaje, titulo, lista_opciones) if eleccion=="Opcion 1": msgbox("Usted escogio: " + str(eleccion), "Eleccion") elif eleccion=="Opcion 2": msgbox("Usted escogio: " + str(eleccion), "Eleccion") elif eleccion=="Opcion 3": msgbox("Usted escogio: " + str(eleccion), "Eleccion") else: msgbox("Hasta pronto") break

Page 15: Taller listasyeasygui

TALLER

1. VALOR (2.0) (Este programa debe ser creado con las funciones print e input, no debeusar Easygui)Defina una función Python con def que reciba como parámetro un número entero y quedevuelva verdadero si el número es primo y falso si el numero no es primo.Cree un programa en python que defina una lista de números primos vacía [] y mediante unciclo llene la lista con los primeros 20 números primos.Posteriormente debe imprimir la lista de los 20 números primos, la salida debe ser similar ala siguiente:

1357

etc.

Nota: Un valor booleano para una variable Python se define así

variable=True

o

variable=False

Existen los siguientes casos:

1. Si el número es igual a 1 es primo2. Si el número es mayor que dos se evalúa para todos los números desde 2 hasta el númerosi es divisible por dicho número.

2. VALOR (2.0) Modifique el programa creado en 1 para que solicite del usuario un númeroentre 1 y 100 (utilizando ventanas Easygui), el programa debe evaluar si es primo o no(mediante la función creada en 1), si es primo, lo agrega a la lista, de lo contrario muestra uncuadro de dialogo que dice "No es primo".El programa debe evaluar si el número ingresado se encuentra en la lista, si existepreviamente debe mostrar un mensaje que diga "El numero ya esta en la lista".Si la lista no está vacía, debe mostrarla en una ventana y posteriormente mostrar unaventana Si / No con el mensaje "Elija Si o No para Continuar". Si el usuario selecciona Si, vuelve a solicitar un número entre 1 y 100 de lo contrario terminael programa.

3. VALOR (1.0) Modifique el programa creado en 2 para que tenga un menú de opciones(basado en ventanas de Easygui).Sugerencia: puede basarse en el código (Menú con ventanas para una aplicación )

Page 16: Taller listasyeasygui

1. Agregar un numero primo2. Eliminar un numero primo3. Ordenar el listado4. Mostrar la lista de números primos5. Salir