Está en la página 1de 44

2022

2023

Cuaderno de Ejercicios
INFORMÁTICA PARA LA INGENIERÍA
Cuaderno de Ejercicios

Tabla de contenido

EJERCICIO 1. ENTORNO E INTRODUCCIÓN A PYTHON: PRIMEROS PASOS...............................2

INTRODUCCIÓN .......................................................................................................................2

EJERCICIO 2. ENTRADA-SALIDA Y FUNCIONES PREDEFINIDAS ................................................7

EJERCICIO 3. SENTENCIAS DE CONTROL I Y MANEJO DE EXCEPCIONES ................................. 10

EJERCICIO 4. SECUENCIAS: LISTAS-TUPLAS-CADENAS. ESTRUCTURAS DE CONTROL II ........... 13

EJERCICIO 5. MATRICES. LISTA DE LISTAS ............................................................................ 21

EJERCICIO 6. FUNCIONES Y MÓDULOS ................................................................................ 24

EJERCICIO 7. PERSISTENCIA: FICHEROS ............................................................................... 30

EJERCICIO 8. TKINTER. GUI INTERFACES GRÁFICAS. PARTE I. INTRODUCCIÓN ...................... 32

INTRODUCCIÓN .....................................................................................................................32
WIDGETS .............................................................................................................................33
COLOCAR LOS WIDGETS EN LA VENTANA ...................................................................................... 35

EJERCICIO 8. INTERFACES GRÁFICAS DE USUARIO. PARTE II................................................. 38

1
Cuaderno de Ejercicios

Ejercicio 1. Entorno e Introducción a Python: primeros pasos

Objetivos

• Manejar el intérprete de Python.


• Conocer Thonny (IDE). Crear, abrir programas y ejecutarlos.
• Trabajar con los tipos de datos básicos de Python y realizar operaciones sencillas
con los mismos.
• Primeros programas en Python y comentarlos.
• Familiarizarse con el Debug.

Introducción
Python es un lenguaje de programación de propósito general que se puede decir que es
multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor
medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es
multiplataforma. Es un buen lenguaje para adentrarse en el mundo de la programación por su
simplicidad, versatilidad y rapidez de desarrollo, esto es gracias a que su sintaxis es muy sencilla.
Otra ventaja es que posee una licencia de código abierto. Para escribir programas en Python no
se necesita más que descargar el lenguaje que cuenta con su propio IDLE (Integrated
Development and Learning Environment o Entorno Integrado de Desarrollo y Aprendizaje para
Python). Este IDLE cuenta con dos ventanas: la ventana Shell y la ventana del editor. Aquí
podemos introducir las sentencias y ver directamente el resultado que nos proporciona el
intérprete. Para descargar Python puedes ir a la página https://www.python.org/. En los
ejercicios se utilizará la versión 3.6.5 o posterior.

Además del propio IDLE de Python, existen herramientas más completas para la escribir los
programas, lo que habitualmente se conoce como IDE (Integrated Development Environment).
Algunas opciones son de pago y otras gratuitas. Para este curso introductorio a la programación,
se ha escogido Thonny. Es un IDE fácil de usar, sencillo, gratuito y multiplaforma (Windows, Linux
y Mac). La página de donde puedes bajarlo y obtener más información es: https://thonny.org/.

Enunciados: Trabajo en clase

Familiarizarse con Thonny

En la propia página de descarga de Thonny existe un pequeño video que dura unos cinco minutos
y que son suficientes para que conozcas los elementos principales de este IDE. Aquí solo te
vamos a presentar las ventanas principales y las opciones más comunes.

2
Cuaderno de Ejercicios

Entorno Thonny

Elementos principales del entorno:

a. Barra de menús:
• File. Opciones para Crear, Guardar, Abrir o Imprimir programas.
• Edit. Copiar, Pegar, Cortar, poner comentarios en Python, limpiar Shell, etc.
• View. Mostrar/Ocultar ventanas, cambiar tamaños de letra, etc.
• Run. Ejecutar, Debug de programar, Breakpoints, etc.
• Tools. Añadir paquetes, Abrir Shell, etc.
b. Opciones más comunes
• Crear un programa en blanco, abrir un programa, guardar, ejecutar, opciones
de debug y stop.
c. Código del programa actual. Permite tener abierta más de una ventana con distintos
programas.
d. Shell pueden ejecutarse las instrucciones y ver el resultado de las mismas.
e. Distintas ventanas donde cabe destacar la ventana de variables que permite ver el valor
de las variables del programa.
f. Trabajo con objetos.

Escribir sentencias directamente

Se utilizará la ventana Shell para escribir comandos. Posicionarse en el prompt y escribir las
siguientes sentencias:

3
Cuaderno de Ejercicios

Juegue con el lenguaje y realice operaciones matemáticas comunes, se pueden usar cadenas de
caracteres como en el ejemplo.

Crear un programa y ejecutar un programa

Los programas se guardan en ficheros con extensión .py y se abren para modificarlos o probar
simplemente cómo funcionan. Se escriben en la ventana de código, en la parte izquierda
aparecen los números correspondientes a cada línea del programa. En nuestro ejemplo, el
programa tiene cinco líneas.
Para ver la ejecución del programa es necesario guardarlo, Thonny lo hace de manera
automática antes de su ejecución, y si el programa no ha sido guardado pregunta por el nombre
del mismo. Para guardar un programa basta con seleccionar la opción Save del menú File o
pulsar el botón de la barra . En este caso hemos nombrado al programa “primero.py”, y en
la pantalla de la ventana aparece el nombre reflejado en la pestaña.
Para ejecutar el programa actual es necesario seleccionar la opción Run current script del menú
Run, pulsar la tecla F5 o hacer clic en el botón .
El resultado de la ejecución puede verse en el Shell, en la ventana de variables podemos ver las
variables y el valor de las mismas como resultado de la ejecución del programa. Los errores que
pudiera existir también se mostrarían en la ventana Shell.

Ejercicio 1.1. Variables

Crea tres variables de tipo entero y asígnales los siguientes valores: 5, 14, 37. Escribe las
siguientes sentencias:

4
Cuaderno de Ejercicios

• Dos sentencias que aplicando los operadores +, *, (, y ), y sin variar el orden de los
números se obtengan los siguientes resultados: 703 y 523.
• Utiliza un operador que indique si es verdad que 14 es menor que 37.
• Muestra cuántas veces exactas cabe 5 en 14.
• Haz una sentencia que calcule el resto de dividir 14 entre 5, y súmalo a 37.
• Elevar 14 a la quinta potencia.
• ¿Cuál tipo de dato obtenemos cuando aplicamos un operador relacional?
• Escribe una expresión en la cual mezcles dos tipos de operadores diferentes y sea
válido el resultado que obtengas.

Ejercicio 1.2. Cadenas I

Crea dos variables de tipo cadena de caracteres. Asígnales los siguientes valores: “Buenos” y
“días”. Escribe las siguientes sentencias:

• Aplicando los operadores adecuados se obtenga el resultado Buenosdías


• Obtener el resultado BuenosBuenosBuenosdías.
• Imprimir en cada línea una letra de la variable 1.
• Imprimir en cada línea una letra de la variable 2 pero empezando desde la última
hasta la primera.

Ejercicio 1.3. Cadenas II

Crear dos variables de tipo carácter y asignarles el siguiente valor: “abc” y “aAb”. Crear las
sentencias que permitan saber si:

• Las dos variables son iguales.


• La primera variable es menor a la segunda variable.
• La segunda variable es menor a la primera.

Ejercicio 1.4. Comentarios

Comentar los programas anteriores utilizando los distintos tipos de comentarios.

Ejercicio 1.5. Precedencia

Dando los siguientes valores: a = 20, b = 10, c = 15 y d = 5. Realice los siguientes cálculos:

• (a + b) * c / d
• ((a + b) * c) / d
• (a + b) * (c / d)
• a + (b * c) / d
Compruebe el resultado y comente cómo se resuelve la precedencia.

Ejemplo del resultado:

• Valor de (a + b) * c / d es 90.0
• Valor de ((a + b) * c) / d es 90.0

5
Cuaderno de Ejercicios

• Valor de (a + b) * (c / d) es 90.0
• Valor de a + (b * c) / d es 50.0

Ejercicio 1.6. Calcular la distancia entre dos puntos

Dados dos puntos en el espacio calcular la distancia que los separa (asignar los valores
directamente). Los puntos se definirán por sus tres coordenadas x, y, z. La fórmula para calcular
la distancia es la que se muestra a continuación.

𝑑𝑑 = �(𝑥𝑥1 − 𝑥𝑥2 )2 + (𝑦𝑦1 − 𝑦𝑦2 )2 + (𝑧𝑧1 − 𝑧𝑧2 )2


Ejemplo del resultado:

La distancia entre los puntos (2.0, 3.0, 4.0) y (5.0, 6.0, 7.0) es :
5.196152422706632

Ejercicio 1.7. Lista

Escribe cuatro expresiones válidas, donde puedas identificar en cada una ellas dos o más de
tres tipos de datos diferentes, y dos o más tipos de operadores diferentes.

Ejercicio 1.8. Debug

Familiarizarse con el Debug para comprobar cómo cambian las variables conforme se va
ejecutando un programa.

Enunciados: Trabajo complementario

Complementario 1.1. Realizar los ejercicios de Introducción a Python del cuaderno de


ejercicios resueltos.

Complementario 1.2. Busca en la web aplicaciones conocidas utilizado el lenguaje de


