Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2023
Cuaderno de Ejercicios
INFORMÁTICA PARA LA INGENIERÍA
Cuaderno de Ejercicios
Tabla de contenido
INTRODUCCIÓN .......................................................................................................................2
INTRODUCCIÓN .....................................................................................................................32
WIDGETS .............................................................................................................................33
COLOCAR LOS WIDGETS EN LA VENTANA ...................................................................................... 35
1
Cuaderno de Ejercicios
Objetivos
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/.
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
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.
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.
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.
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.
Crea dos variables de tipo cadena de caracteres. Asígnales los siguientes valores: “Buenos” y
“días”. Escribe las siguientes sentencias:
Crear dos variables de tipo carácter y asignarles el siguiente valor: “abc” y “aAb”. Crear las
sentencias que permitan saber si:
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.
• 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
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.
La distancia entre los puntos (2.0, 3.0, 4.0) y (5.0, 6.0, 7.0) es :
5.196152422706632
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.
Familiarizarse con el Debug para comprobar cómo cambian las variables conforme se va
ejecutando un programa.
6
Cuaderno de Ejercicios
Objetivos
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.
Pedir al usuario su nombre y sus dos apellidos, almacenarlos en tres variables. Hacer las
siguientes sentencias:
7
Cuaderno de Ejercicios
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:
• 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.
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:
8
Cuaderno de Ejercicios
Complementario 2.1. Realizar los ejercicios de cadenas del cuaderno de ejercicios resueltos.
9
Cuaderno de Ejercicios
Objetivos
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:
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:
Sumar los dígitos de un número entero positivo previamente introducido por el usuario. Piensa
dos formas distintas de hacerlo.
Ejemplo del resultado:
10
Cuaderno de Ejercicios
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
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
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:
11
Cuaderno de Ejercicios
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.
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
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
Objetivos
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:
13
Cuaderno de Ejercicios
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
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.
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']
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
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:
15
Cuaderno de Ejercicios
Contraseña: MBpd55*-
.
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).
16
Cuaderno de Ejercicios
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
El programa debe de mostrar por pantalla una representación de las fichas de un dominó
estándar.
Ejemplo del resultado:
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
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:
Ejemplo de un almacén:
18
Cuaderno de Ejercicios
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
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]
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
cadena_1="aBcdE"
cadena_2="1465"
Consigue que en pocas sentencias el resultado que veas por pantalla sea:
• 'aBcdEaBcdEaBcdEaBcdE14691469'
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:
20
Cuaderno de Ejercicios
Objetivo
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.
Una empresa de fabricación de frigoríficos tiene varias factorías, de las cuales tenemos la
siguiente información:
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
Escribir dos matrices de las mismas dimensiones y calcular la matriz resultante de su suma.
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.
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
22
Cuaderno de Ejercicios
4 1 2 1 5 1
�3 3 2� → 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖0𝑦𝑦2 → �3 3 2�
1 5 1 4 1 2
23
Cuaderno de Ejercicios
Objetivos
• 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:
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:
24
Cuaderno de Ejercicios
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
dame un número: 5
dame un número: 3
dame un número: 1
ordenados ==> 1 3 5
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.
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
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:
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
Objetivo
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:
Partiendo de los datos del fichero anterior se quiere una aplicación informática que muestre:
30
Cuaderno de Ejercicios
31
Cuaderno de Ejercicios
Objetivos:
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.
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:
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
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)
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)
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)
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
Ejemplo 1. Inicio
Resultado de la ejecución
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
Resultado de la ejecución
Cambiar la interfaz del ejemplo 2 para obtener el siguiente resultado, utilizando grid.
36
Cuaderno de Ejercicios
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
Objetivos
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:
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.
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
#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
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])
40
Cuaderno de Ejercicios
lblimagen.bind('<Button-1>',CambiaColores)
ventana.mainloop()
ventana.destroy()
• 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.
41
Cuaderno de Ejercicios
x = vo*cos(a)*t
y = vo*sin(a)*t-0.5*g*t**2
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
42
Cuaderno de Ejercicios
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:
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:
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])
43