taller listasyeasygui
TRANSCRIPT
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:
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:
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 [ ]
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']
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
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)
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
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:
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:
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
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.
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")
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)
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
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 )
1. Agregar un numero primo2. Eliminar un numero primo3. Ordenar el listado4. Mostrar la lista de números primos5. Salir