programación Python.

6
Cuaderno de Ejercicios

Ejercicio 2. Entrada-Salida y Funciones predefinidas

Objetivos

• Entrada y salida de datos.


• Invocar funciones predefinidas.
• Utilizar métodos de la clase str.
• Realizar importaciones de módulos.

Enunciados: Trabajo en clase

Ejercicio 2.1. Calcular la distancia entre dos puntos dados por el usuario

Solicitar al usuario los valores de dos puntos en el espacio y calcular la distancia que los separa.
Los puntos se definirán por sus tres coordenadas x, y, z. La fórmula para calcular la distancia es
la que se muestra a continuación.

• Los valores de (x, y, z) se pedirán al usuario y serán de tipo flotante.


• Se utilizará la importación del módulo math para la raíz y la potencia.
• El resultado se mostrará redondeando a dos dígitos y utilizando format.
𝑑𝑑 = �(𝑥𝑥1 − 𝑥𝑥2 )2 + (𝑦𝑦1 − 𝑦𝑦2 )2 + (𝑧𝑧1 − 𝑧𝑧2 )2
Ejemplo del resultado:

Dame la coordenada X1 5.2


Dame la coordenada Y1 3.8
Dame la coordenada Z1 2
Dame la coordenada X2 6.1
Dame la coordenada Y2 7.8
Dame la coordenada Z2 1
La distancia de los puntos (5.2,3.8,2.0) y (6.1,7.8,1.0) es 4.22

Ejercicio 2.2. Nombres

Pedir al usuario su nombre y sus dos apellidos, almacenarlos en tres variables. Hacer las
siguientes sentencias:

• Mostrar nombre y apellidos. Todo en minúscula.


• Mostrar primer apellido, segundo apellido, y nombre. Todo en mayúscula.
• Mostrar primer apellido, segundo apellido, y nombre. En mayúscula la primera
letra de cada palabra.
Ejemplo del resultado:

Dame el nombre juan


Dame el apellido 1 bueno
Dame el apellido 2 montes
juan bueno montes
BUENO MONTES JUAN
Bueno Montes Juan

7
Cuaderno de Ejercicios

Ejercicio 2.3. Cambiando cadenas

Cree una variable que contenga el siguiente texto= “era el mejor de los tiempos, era el peor de
los tiempos, era la edad de la sabiduría, era la edad de la insensatez, era la época de la creencia,
era la época de la incredulidad, era la estación de la luz, era la estación de la oscuridad, era la
primavera de la esperanza, era el invierno de la desesperación”. Realizar las siguientes
modificaciones a la frase:

• Cambiar de toda la frase la palabra tiempos por momentos.


• Cambiar de toda la frase obtenida en el apartado anterior la palabra edad por
época.
• Mostrar el número de caracteres que tiene la nueva frase.
• Mostrar en cuál posición se encuentra la palabra esperanza en la sentencia
original.
• Indicar si la frase original es mayor a la nueva frase.
• Mostrar los primeros 20 caracteres de la nueva frase.
• Pasar la frase a presente cambiando el tiempo del verbo era por es.
• Poner la primera letra de cada palabra en mayúscula de la nueva frase.
• Quitar todos los caracteres en blanco de la frase original.

Ejercicio 2.4. Comprobaciones

Haz las siguientes comprobaciones:

• Pide un número teléfono fijo al usuario y comprueba que el número sea válido. Es
válido si tiene el tamaño adecuado y todos los caracteres son números.
• Pide el nombre de la calle y comprueba que todos los caracteres que la forman son
letras y/o espacios. Tiene que tener al menos un carácter que no puede ser blanco.
• Pedir el DNI e indicar si es correcto. Debe tener 9 caracteres, los primeros 8 de
ellos son números y el último una letra mayúscula.
• Pedir la edad como un valor entero y comprobar si está en el rango de 18 a 81
ambos incluidos.

Ejercicio 2.5. Aleatorios

Crea tres variables de tipo entero e inicializa su valor a cero. Genera tres números aleatorios en
el rango 1-100 ambos incluidos y asignarlos a las variables ya creadas:

• Multiplica el primer valor por la constante PI, redondear el resultado al número


entero cercano más alto
• Comprobar si el segundo valor es un numero par.
• Hacer la resta del segundo número por el tercero.
• Concatenar el valor obtenido en el primer punto con el valor absoluto obtenido en
el punto anterior y mostrarlo en pantalla.

8
Cuaderno de Ejercicios

Enunciados: Trabajo complementario

Complementario 2.1. Realizar los ejercicios de cadenas del cuaderno de ejercicios resueltos.

9
Cuaderno de Ejercicios

Ejercicio 3. Sentencias de Control I y Manejo de excepciones

Objetivos

• Utilizar sentencias de control condicional If/Else.


• Aplicar sentencias iterativas. While
• Evitar excepciones: try/except

Enunciados: Trabajo en clase

Ejercicio 3.1. Múltiplos

Desarrollar un programa que solicite al usuario dos datos numéricos enteros. Comprobar que
son enteros y visualizar como resultado un mensaje que indique si alguno de los datos es
múltiplo del otro.
Ejemplo del resultado:

Dame un número entero: 9


Dame otro número entero: 36
36 es múltiplo de 9

Ejercicio 3.2. Cálculos para un círculo

Diseñar un programa que, a partir del radio de un círculo, permita el cálculo de su diámetro,
perímetro y área. Para ello se presentará al usuario un menú de opciones posibles. Si elige una
opción distinta a las presentadas se le mostrará un mensaje de error (la opción puede estar en
mayúscula o minúscula) y se volverá a pedir la opción. El resultado se mostrará con tres
decimales, y el valor recibido puede ser entero o flotante.
Ejemplo del resultado:

Dame el radio : 42.5


Cálculos posibles
a) Calcular el diámetro
b) Calcular el perímetro
c) Calcular el área
d) Salir
Opción ====> b
El perímetro es 267.035
debe ser mayor que 1.

Ejercicio 3.3. Suma cifras

Sumar los dígitos de un número entero positivo previamente introducido por el usuario. Piensa
dos formas distintas de hacerlo.
Ejemplo del resultado:

Dame un número: 91.


Resultado: 10.
Dame un número: 23.
Resultado: 5.

10
Cuaderno de Ejercicios

Ejercicio 3.4. Qué imprime el print

Del programa que se pone a continuación indica que imprime la sentencia print cada vez que se
ejecuta, si es que se ejecuta. Si tienes dudas de cómo se comporta el programa utiliza el Debug
para ver como cambian las variables: i,j,k.

i, j, k = 0, 0, 0
while i < 3:
while j < 3:
while k < 3:
print(i,j,k)
k += 1
j += 1
k = 0
i += 1
j = 0

Ejercicio 3.5. Adivinar un número

El programa generará automáticamente un número entre 1-100. El usuario intentará adivinar el


número y tendrá para ello 5 intentos. Por cada intento del usuario, el programa indicará si el
número es mayor o menor que el generado. El programa terminará cuando se cumplan los 5
intentos o cuando el número se adivine.
Al terminar se mostrará el número de intentos consumidos y cuáles números han sido
introducidos.
Ejemplo del resultado:

Adivina 50
El numero que tienes que adivinar es mayor
Adivina 75
El numero que tienes que adivinar es mayor
Adivina 90
El numero que tienes que adivinar es mayor
Adivina 95
El numero que tienes que adivinar es menor
Adivina 93
El numero que tienes que adivinar es menor
Intentos intento1 50 intento2 75 intento3 90 intento4 95 intento5 93
Número 92
Has perdido

Enunciados: Trabajo complementario

Complementario 3.1. Números amigos

Introducir dos números enteros y positivos e imprimir si son amigos. Dos números amigos son
dos números enteros positivos a y b tales que la suma de los divisores propios de uno es igual al
otro número y viceversa.
Ejemplo del resultado:

Introducir el primer número: 220.


Introducir el segundo número: 284.
Los números 220 y 284 son amigos.
Introducir el primer número: 5.
Introducir el segundo número: 6.
Los números 5 y 6 No son amigos.

11
Cuaderno de Ejercicios

Complementario 3.2. Genere pareja de números primos.

Introducir un número entero positivo (N), y genere N parejas de números primos gemelos (dos
números son primos gemelos si además de ser números primos, la diferencia entre ellos es
exactamente dos).
Ejemplo del resultado:

Introducir un número: 4.
Resultado:
Parejas de números son: 3 y 5, 5 y 7, 11 y 13, 17 y 19.

Complementario 3.3. Progresión aritmética.

Introducir un número entero y positivo. Comprobar la siguiente igualdad, visualizando cada uno
de los términos:

13 + 23 + 33 + ⋯ 𝑁𝑁 = (1 + 2 + 3+. . 𝑁𝑁)2
Ejemplo del resultado:

Introducir un número: 5
Resultado: 225. Afirmación correcta.
Comprobación:
Igualdad 1: 1 + 8 + 27 + 64 + 125 = 225
Igualdad 2: 15^2 = 225

Complementario 3.4. Cálculo del número perfecto

Verificar si un número introducido es un número perfecto. Un número es perfecto si la suma de


sus divisores es igual al número.
Ejemplo del resultado:

Introducir el número: 28
El 28 es número perfecto. Sus divisores son: 1 + 2 + 4 + 7 + 14.
Introducir el número: 5.
El 5 no es número perfecto.

12
Cuaderno de Ejercicios

Ejercicio 4. Secuencias: Listas-Tuplas-Cadenas. Estructuras de


Control II

Objetivos

• Profundizar en el trabajo con secuencias: cadenas, listas y tuplas.


• Añadir, insertar y borrar elementos.
• Usar los distintos métodos que existen para la manipulación de secuencias.
• Manejar con soltura una de las estructuras de control más utilizadas: for.

Enunciados: Trabajo en clase

Ejercicio 4.1. Aproximar el valor de e

El valor de e se puede aproximar con la siguiente serie:



1
𝑒𝑒 = �
𝑛𝑛!
𝑛𝑛=0

Desarrolle un programa que pregunte al usuario el número de sumas que quiere realizar para
aproximarse al valor de e. Imprima el resultado de cada iteración. Mostrar el termino calculado
y el valor del sumatorio y la diferencia de éste con el valor de la constante e de Python.
Ejemplo del resultado:

Indica el número de repeticiones : 12


N= 0 es 1.0 sumatorio 1.0 diferencia 1.718281828459045
N= 1 es 1.0 sumatorio 2.0 diferencia 0.7182818284590451
N= 2 es 0.5 sumatorio 2.5 diferencia 0.2182818284590451
N= 3 es 0.16666666666666666 sumatorio 2.6666666666666665 diferencia
0.05161516179237857
N= 4 es 0.041666666666666664 sumatorio 2.708333333333333 diferencia
0.009948495125712054
N= 5 es 0.008333333333333333 sumatorio 2.7166666666666663 diferencia
0.0016151617923787498
N= 6 es 0.001388888888888889 sumatorio 2.7180555555555554 diferencia
0.0002262729034896438
N= 7 es 0.0001984126984126984 sumatorio 2.7182539682539684 diferencia
2.7860205076724043e-05
N= 8 es 2.48015873015873e-05 sumatorio 2.71827876984127 diferencia
3.0586177750535626e-06
N= 9 es 2.7557319223985893e-06 sumatorio 2.7182815255731922 diferencia
3.0288585284310443e-07
N= 10 es 2.755731922398589e-07 sumatorio 2.7182818011463845 diferencia
2.7312660577649694e-08
N= 11 es 2.505210838544172e-08 sumatorio 2.718281826198493 diferencia
2.260552189881082e-09
Nota: Utilizar la función format e importar la constante e y factorial.

13
Cuaderno de Ejercicios

Ejercicio 4.2. Imprimir sin vocales

Se le pedirá al usuario una oración cualquiera y el programa mostrará esa misma oración, pero
eliminando las vocales, y mostrando al final el número total de letras, vocales y espacios de la
oración dada por el usuario.
Ejemplo del resultado:

Dame una oración completa ==> esto es una prueba para saber cómo trabaja el
programa
st s n prb pr sbr cm trbj l prgrm
Número de letras = 54 Número de vocales = 21 y Espacios = 9

Ejercicio 4.3: Eliminar letra de una palabra

Pedir una oración al usuario y crear con ella una lista. Mostrar en pantalla las palabras que
forman la lista. Pedir al usuario una letra y eliminar esa letra de todas las palabras de la lista
mostrando la posición de la palabra en la lista y la posición de la letra en la palabra. Mostrar
cómo queda la lista y contabilizar el número de letras eliminadas.
Ejemplo del resultado:

Dame una oración ==> el jueves tiene ventajas muy interesantes que otros días
no tienen
['el', 'jueves', 'tiene', 'ventajas', 'muy', 'interesantes', 'que', 'otros',
'días', 'no', 'tienen']
Dame la letra a eliminar => e
De la palabra 1-el, se elimina en la posición 1
De la palabra 2-jueves, se elimina en la posición 3
De la palabra 2-jueves, se elimina en la posición 5
De la palabra 3-tiene, se elimina en la posición 3
De la palabra 3-tiene, se elimina en la posición 5
De la palabra 4-ventajas, se elimina en la posición 2
De la palabra 6-interesantes, se elimina en la posición 4
De la palabra 6-interesantes, se elimina en la posición 6
De la palabra 6-interesantes, se elimina en la posición 11
De la palabra 7-que, se elimina en la posición 3
De la palabra 11-tienen, se elimina en la posición 3
De la palabra 11-tienen, se elimina en la posición 5
Lista Final
['l', 'juvs', 'tin', 'vntajas', 'muy', 'intrsants', 'qu', 'otros', 'días',
'no', 'tinn']
Caracteres eliminados 12
Nota: Utilizar enumerate.

Ejercicio 4.4. Equipos

El programa contará con dos listas precargadas de nombres, cada nombre representa a un
jugador de un equipo:
lisBALON_1 = ["JUAN","ANA","LUZ","TOM","RAÚL","SARA","LUIS","BO","RAFA"]
lisBALON_2 = ["PAM","CRUZ","ARON","GON","TATO","LOU", "JAVE", "TORO", "RAFA",
"CARRIE", "CARLA", "JUAN"]

14
Cuaderno de Ejercicios

El programa deberá:

• Listar a todos los jugadores de ambos equipos que tengan las siguientes vocales
en el nombre: "AEI".
• Listar a todos los jugadores de ambos equipos que tengan dos o más vocales
iguales en el nombre.
• Mostrar los jugadores con nombres repetidos.
Ejemplo del resultado:

['JUAN', 'ANA', 'LUZ', 'TOM', 'RAÚL', 'SARA', 'LUIS', 'BO', 'RAFA', 'PAM',
'CRUZ', 'ARON', 'GON', 'TATO', 'LOU', 'JAVE', 'TORO', 'RAFA', 'CARRIE',
'CARLA', 'JUAN']
Vocales A E I
['JUAN', 'ANA', 'RAÚL', 'SARA', 'LUIS', 'RAFA', 'PAM', 'ARON', 'TATO', 'JAVE',
'RAFA', 'CARRIE', 'CARLA', 'JUAN']
Vocales Iguales
['ANA', 'SARA', 'RAFA', 'TORO', 'RAFA', 'CARLA']
Nombres Repetidos
['JUAN', 'RAFA']

Ejercicio 4.5. Cálculos con tuplas

El programa pedirá al usuario cuántos números quiere introducir en la tupla. Se pedirán todos
los números y se almacenan en la tupla. Se imprimirá el máximo, el mínimo, la diferencia entre
máximo y mínimo y la media de todos los números dados.
Ejemplo del resultado:

Total elementos 6
Número = 3
Número = 6
Número = 9
Número = 34
Número = 2
Número = 9
(3, 6, 9, 34, 2, 9) Máximo 34 mínimo 2 máximo-mínimo 32 media 10.5

Ejercicio 4.6. Máximos locales de una función

El usuario introducirá todos los resultados arrojados por una función cualquiera y el programa
detectará todos los máximos locales y los contabilizará. Una vez se haya se haya terminado de
introducir todos los datos. El programa mostrará los siguientes cálculos:

• El sumatorio de todos los datos introducidos.


• El promedio de todos los datos introducidos.
• La suma de todos los datos dividida entre el número de máximos encontrados.
• Evitar los posibles errores de entrada de datos y de división por cero.

15
Cuaderno de Ejercicios

Ejemplo del resultado:

Número de puntos de la función == > 10


valor de la función en el punto 1 => 2.0
valor de la función en el punto 2 => 1.5
valor de la función en el punto 3 => 3.5
valor de la función en el punto 4 => 2.1
El valor 3.5 es un máximo local
valor de la función en el punto 5 => 6.7
valor de la función en el punto 6 => 5.8
El valor 6.7 es un máximo local
valor de la función en el punto 7 => 0.1
valor de la función en el punto 8 => 4.7
valor de la función en el punto 9 => 2.0
El valor 4.7 es un máximo local
valor de la función en el punto 10 => 3.5

Suma total 31.900000000000002, Máximos locales 3,


Promedio 3.1900000000000004, Suma/máximos 10.633333333333335

Ejercicio 4.7. Generador de contraseñas

Escribir un programa en Python que genere contraseñas de 8 caracteres de forma aleatoria. 2


caracteres deben letras mayúsculas A-Z, 2 caracteres deben letras minúsculas a-z, 2 caracteres
deben ser dígitos 0-9 y los últimos dos caracteres especiales (!, ?, *, #,=,-,),ç). Revisa el código
ASCII.

Contraseña: MBpd55*-
.

Ejercicio 4.8. Crear acrónimos

Se le pide una oración al usuario y se imprime el acrónimo de la misma (las primeras letras de
cada palabra). No se deben incluir (de, del, y).

Dame una oración: Asociación de Consumidores y Usuarios de España


ACUE

Ejercicio 4.9. Verificar una contraseña

Comprobar si el usuario introduce una contraseña correcta. La contraseña se considera correcta


si tiene mínimo 8 caracteres, letras mayúsculas, minúsculas, números y sin espacios en blanco.
En caso contrario debe indicar error.
Ejemplo del resultado:

Introduce la contraseña: JJPR5


Contraseña no válida.
Introduce la contraseña: Jjrt5iklu
Contraseña válida.
Enunciados: Trabajo complementario

16
Cuaderno de Ejercicios

Enunciados: Trabajo complementario

Complementario 4.1. Generar números triangulares

Calcular todos los números triangulares desde 1 hasta el valor indicado por el usuario. La fórmula
para calcular un número triangular es:
𝑛𝑛(𝑛𝑛 + 1)
𝑇𝑇𝑛𝑛 =
2
Ejemplo del resultado:

Valor de N ==>10
T 1 = 1.0
T 2 = 3.0
T 3 = 6.0
T 4 = 10.0
T 5 = 15.0
T 6 = 21.0
T 7 = 28.0
T 8 = 36.0
T 9 = 45.0
T 10 = 55.0

Complementario 4.2. Imprimir las fichas del juego de dominó

El programa debe de mostrar por pantalla una representación de las fichas de un dominó
estándar.
Ejemplo del resultado:

0|0 ; 0|* ; 0|** ; 0|*** ; 0|**** ; 0|***** ; 0|****** ;


*|* ; *|** ; *|*** ; *|**** ; *|***** ; *|****** ;
**|** ; **|*** ; **|**** ; **|***** ; **|****** ;
***|*** ; ***|**** ; ***|***** ; ***|****** ;
****|**** ; ****|***** ; ****|****** ;
*****|***** ; *****|****** ;
******|****** ;

Complementario 4.3. Convertir un número binario a decimal

El programa pedirá un total de 10 valores al usuario que deberán ser unos o ceros. Estos valores
representarán un número binario. El programa marcará un error en caso de que el valor
introducido no sea correcto y seguirá pidiendo números. El número que se ha introducido
incorrectamente se interpretará en el programa como 0. Se mostrará por pantalla la conversión
a decimal correspondiente y el número binario completo introducido por el usuario.

17
Cuaderno de Ejercicios

Ejemplo del resultado:

Dame un número binario 9 = 0


Dame un número binario 8 = 0
Dame un número binario 7 = 1
Dame un número binario 6 = a
El número no es correcto
Dame un número binario 5 = 0
Dame un número binario 4 = 1
Dame un número binario 3 = 1
Dame un número binario 2 = 0
Dame un número binario 1 = 1
Dame un número binario 0 = 1
El resultado de la conversión del número 0010011011 es 155
Nota: No utilizar la función bin.

Complementario 4.4. Pronóstico de ventas. Promedio móvil ponderado

Se puede predecir el futuro de las ventas para un bien con base en datos históricos, estimaciones
de mercadeo, etc., mediante el uso de varias técnicas, por ejemplo, el promedio móvil
ponderado, donde se asigna un factor de ponderación a cada dato del promedio (su suma debe
ser 100%). Es habitual aplicar el factor de ponderación (porcentaje) mayor al dato más reciente.
La fórmula es:

Donde:

• ^𝑡𝑡 :
𝑋𝑋 Promedio de ventas en unidades en el período t
• Ci: Factor de ponderación
• Xt-1: Ventas o demandas reales en unidades de los períodos anteriores a t
• n: Número de datos
Haga un programa que:

• Pregunte al usuario el número de datos que se necesita para el pronóstico. n.


• Pida los datos (Xt-1) y el factor de ponderación(Ci) por cada dato.
• Compruebe que la suma de los factores de ponderación de los datos sea igual a
100%. Si esto no se cumple se manda un mensaje de error tan pronto se detecte.
Sino, se imprime el pronóstico solicitado.
• Controle los posibles errores (entrada de datos).

Ejemplo de un almacén:

El almacén ha determinado que el mejor pronóstico se encuentra determinado con 4 datos y


utilizando los siguientes factores de ponderación (40%, 30%, 20% y 10%). Determinar el
pronóstico para el mes 5. Los datos se detallan en la siguiente tabla:

18
Cuaderno de Ejercicios

Período Ventas(unidades) Ponderación = (100000 *0,1) + (90000*0,2) + (105000*0,3)


+
Mes 1 100000 10%
(95000 *0,4)
Mes 2 90000 20%

Mes 3 105000 30% Mes 5 = 97500 unidades

Mes 4 95000 40%

Ejemplo del resultado:

Dame n ==> 4
ventas del mes 1: 100000
ponderación de 100000.0 es 10
ventas del mes 2: 90000
ponderación de 90000.0 es 20
ventas del mes 3: 105000
ponderación de 105000.0 es 30
ventas del mes 4: 95000
ponderación de 95000.0 es 40
La previsión es 97500.0

Complementario 4.5. Crear una lista

Escribir un programa en Python que pida una cadena por teclado, introduzca los caracteres en
una lista sin repetir caracteres e imprima la lista final, es decir, los caracteres sin repetir.
Preguntar repetidamente al usuario cuál carácter quiere eliminar de la lista, eliminarlo y mostrar
la nueva lista. El programa se detendrá cuando el usuario introduzca el carácter “*”.
Ejemplo del resultado:

Dame una cadena: esto es la prueba de una cadena cualquiera para ver cómo
trabaja el programa
['e', 's', 't', 'o', ' ', 'l', 'a', 'p', 'r', 'u', 'b', 'd', 'n', 'c', 'q',
'i', 'v', 'm', 'j', 'g']
Carácter a eliminar o (*): o
['e', 's', 't', ' ', 'l', 'a', 'p', 'r', 'u', 'b', 'd', 'n', 'c', 'q', 'i',
'v', 'm', 'j', 'g']
Carácter a eliminar o (*): g
['e', 's', 't', ' ', 'l', 'a', 'p', 'r', 'u', 'b', 'd', 'n', 'c', 'q', 'i',
'v', 'm', 'j']
Carácter a eliminar o (*): *
es: [‘MMM’, 12, 23, 45, 98]

Complementario 4.6. Verificar NIF

Comprobar si el NIF introducido por un usuario es correcto. Un NIF es correcto si tienen 8 dígitos
y letra. La última letra del DNI se calcula a partir de sus números, se divide el número por 23 y
el resto es un número entre 0 y 22. La letra que corresponde a cada número la tienes en esta
tabla:

19
Cuaderno de Ejercicios

Complementario 4.7. Conseguir una cadena

El programa tiene estas variables:

cadena_1="aBcdE"

cadena_2="1465"

Consigue que en pocas sentencias el resultado que veas por pantalla sea:

• 'aBcdEaBcdEaBcdEaBcdE14691469'

Complementario 4.8. Tipos de caracteres

El usuario introducirá un texto, y el programa nos mostrará la cantidad de espacios en blanco


que tiene, la cantidad de letras en mayúsculas, cantidad de letras en minúsculas, cantidad de
números y otros tipos de carácter que tiene el texto introducido.
Ejemplo del resultado:

El texto a analizar: Calcula el número primo de 5


Número de espacios: 5
Cantidad de dígitos: 1
Cantidad de letras en mayúsculas: 1
Cantidad de letras minúsculas, 21
Otros caracteres: 0

Complementario 4.9. Lista de palabras

Pedir al usuario su oración y almacenarla en una variable string. Separar las palabras utilizando
como referencia los espacios entre ellas (no utilizar Split). Buscar en la lista la palabra que tenga
más caracteres y eliminarla. Ordenar la lista e imprimirla al revés.
Ejemplo del resultado:

Dame una frase : esta frase es aleatoria y contiene varias palabras


['esta', 'frase', 'es', 'aleatoria', 'y', 'contiene', 'varias', 'palabras']
elemento aleatoria: lista ['esta', 'frase', 'es', 'y', 'contiene', 'varias',
'palabras']
['contiene', 'es', 'esta', 'frase', 'palabras', 'varias', 'y']
['y', 'varias', 'palabras', 'frase', 'esta', 'es', 'contiene']

20
Cuaderno de Ejercicios

Ejercicio 5. Matrices. Lista de listas

Objetivo

• Crear, modificar y recorrer matrices.


• Conocer las principales funciones de matrices: len, append, insert y pop.
• Implementar algoritmos típicos de matrices.

Enunciados: Trabajo en clase

Ejercicio 6.1. Tuberías

Se anotan los datos de recogida de 5 tuberías de agua durante los siete días de la semana de
una de las máquinas de la fábrica. se creará en el programa principal una matriz de dos
dimensiones del tipo de datos float de 5x7 que contenga ceros en todas sus posiciones.
Se debe:

• Rellenar la matriz con números aleatorios de tipo flotante con valores desde
[150.52 a 321.19]. Se redondean todos los elementos de la matriz para que tengan
solo dos decimales.
• Crear una lista con la suma de los totales de los litros recogidos de cada una de las
cinco tuberías.
• Crear una lista con suma de los totales de los litros recogidos de cada día.
• Buscar el máximo valor de recogida de todos los datos.
• Calcular cuántos litros de agua recibe la máquina.

Ejercicio 6.2. Cálculos y búsquedas sobre matrices

Una empresa de fabricación de frigoríficos tiene varias factorías, de las cuales tenemos la
siguiente información:

• Ciudad en la que se ubica la fábrica.


• Número de unidades fabricadas el año pasado.
• Número de unidades defectuosas fabricadas el año pasado.
• Coste por unidad de cada frigorífico fabricado (en euros).

Ciudad Producción total Defectuosas Coste unitario (€)


Vigo 731 23 3498.54
Lugo 238 12 3823.35
A Coruña 801 26 3324.12
Santiago 510 17 3325.89

Realizar lo siguiente:

• Crear una matriz con datos fijos que contenga en cada fila la información de una
fábrica, en el orden indicado en la lista anterior.

21
Cuaderno de Ejercicios

• Añadir el código necesario para poder añadir información de más fábricas en la


matriz.
• Calcular la producción total conjunta.
• Calcular la producción total conjunta sin errores.
• Mostrar una lista con las ciudades cuya producción total supera las 500 unidades.
• Mostrar cuál es la fábrica con mayor producción total.
• Mostrar la fábrica con menor porcentaje de unidades defectuosas. Mostrar
también el porcentaje redondeado a dos decimales (usar la función round(valor,
núm_decimales).
• Modificar el punto 2 para evitar introducir ciudades repetidas. En esos casos se
notificará el error al usuario y no se pedirá el resto de la información de esa ciudad.
Resultado con los datos de la tabla anterior:

Máxima producción: A Coruña->801


Producción total conjunta: 2280
Producción total conjunta sin errores: 2202
Menor % de errores: Vigo -> 3.15%
Ciudades con producción >=500: ['Vigo', 'A Coruña', 'Santiago']

Enunciados: Trabajo complementario

Complementario 6.1. Suma de matrices

Escribir dos matrices de las mismas dimensiones y calcular la matriz resultante de su suma.

Complementario 6.2. Producto de matrices

Escribir dos matrices y calcular la matriz resultante de su producto. Se debe tener en cuenta que
el número de columnas de la primera matriz debe coincidir con el número de filas de la segunda.

Complementario 6.3.

• Operación elemental: multiplicar una fila por un escalar. Dado un escalar y un


número de fila, multiplicar los valores de ésta por el escalar.

4 1 2 4 1 2
�3 3 2� → 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚1𝑝𝑝𝑝𝑝𝑝𝑝3 → �9 9 6�
1 5 1 1 5 1
• Operación elemental: suma de filas. Dados dos números de fila, sumar a la segunda
los valores de la primera.

4 1 2 4 1 2
�3 3 2� → 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠0𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎2 → �3 3 2�
1 5 1 5 6 3

• Operación elemental: Intercambio de dos filas. Dados dos números de fila,


intercambiar los valores de ambas.

22
Cuaderno de Ejercicios

4 1 2 1 5 1
�3 3 2� → 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖0𝑦𝑦2 → �3 3 2�
1 5 1 4 1 2

• Usando las operaciones elementales anteriores, calcular el determinante por el


método de Gauss.
En http://www.academia.edu/15170735/M%C3%A9todo_de_Gauss_para_calcular_determinantes hay
un recordatorio de cómo hacerlo.

23
Cuaderno de Ejercicios

Ejercicio 6. Funciones y Módulos

Objetivos

• Identificar las funciones más adecuadas para dividir un programa.


• Implementar las funciones identificadas de forma óptima.
• Determinar los parámetros que debe recibir la función para conseguir su objetivo
y los valores de retorno en caso de ser necesario.
• Comprender y saber utilizar las variables en los programas: globales y locales.
• Importar un módulo propio.
• Crear un ejecutable utilizando PyInstaller.

Enunciados: Trabajo en clase

Ejercicio 5.1. Calcular segundos totales

Calcule los segundos de un período de tiempo expresado como horas:minutos:segundos. En las


horas se admitirá un rango de [0-23], en los minutos y segundos [0-59]. Para ello:

• Cree una función que pregunte al usuario el período de tiempo (horas, minutos,
segundos). Esta función recibirá como parámetro de entrada el mensaje que se le
muestra al usuario y el rango válido de cada valor. La función pedirá el dato
deseado hasta que cumpla con el rango.
• Cree una función que reciba ese período de tiempo y calcule los segundos.
• El programa principal llamará a las dos funciones indicadas anteriormente, la
primera será llamada más de una vez para obtener todos los datos, y la segunda
computará los segundos totales. Se mostrará el resultado por pantalla en el
programa principal.
Ejemplo del resultado:

Programa conversor de segundos


Horas 25
Horas 25
Horas 24
Horas 23
Minutos 60
Minutos 59
Segundos 0
Los segundos totales son 86340

Ejercicio 5.2. Calcular el tiempo total de uso de bicicleta eléctrica y el coste

En el servicio de alquiler de bicicletas “El paseo” de la Universidad La Grande, una vez que el
usuario se da de alta en el servicio tiene que indicar al final de mes el número de veces que
utilizó la bicicleta en el campus y el período de tiempo horas:minutos:segundos que empleó en
cada recorrido. El programa calculará el número de segundos totales por recorrido y los
multiplicará por el coste. El coste es de 0,001 €. Desarrolle un programa que:

• Pregunte al usuario el número veces que ha utilizado la bicicleta durante el mes.

24
Cuaderno de Ejercicios

• Por cada vez que la haya utilizado obtenga el período de tiempo


horas:minutos:segundos. Utilice las rutinas creadas en el ejercicio anterior.
• Guarde los datos en una lista. Cree una función que reciba los segundos de cada
período de tiempo y los guarde en la lista.
• Cree una función que recorra la lista y almacene en una cadena los datos de
segundos y coste de cada recorrido, así como los totales acumulados tanto de
segundos como de costes.
• Muestre el resultado en el programa principal. Es aquí donde estará declarada la
lista y el coste por segundo.
Ejemplo del resultado:

Programa conversor de segundos


Número de veces que se usó 3
0 Horas 1
0 Minutos 1
0 Segundos 1
1 Horas 2
1 Minutos 2
1 Segundos 2
2 Horas 3
2 Minutos 3
2 Segundos 3
0 segundos = 3661 = 3.661
1 segundos = 7322 = 7.322
2 segundos = 10983 = 10.983

Segundos Total 21966 = 21.966

Ejercicio 5.3. Operaciones con puntos(x,y)

El usuario introducirá dos puntos cualesquiera (x1,y1) y (x2,y2) y podrá realizar distintas
operaciones: distancia y punto medio.

Para ello:

• Se creará una función que pida un punto y lo almacene en una variable de tipo
tupla.
• Crear una función que reciba los dos puntos como parámetro de entrada y regrese
la distancia entre ambos.
• Función que calcule el punto medio de los dos puntos de entrada.
• Función que imprima las distintas opciones del programa (menú) en pantalla.
• Función que lea la opción escogida por el usuario y compruebe que está en el rango
deseado, de lo contrario seguirá pidiéndola (puede reutilizar la función del
ejercicio 1).
• En el programa principal ensamble las distintas llamadas a las funciones para
conseguir un programa funcional.

25
Cuaderno de Ejercicios

Ejemplo del resultado:

Trabajar con dos puntos


1. Pedir puntos
2. Punto medio
3. Distancia
4. Salir
Opción: 1
Dame X 4
Dame Y 1
Dame X 5
Dame Y 7
( 4 , 1 ) ( 5 , 7 )
Trabajar con dos puntos
1. Pedir puntos
2. Punto medio
3. Distancia
4. Salir
Opción: 2
El punto medio es => ( 4.5 , 4.0 )
Nota: Puede implementar otras rutinas para conseguir el mismo resultado.

Ejercicio 5.4. Ordenar tres números

Se ordenarán tres números introducidos por el usuario de manera ascendente. Se implementará


una función que reciba como parámetro sólo dos números y los retorne ordenados. El resto de
sentencias estarán en el programa principal.
Ejemplo del resultado:

dame un número: 5
dame un número: 3
dame un número: 1
ordenados ==> 1 3 5

Ejercicio 5.5. Realice el ejecutable del programa del ejercicio 4

Ejercicio 5.6. Cree un módulo

Cree un módulo con la función preguntarVal. Esta función recibe una cadena, un valor mínimo
y uno máximo. La función comprueba que el string puede convertirse a numérico y que se
encuentra dentro del rango estipulado. Esta función regresa dos valores true o false (si valor es
adecuado o no) y el valor numérico correspondiente. Utilice este módulo en los ejercicios
importándolo.

Enunciados: Trabajo complementario

Complementario 5.1. Calcular el tiempo total de uso de bicicleta eléctrica

En el ejercicio 2 reestructure el programa para almacenar tuplas que contengan los tres datos
del período de tiempo.

Además:

• Implementar una función que recorra la lista de período y cree otra lista
almacenando los segundos totales de duración del período.

26
Cuaderno de Ejercicios

• Crear una función que ordene las dos listas ascendentemente.


• Crear una función que sume todos los elementos de la lista de segundos totales.
• Mostrar por pantalla, la lista donde se almacena el período de tiempo, los
segundos de cada período y el total de segundos.
Ejemplo del resultado:

Programa conversor de segundos


Número de veces que se usó 3
0 Horas 2
0 Minutos 20
0 Segundos 15
1 Horas 1
1 Minutos 12
1 Segundos 33
2 Horas 1
2 Minutos 9
2 Segundos 45
((1, 9, 45), 4185)
((1, 12, 33), 4353)
((2, 20, 15), 8415)
Total de segundos 16953
Nota. Puede utilizarse las funciones sort, zip, etc.

Complementario 5.2. Trabajando con puntos

Utilice el programa desarrollado en el ejercicio 4. Pida al usuario un número de puntos


cualesquiera. Guarde todos los puntos dados en una lista. Aumente las siguientes opciones al
menú:

• Calcular las distancias entre cada par de puntos dado consecutivamente.


• Calcular el punto medio entre cada par de puntos consecutivos.
• Mostrar la distancia mayor.
Ejemplo del resultado:

Trabajar con dos puntos


1. Pedir puntos
2. Mostrar
3. Salir
Opción: 2
((2, 2), 0, 0)
((4, 5), 3.605551275463989, (3.0, 3.5))
((7, 5), 3.0, (5.5, 5.0))
((9, 12), 7.280109889280518, (8.0, 8.5))
La mayor distancia es 7.280109889280518

Complementario 5.3. Tres en línea

Tienes el código completo del juego Tres en línea, cópialo y comprueba que funcione.
Documenta los parámetros de entrada que recibe cada una de las funciones del juego, y los
valores que regresa, resume también brevemente lo que hace cada una de ellas. Además,
contesta lo siguiente:

• Detalla lo que hace la función llamada: computer_move().


• Cómo se decide que carácter representa al usuario y cuál al ordenador (qué función).

27
Cuaderno de Ejercicios

• Qué se hace para indicar que la tirada del jugador es válida (qué funciones se encargan
y cómo lo hacen).

"""
Tres en línea
"""
import random
board=[i for i in range(0,9)]
player, computer = '',''
#Esquina, Centro y otros
moves=((1,7,3,9),(5,),(2,4,6,8))
# Combinaciones ganadoras
winners=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
# Tabla
tab=range(1,10)
def print_board():
x=1
for i in board:
end = ' | '
if x%3 == 0:
end = ' \n'
if i != 1:
end+='---------\n'
char=' '
if i in ('X','O'):
char=i
x+=1
print(char,end=end)
def select_char():
chars=('X','O')
if random.randint(0,1) == 0:
return chars[::-1]
return chars
def can_move(brd, player, move):
if move in tab and brd[move-1] == move-1:
return True
return False
def can_win(brd, player, move):
places=[]
x=0
for i in brd:
if i == player: places.append(x);
x+=1
win=True
for tup in winners:
win=True
for ix in tup:
if brd[ix] != player:
win=False
break

if win == True:
break
return win
def make_move(brd, player, move, undo=False):
if can_move(brd, player, move):
brd[move-1] = player
win=can_win(brd, player, move)
if undo:
brd[move-1] = move-1
return (True, win)
return (False, False)

28
Cuaderno de Ejercicios

def computer_move():
move=-1
for i in range(1,10):
if make_move(board, computer, i, True)[1]:
move=i
break
if move == -1:
for i in range(1,10):
if make_move(board, player, i, True)[1]:
move=i
break
if move == -1:
for tup in moves:
for mv in tup:
if move == -1 and can_move(board, computer, mv):
move=mv
break
return make_move(board, computer, move)
def space_exist():
return board.count('X') + board.count('O') != 9
player, computer = select_char()
print('El jugador es [%s] y el ordenador es [%s]' % (player, computer))
result='%%% Empate ! %%%'
while space_exist():
print_board()
print('#Tira ! [1-9] : ', end='')
move = int(input())
moved, won = make_move(board, player, move)
if not moved:
print(' >> Número incorrecto ! Inténtalo de nuevo !')
continue
if won:
result='*** Felicidades ! GANASTE ! ***'
break
elif computer_move()[1]:
result='=== PERDISTE! =='
break;
print_board()
print(result)

29
Cuaderno de Ejercicios

Ejercicio 7. Persistencia: Ficheros

Objetivo

• Creación y manipulación de datos en un fichero.


• Creación y manipulación de datos con sqlite 3.

Enunciados: Trabajo en clase

Ejercicio 7.1. Fichero

Supongamos que disponemos de un fichero llamado Datos.txt en el que están guardados los
datos de un laboratorio desde las 8:00 de la mañana hasta las 20:00 horas de un día, los datos
se toman a la hora en punto y a las medias de forma ininterrumpida. Los datos que se recogen
son:

• Hora en formato de horas y minutos como números enteros.


• Presión atmosférica en milibares en forma de número entero sin decimales.
• Temperatura en grados Celsius en forma de número con 1 decimal.
• Humedad relativa en porcentaje en forma de un número con 2 decimales.
• Número de personas que hay en el laboratorio.
• Como ejemplo de un dato del fichero podría ser:
8;30;976;17.1;68.35;9

Partiendo de los datos del fichero anterior se quiere una aplicación informática que muestre:

• ¿Cuál ha sido la media de personas en el laboratorio?


• ¿Cuál ha sido el máximo número de personas en el laboratorio?
• ¿A qué hora se ha registrado el máximo número de personas en el laboratorio?
• ¿Cuál ha sido la temperatura más baja registrada en el laboratorio?
• ¿Cuál ha sido la temperatura media en el laboratorio?

A continuación, se muestra el código de la aplicación que cumple las funcionalidades


anteriormente descritas:
fichero=open("c:/tmp/datos041118.txt" ,"r")
totalpersonas=0
contador=0
máximodepersonas=0
totaltemperatura=0
for linea in fichero:
lista=linea.split(";")
hora=lista[0]
minuto=lista[1]
presión=lista[2]
temperatura=float(lista[3])
humedad=float(lista[4])
personas=float(lista[5])
totalpersonas+=float(personas)
if float(personas)>máximodepersonas:
máximodepersonas=float(personas)

30
Cuaderno de Ejercicios

horamáximodepersonas=hora + ":" + minuto


if contador==0:
mínimotemperatura=float(temperatura)
if float(temperatura)<mínimotemperatura:
mínimotemperatura=float(temperatura)
totaltemperatura+=float(temperatura)
contador+=1
print("Media de personas en el laboratorio: " + str(totalpersonas/contador))
print("Máximo número de personas en el laboratorio: " + str(máximodepersonas)
+ " a las " + str(horamáximodepersonas))
print("Temperatura más baja en el laboratorio: " + str(mínimotemperatura))
print("Media de temperatura en el laboratorio: " +
str(totaltemperatura/contador))
fichero.close()

Se pide realizar un programa que:

• Solicite el nombre de fichero. Seguidamente solicite los datos para grabar la


información del tipo del ejemplo en el citado fichero.
• Ejecutar el programa del ejemplo sobre el fichero que hemos grabado y observar
si da los resultados correctos.
• Modifica el programa del punto 1 para que pregunte al usuario si quiere crear un
fichero de datos nuevo o añadir datos a uno existente. Asegurarse de que no borra
por error uno existente y de que existe al que se quiere añadir. A continuación,
vuelve a ejecutar el programa ejemplo y observe si los resultados obtenidos son
correctos.
• Resolver utilizando funciones.

Para saber el directorio actual de trabajo podemos incluir:


import os.path
ruta=os.getcwd()

Para comprobar si existe el fichero:


if os.path.exists(file):
print("el fichero existe")

Enunciados: Trabajo complementario

Complementario 7.1. Realizar los ejercicios propuestos en el Cuaderno de ejercicios resueltos


correspondientes a la parte de ficheros.

31
Cuaderno de Ejercicios

Ejercicio 8. tkinter. GUI Interfaces Gráficas. Parte I. Introducción

Objetivos:

• Manejo y posicionamiento de algunos widgets.


• Utilización de los atributos más comunes.

Introducción
Python implementa interfaces gráficas de usuario (GUI Graphics User Interfaces) utilizando
librerías, una de las más utilizadas es la librería tkinter que está incluida en Python como un
paquete estándar, por lo que no es necesario instalar nada para usarla. tkinter es el acrónimo
para tk interface y permite generar interfaces de una forma rápida y sencilla.

Pasos para crear una aplicación con tkinter:

1. Importar el módulo tkinter


2. Crear la ventana principal
3. Añadir los widgets necesarios a la ventana
4. Incluir los disparadores en los widgets (responder a eventos)
En esta ejercicio nos centraremos en los tres primeros pasos, los eventos y cómo responder a
ellos lo veremos en la segunda parte.

El módulo de tkinter se importa igual que el resto de módulos utilizando la sentencia import.
from tkinter import *
import tkinter as tk

Los dos métodos anteriores hacen los mismo, pero es muy común ver el segundo donde se
renombra tkinter como tk.
Para inicializar tkinter tenemos que crear la ventana principal (la que contiene todos los widgets)
y mantener el programa en ejecución. Los dos métodos que tenemos que incluir son:

1. Tk(): crea la ventana principal, es la superficie (o contenedor) sobre la cual se van a


colocar los componentes (widgets).
• title(): título de la ventana
• geometry("WxH±X±Y"): dimensiones y desplazamiento
• iconbitmap("file.ico"): cambiar el icono
• quit termina el main loop
• destroy() : termina la ventana
2. mainloop():se utiliza para ejecutar la aplicación. Es un ciclo infinito que recibe y
responde a eventos mientras no se cierre la ventana principal.

32
Cuaderno de Ejercicios

En el tercer paso tenemos que decidir que widgets queremos que formen parte de nuestra
ventana, y darles el aspecto y la ubicación que queremos en la misma. Cada widget tiene
atributos propios.

Widgets
Son pequeños programas que se utilizan para añadir funciones, simplificar o automatizar
aquellas acciones que se lleven a cabo con frecuencia. Para darle contenido y forma a nuestra
ventana incluimos widgets. Listaremos los widgets que utilizaremos en la ejercicio y algunos de
sus atributos.

Label: se traduce como etiqueta y se refiere a una caja donde se puede mostrar texto o
imágenes. La imagen o el código mostrado puede actualizarse durante la ejecución.
lbl=Label(ventana, opción=valor)

image, compound

Entry: permite tanto mostrarle información al usuario como también obtenerla.


txt=Entry(ventana, opción=valor)

Button: pueden contener texto o imágenes y se le puede asociar funciones o métodos. Al hacer
clic sobre ellos tkinter se encarga de llamar automáticamente a la función asociada.
btn=Button(ventana, opción=valor)

image, command, cursor, compound

RadioButton: Permite al usuario escoger una sola opción del conjunto de opciones propuesto.
Se le puede asociar un método que se ejecutará cuando el usuario escoja la opción. Cada grupo
de radio buttons tiene que estar asociado a la misma variable, cuando se selecciona uno de ellos,
el valor de la variable asociada cambia.
opt= Radiobutton(ventana, variable=v, value=1,… opción=valor)

variable: variable de control a la que está asociado, value: valor por defecto si es seleccionado

CheckButton: Seleccionar una o múltiples opciones del conjunto propuesto. Tiene dos valores
posibles: seleccionado y no seleccionado.
chk = CheckButton(ventana, variable=v,..opción=valor)

variable: variable de control a la que está asociado, title, command

Frame: actúa como contenedor de widgets para crear un agrupamiento lógico.

33
Cuaderno de Ejercicios

fr=Frame(ventana, opción=valor)

title, command

Clase PhotoImage: esta clase se utiliza para mostrar imágenes en widgets, tales como, etiquetas,
botones, canvas y tipo texto. Trabaja con GIF y PGM/PPM.
imagen = PhotoImage(file=fichero)

Atributos comunes que aplican a casi todos los widgets

• bd: ancho del bode.


• bg: color de fondo.
• command: llamada a una función.
• font: fuente del texto. Lo que podemos indicar de la fuente es:
o family: nombre: Arial, Courier, Comic Sans MS, Fixedsys, MS Sans Serif,
MS Serif, Symbol, System, Times y Verdana.
o size: tamaño
o weight: NORMAL o BOLD
o slant: NORMAL o ITALIC
o underline: 1(subrayar) o 0(no subrayar)
o overstrike: 1(tachar) o 0 (no tachar)
• fg: color del texto
• image: imagen que quiere mostrarse.
• width: establecer ancho.
• height: establecer alto.
• text: texto que muestra la etiqueta
• justify: justifica texto. Acepta los siguientes parámetros: LEFT, RIGHT y CENTER.
• compound: utilizar al mismo tiempo texto e imágenes: BOTTOM, LEFT, RIGHT y
TOP.
• pady,padx,ipady, ipadx: especifican (en píxeles) los márgenes externos e internos
de un elemento.

Configure

Puede definirse el aspecto de los widgets desde su instanciación o utilizando configure para
cambiar el valor de uno o más atributos del widget.
widget.configure(opción=valor )

34
Cuaderno de Ejercicios

Colocar los widgets en la ventana


Tkinter cuenta con tres clases para administrar la posición de los widgets. Nos centraremos en
las dos primeras:
1. pack(fill=Y, expand=1): organiza los widgets en bloques.
• fill: para que el widget ocupe todo el espacio que se le asigna. Puede expandirse
en: X, Y y BOTH (ambas direcciones).
• expand: indica que se asigne el espacio extra al widget, si expand tiene un valor
distinto de 0.
• side: Indica en qué lado del padre se despliega: TOP (por defecto), BOTTOM,
LEFT o RIGHT.
2. grid(): los widgets se organizan como en una tabla dividida en filas y columnas. Cada
celda contiene un widget que se encuentra centrado. Se empieza en la posición 0 tanto
para filas como para columnas.
• row: renglón.
• column: columna.
• sticky: para pegar el widget a alguno de los bordes: N, S, E, W (norte, sur, este y
oeste).
• columnspan: que el widget ocupe más de una columna.
• rowspan: que el widget ocupe más de un renglón.
3. place(): los widgets se acomodan en las posiciones especificas del programador.

Ejemplo 1. Inicio

Se creará solamente una ventana de unas dimensiones concretas.


#importamos el paquete
from tkinter import Tk
#Creamos una ventana
ventana = Tk()
#establecemos el título de la ventana
ventana.title("Un programa diferente")
#Establecemos el tamaño de la ventana
ventana.geometry("400x400")
#Mostramos un ícono en la ventana
ventana.iconbitmap("robot.ico")
#mostramos la ventana
ventana.mainloop()

Resultado de la ejecución

Ejemplo 2. Incluir widgets

Se incluyen más widgets a la ventana anterior. La idea es crear una interfaz como la que se
muestra. Se utilizará el método pack para colocar los widgets. Puedes usar otras fuentes y
colores.

35
Cuaderno de Ejercicios

from tkinter import *


ventana = Tk()
ventana.title("Un programa diferente")
ventana.geometry("550x550")
ventana.config(bg="azure")
lblFicha = Label(ventana, text="Ficha Técnica", font=("Arial Bold",
20),bg="grey", fg="black").pack()
lblPresenta = Label(ventana, text="Datos más importantes del personaje ",
font=("Arial Bold", 15), fg="red").pack()
imagen = PhotoImage(file="NAO-OJOS.gif")
lblimagen = Label(ventana, image=imagen)
lblimagen.pack()
lblModelo = Label(ventana, text="Modelo", font=("Arial Bold", 10)).pack()
txtModelo = Entry(ventana,width=10).pack()
lblCarac = Label(ventana, text="Características", font=("Arial Bold",
10)).pack()
txtCarac = Entry(ventana,width=30).pack()
lblUni = Label(ventana, text="Unidades", font=("Arial Bold", 10)).pack()
txtUni = Entry(ventana,width=10).pack()
lblPrecio= Label(ventana, text="Precio", font=("Arial Bold", 10)).pack()
txtPrecio = Entry(ventana,width=10).pack()
btnAceptar = Button(ventana,text="Aceptar",width=10,fg="red").pack(side=RIGHT)
btnSalir = Button(ventana,text="Salir",width=10,fg="red",
command=ventana.quit).pack(side=RIGHT)
ventana.mainloop()
ventana.destroy()

Resultado de la ejecución

Enunciados: Trabajo en clase

Ejercicio 8.1. Modificar

Cambiar la interfaz del ejemplo 2 para obtener el siguiente resultado, utilizando grid.

36
Cuaderno de Ejercicios

Enunciados: Trabajo complementario

Complementario 8.1. Agenda

Diseña tu propia interfaz para almacenar tus contactos. La interfaz deberá contener la siguiente
información: foto de la persona, nombre, apellidos, edad, sexo, teléfono, correo electrónico.
Puedes utilizar el grid o pack para colocar los widgets.

37
Cuaderno de Ejercicios

Ejercicio 8. Interfaces Gráficas de Usuario. Parte II

Objetivos

• Utilizar variables de control.


• Invocación e implementación de funciones
• Bosquejo siguiendo orientación a objetos

Variables de control

Son objetos especiales que se asocian a algunos widgets (text, radiobutton, checkbutton, etc.)
para almacenar sus valores y facilitar su disponibilidad en otras partes del programa. Si la
variable cambia, el widget enlazado también cambia y viceversa. Tkinter tiene cuatro tipos de
variables y cuentan con tres métodos: set(), get() y trace. El primero establece el valor, el
segundo lo consulta y el tercero monitoriza los cambios de las variables. Los tipos de variables
son:

• BooleanVar(). True o False.


• StringVar(). Inicializa a “”.
• IntVar(). Inicializa a 0.
• DoubleVar(). Inicializa a 0.0

#Para declararlas: #Dar valor a las variables #Recuperar valor


entero = IntVar() entero.set(100) print("Valor de ", entero.get())
cadena = StringVar() cadena.set("GFG") print("Valor de ", cadena.get())
booleano = BooleanVar() booleano.set(False) print("Valor de ", booleano.get())
flotante = DoubleVar() flotante.set(10.36) print("Valor de ", flotante.get())

El método trace() se emplea para "detectar" cuando una variable es leída, cambia de valor o es
borrada:
widget.trace(tipo, función)

En tipo se indica qué se quiere comprobar: 'r' lectura de variable, 'w' escritura de variable y 'u'
borrado. El segundo argumento indica la función que será llamada cuando se produzca el suceso
que ese está controlando.

Ejemplo 1: Añadiendo más widgets, variables de control y funciones

Utilizaremos la aplicación anterior (Parte I) y le añadiremos dos tipos de controles: radio button
check button, con sus respectivas variables de control. Se creará una función que imprima que
opciones están seleccionadas para mostrar como el cambio en las selecciones afecta a las
variables de control.
El programa comprobará que las unidades tengan un valor de tipo entero, y que el precio tenga
un valor de tipo flotante. Se añadirá una etiqueta para desplegar el resultado de la multiplicación
de las unidades por el precio y otra etiqueta donde se desplegarán los mensajes de error en caso
de haberlos. Cada vez que el valor de unidades o el precio sea modificado por el usuario, se

38
Cuaderno de Ejercicios

comprobará primero que el valor sea del tipo adecuado, si lo es, el total se calcula y se muestra
en la etiqueta correspondiente, en caso contrario, se muestra el mensaje de error. Para ello, se
crearán también las variables de control para los widgets: precio y unidades, se utilizará el
método trace para saber cuándo cambian el valor.
Cuando el usuario pulse el botón Aceptar se comprobará que los campos sean distintos de
blanco (Nombre, Características y Unidades), si alguno está en blanco se mandará el mensaje de
error en la etiqueta creada para ello, si tienen un valor, se mostrará: LISTO!!!. El código quedaría:
Resultado de la ejecución

from tkinter import *


ventana = Tk()
ventana.title("Un programa")
ventana.geometry("560x390")

#Creación de las variables


withEntry=15
usado=IntVar()
control=BooleanVar()
baterias=BooleanVar()
unidades = IntVar()
mensaje=StringVar()
total=DoubleVar()
precio=DoubleVar()
carac=StringVar()
modelo=StringVar()
colorN=0

#funciones
def comprobar(*args): #declaración de la función con los parámetros por
defecto
try:
mensaje.set(" ") #limpiar la etiqueta del mensaje
uni=int(unidades.get()) #Obtener los valores de las variables y
convertirlos
prec=float(precio.get()) #al tipo de dato
total.set(round(float(prec*uni),2)) #Calcular el precio final y
redondearlo
except:
mensaje.set("ERROR") #Mostrar el error
total.set(0) # Dejar 0 en el total
#Muestra por que opciones está marcadas, cada vez que el usuario selecciona
una
def Imprimir():
print("Usado " + str(usado.get())) #Indica que opción está marcada
print("Baterias "+ str(baterias.get())) #Muestra true o false si están
marcadas las baterias

39
Cuaderno de Ejercicios

print("Control " +str(control.get()))#Muestra true o false si están


marcada la opción de control
#Si los campos tienen valores entoces LISTO y en otro caso indica completar
def Aceptar():
if modelo.get()=="" or carac.get()=="" or unidades.get()=="" or
precio.get()=="":
mensaje.set("FALTA COMPLETAR") #Mostrar el error
else:
mensaje.set("LISTO") #Mostrar el error

def CambiaColores(event):
colores=["azure","cadet blue","medium sea
green","goldenrod","salmon","maroon","PeachPuff3","SteelBlue3"]
colorM=len(colores)
global colorN
if colorN==colorM-1:
colorN=0
else:
colorN+=1
ventana.config(bg=colores[colorN])

#Pone un valor por defecto


usado.set(1)
#Indicar seguimiento de las variables
unidades.trace('w',comprobar)
precio.trace('w',comprobar)

#Creamos la etiqueta y la ponemos en la ventana


lblFicha = Label(ventana, text="Ficha Técnica", font=("Arial Bold",
15),bg="plum3", fg="grey45")
lblPresenta = Label(ventana, text="Datos más importantes del personaje",
font=("Arial Bold", 15))
imagen = PhotoImage(file="NAO-OJOS.gif")
lblimagen = Label(ventana, image=imagen,bg="grey")
lblNombre = Label(ventana, text="Nombre", font=("Arial Bold", 10),
fg="RoyalBlue2")
txtModelo = Entry(ventana,width=withEntry,fg="blue2",textvariable=modelo)
lblCarac = Label(ventana, text="Características", font=("Arial Bold", 10),
fg="RoyalBlue2")
txtCarac = Entry(ventana,width=withEntry,fg="blue2",textvariable=carac)
lblUni = Label(ventana, text="Unidades", font=("Arial Bold", 10),
fg="RoyalBlue2")
txtUni = Entry(ventana,width=withEntry,fg="blue2",textvariable=unidades)
lblPrecio= Label(ventana, text="Precio", font=("Arial Bold", 10),
fg="RoyalBlue2")
txtPrecio = Entry(ventana,width=withEntry,fg="blue2",textvariable=precio)
lblTotalE= Label(ventana, text="Total", font=("Arial Bold", 10),
fg="RoyalBlue2")
txtTotal= Entry(ventana, width=withEntry,text="",
fg="blue2",textvariable=total)
lblMensaje= Label(ventana, text="Precio", width=withEntry*2, font=("Arial
Bold", 10),textvariable=mensaje, fg="red",bg="pink")
#Nuevas etiquetas para los radio button
optNuevo=Radiobutton(ventana, text="Nuevo", font=("Arial Bold",
9),variable=usado,value=1,command=Imprimir)
optSemi=Radiobutton(ventana, text="Semi", font=("Arial Bold",
9),variable=usado,value=2,command=Imprimir)
optUsado=Radiobutton(ventana, text="Usado", font=("Arial Bold",
9),variable=usado,value=3, command=Imprimir)
#Nuevas estiquetas paras los check
chkControl=Checkbutton(ventana, text="Control", font=("Arial Bold",
9),variable=control, command=Imprimir)
chkBaterias=Checkbutton(ventana, text="Baterias", font=("Arial Bold",
9),variable=baterias, command=Imprimir)
btnAceptar = Button(ventana,text="Aceptar",width=10,fg="red",command=Aceptar)
btnSalir = Button(ventana,text="Salir",width=10,fg="red",
command=ventana.quit)

40
Cuaderno de Ejercicios

#mostramos las etiquetas


lblFicha.grid(row=0,column=1,columnspan=3,padx=3,pady=5,ipadx=3,ipady=3)
lblPresenta.grid(row=1,columnspan=4)
lblimagen.grid(column=0,row=2,columnspan=2,rowspan=10,padx=10,pady=10,ipadx=3,
ipady=3)
lblNombre.grid(row=3,column=2,sticky=W)
txtModelo.grid(row=3,column=3,sticky=W)
lblCarac.grid(row=4,column=2,sticky=W)
txtCarac.grid(row=4,column=3,sticky=W)
lblUni.grid(row=5,column=2,sticky=W)
txtUni.grid(row=5,column=3,sticky=W)
lblPrecio.grid(row=6,column=2,sticky=W)
txtPrecio.grid(row=6,column=3,sticky=W)
lblTotalE.grid(row=7,column=2,sticky=W)
txtTotal.grid(row=7,column=3,sticky=W)
lblMensaje.grid(row=8,column=2,columnspan=2,pady=5)
optNuevo.grid(row=9,column=2,sticky=W)
optSemi.grid(row=9,column=3,sticky=W)
optUsado.grid(row=9,column=4,sticky=W)
chkControl.grid(row=10,column=2,sticky=W)
chkBaterias.grid(row=10,column=3,sticky=W)
btnAceptar.grid(row=11,column=2)
btnSalir.grid(row=11,column=3)

lblimagen.bind('<Button-1>',CambiaColores)

ventana.mainloop()
ventana.destroy()

Enunciados: Trabajo en clase

Ejercicio 8.2. Codificar la agenda

Codificarás el comportamiento deseado en la agenda que has diseñado en el ejercicio de


introducción.

• Cada vez que se modifique el campo edad comprobar que el nuevo dato es un tipo
de dato entero en caso contrario, mandar un mensaje de error.
• Comprueba el número de teléfono debe de tener 9 caracteres y todos deben de
ser numéricos.
• Haz lo mismo con el campo correo electrónico, para indicar que el campo es
correcto, basta con que tenga el signo “@” y un punto.
• Añade tres botones: Limpiar, Aceptar, Salir.
• En el botón limpiar blanquea todos los campos.
• En el botón Aceptar comprueba que todos los campos tengan información.

Nota: Utiliza el código que tienes de otros ejercicios

41
Cuaderno de Ejercicios

Ejercicio 8.3. Cálculos de proyectil

Un proyectil disparado a una velocidad vo y un ángulo a (radianes), seguirá una trayectoria


descrita por las siguientes fórmulas, donde t es el tiempo y g es la gravedad:

x = vo*cos(a)*t

y = vo*sin(a)*t-0.5*g*t**2

• Implementar una aplicación de ventanas que permita al usuario introducir los


parámetros en campos de entrada, realizar 3 tipos de cálculos al pulsar sendos
botones y mostrar los resultados en etiquetas:
• Distancia y tiempo de impacto a partir de velocidad y ángulo de salida usando un
bucle.
• Distancia y tiempo de impacto a partir de velocidad y ángulo de salida usando
fórmula.
• Ángulo de salida y tiempo de impacto a partir de velocidad y distancia de impacto.

Eventos y enlazado

Las aplicaciones tkinter se encuentran dentro de un ciclo, el mainloop y los eventos son sucesos
que se le comunican y que tienen distintos orígenes: presionar el ratón, cambiar el tamaño de
un widget, presionar teclas, etc. (muchos de los eventos son producidos por el usuario). Python
registra el evento y nos permite enlazarlo a un widget y ejecutar una función para responder a
dicho evento. Para enlazar el evento:

widget.bind(event, handler)

Si el evento que indica se registra en el widget se produce una llama al manejador y por tanto a
la función indicada.

Algunos Eventos

• <Button-1> Se presiona un botón el ratón, el button-1, es el botón de la izquierda,


button-2 es el del medio (si está disponible) y el button-3 el botón de la derecha.

42
Cuaderno de Ejercicios

• <B1-Motion> El ratón se mueve mientras el botón 1 (izquierdo) está presionado.


Se cuenta con B2-Motion, B3-Motion.
• <ButtonRelease-1> Se libera el botón uno del ratón.
• <Double-Button-1> Se hace doble clic sobre el button-1
• <Enter> El puntero del ratón entra en el widget.
• <Leave> El puntero del ratón sale del widget.
• <Return> Se presiona Enter.
• <Key> El usuario presiona cualquier tecla.

El objeto event

Es un objeto estándar de Python que tiene atributos que describen al evento que se ha
producido. Algunos atributos del evento son:

• widget: El widget que genera el evento.


• x, y: Coordenadas de la posición del ratón.
• Type: tipo de evento.

Ejemplo 2. Clic en la imagen

Cada vez que el usuario haga clic en la imagen el color del fondo de la ventana cambiará. Se
creará una lista con colores aleatorios, cada vez que el usuario haga clic se escogerá el siguiente
color. El código que debemos incluir es:

#Rutina que cambia el color del fondo del widget


#declaración de la variable que mantiene el color actual.
colorN=0

def CambiaColores(event):
colores=["azure","cadet blue","medium sea
green","goldenrod","salmon","maroon","PeachPuff3","SteelBlue3"]
colorM=len(colores)
global colorN
if colorN==colorM-1:
colorN=0
else:
colorN+=1
ventana.config(bg=colores[colorN])

lblimagen.bind('<Button-1>',CambiaColores) #Enlaza la etiqueta imagen con el


clic del ratón

43

También podría gustarte