Apuntes Python
Apuntes Python
2021-2022
Bloque 1: Programación
Programando en Python
1. Introduccion
Un ordenador es, en esencia, un sistema capaz de realizar cálculos y tomar decisiones lógicas a
una velocidad increíblemente alta.
Dentro de estos sistemas distinguimos una parte física, hardware, formada por todos los
componentes que “se pueden tocar”, que son reales y una parte lógica, software, compuesta por
todos los datos que la máquina es capaz de procesar y almacenar.
El ordenador procesará (utilizará) estos datos según el control realizado por una secuencia de
instrucciones predefinidas a las que llamaremos programas.
Programa informático: “texto” que incluye las instrucciones que un ordenador va a necesitar
ejecutar para poder resolver un problema.
Al igual que podríamos utilizar distintos lenguajes (inglés, español…) para escribir un texto
tradicional, existen muchos lenguajes de programación diferentes.
El objetivo de esta unidad es aprender a utilizar el lenguaje Python para crear programas que
resuelvan situaciones concretas.
-1-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
2. Algoritmos
Algoritmo: Serie de pasos a seguir para realizar una determinada tarea técnica.
Un algoritmo se parece a una receta. Una receta dice cómo preparar un plato siguiendo una
serie de pasos. Por ejemplo, para preparar un pastel los pasos a seguir serían: Precalentar el horno,
mezclar la harina con el azúcar y los huevos, poner la mezcla en un molde… y así sucesivamente.
Sin embargo, el término algoritmo es un término técnico más específico que una simple receta.
Para que una “receta” pueda llegar a ser llamada algoritmo ha de cumplir las siguientes condiciones:
1. Debe ser una descripción no ambigua que define de manera clara que debe hacerse en cada
paso. En una receta, un paso del tipo “cocinar hasta que esté hecho” es ambiguo, porque no
deja claro que quiere decir “hecho”. Una descripción más objetiva como “cocinar hasta que
el queso comience a burbujear” sería más adecuada.
2. Un algoritmo ha de definir el tipo de entradas, tipo de datos que se van a suministrar al
programa. Por ejemplo, se puede requerir dos números y que ambos sean mayores que cero.
O puede requerir una palabra, o una lista de tres números.
3. Un algoritmo generará un conjunto de salidas con características definidas. Por ejemplo,
puede generar el número que sea mayor de dos entradas, la versión en mayúsculas de una
palabra, una lista ordenada de números…
4. El algoritmo siempre ha de terminar y producir un resultado en un tiempo finito.
5. Un algoritmo ha de ser capaz de generar el resultado correcto en cualquier situación. No
sería útil tener un algoritmo que resolviera un problema en el 99% de casos posibles.
6. Si un algoritmo impone una condición a las entradas (precondición), esa condición se debe
satisfacer. Por ejemplo, una precondición podría ser que el algoritmo solamente aceptara
números positivos como entradas. Si las precondiciones no se cumplen sería aceptable que
el algoritmo produjera una respuesta incorrecta o que nunca llegara a terminar.
Crear el algoritmo que resuelva el problema es un paso básico en el proceso de programación.
Ejemplo: Dada una lista de números positivos, devuelve el número mayor de la lista.
- Entradas (Inputs): Una lista L de números positivos, debe contener al menos un número.
- Salidas (outputs): Una “caja” que llamaremos max, almacenará el número mayor de la lista.
- Algoritmo:
o Asignar a max el valor 0.
o Para cada número x en la lista L, comparar su valor con max. Si x es mayor que max,
asignar a max el valor x.
o Mostrar el valor almacenado en max que contiene el valor máximo en la lista.
¿Satisface esta “receta” los criterios para ser considerada un algoritmo?
1. ¿Es no ambigua? Si. Cada paso es una operación sencilla fácilmente traducible a un código
de programación (Python en nuestro caso).
2. ¿Se definen las entradas? Sí
3. ¿Se definen las salidas? Sí.
4. ¿Está garantizada su finalización? Sí. La lista L tiene un tamaño finito, por lo tanto, tras
revisar cada elemento de la lista el algoritmo se detendrá.
5. ¿Produce el resultado correcto? Si. En un entorno más formal habría que probar su
corrección de forma más rigurosa.
-2-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
3. Diagramas de flujo
La representación de algoritmos a través de bloques de texto es tediosa y difícil de interpretar
por una persona distinta de la que lo ha elaborado. Normalmente utilizaremos los llamados:
Diagrama de flujo: Representación gráfica mediante símbolos de un algoritmo.
Dentro de los símbolos se escribirán los pasos a seguir en el proceso.
Los diagramas de flujo, son herramientas importantes ya que permiten crear la estructura del
programa sin necesidad de dominar un lenguaje de programación.
La creación de la estructura del programa o algoritmo es la primera fase en el desarrollo de un
programa; previa a la codificación.
Siempre se recomienda crear un diagrama de flujo si queremos que otros puedan comprender
fácilmente cómo funciona nuestro algoritmo.
La única desventaja que supone utilizar diagramas de flujo es el espacio. En programas
elaborados, un diagrama de flujo puede necesitar varias hojas para su desarrollo. Por tanto el orden
es sumamente importante, las hojas deben ser numeradas y señaladas.
Actualmente contamos con software diseñado para la elaboración de diagramas de flujo y
herramientas online que permiten hacer el trabajo de forma más fácil y rápida.
Software instalado en los ordenadores de la sala de informática yEd graph Editor.
Es usado para ejecutar una orden. Por ejemplo, para hacer una
asignación, calcular una operación, etc.
Proceso
-3-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Decisión
-4-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
-5-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
-6-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
-7-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
-8-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
-9-
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
5. Instalacion Python
Para poder ejecutar en un ordenador un programa escrito utilizando el lenguaje Python es
necesario instalar en dicha máquina un software al que llamaremos interprete Python.
Interprete Python: Paquete de software que ejecuta el código incluido en el archivo Python.
Es una aplicación que lee el código y ejecuta las órdenes contenidas en el archivo de forma
secuencial, comenzando con la primera orden y bajando progresivamente hasta llegar a la última.
Es una capa de software intermedia entre el código original y el hardware sobre el que va actuar.
La instalación de Python supone la instalación una serie de elementos, entre ellos y por lo menos
tendremos el intérprete de Python y una librería de soporte.
La forma de instalar Python depende del sistema operativo empleado. Las diferentes versiones
se pueden descargar desde: https://www.python.org/
Activamos la opción AddPython 3.8 to PATH. Esto, como veremos más adelante, permitirá al
sistema operativo encontrar Python desde la consola. A continuación, hacemos clic en el botón
Install Now, iniciando el proceso de instalación. Si el programa de instalación pide permiso para
realizar cambios en el sistema operativo lo autorizaremos.
- 10 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Este archivo se instala con las actualizaciones de Windows. También se puede obtener a través
del archivo que instala Visual C++ Redistributable de Microsoft (https://www.microsoft.com/es-
ES/download/details.aspx?id=48145).
- 11 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Siguiendo los pasos que se ven en la siguiente imagen nos dirigimos al lugar donde hayamos
guardado nuestro archivo.py:
- 12 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
También es posible ejecutar el programa haciendo doble clic sobre su icono (parecerá
que no, ya que se cierra al terminar la ejecución) o a través del IDE que estemos
utilizando (esta opción la veremos más adelante).
Desde el punto de vista del intérprete de Python
¿Qué es lo que está ocurriendo a nivel interno? Al ejecutar la aplicación suceden varias cosas
que el programador no observa:
1. Compila el código fuente en algo llamado “bytecode”.
Compilar: Proceso de traducción mediante el cual transformamos la información contendida
en el archivo .py, dividiéndola en procesos más sencillos y traduciéndola a un idioma de más
bajo nivel (más cercano a lo que el ordenador puede entender directamente).
Estos bytecodes son multiplataforma y por lo tanto portables y capaces de funcionar en cualquier
ordenador que tenga instalada la versión de Python en la que el bytecode ha sido compilado.
Si el proceso Python tiene acceso al proceso de escritura en el ordenador guardará el archivo con
una extensión .pyc (py compilado). Estos archivos se guardarán en un subdirectorio llamado
_pycache_ situado en el directorio donde reside el .py y con un nombre que también indicará la
versión con la que fue creado (ej. nombreArchivo.cpython-36.pyc).
Una vez creado el pyc, cuando volvamos a ejecutar el programa, Python saltará el proceso de
compilación y por lo tanto la ejecución será mucho más rápida.
En caso de que el intérprete detecte que ha cambiado algo en código fuente o que la versión de
Python que intenta ejecutar la aplicación sea diferente se volvería a ejecutar la compilación.
Si Python no tiene acceso al proceso de escritura en el ordenador, el proceso de compilación se
tendrá que ejecutar cada vez que ejecutemos el código fuente, ralentizando el proceso. Siempre
que sea posible es aconsejable trabajar de la primera forma.
Si trabajamos desde el terminal, nunca podremos generar el archivo .pyc.
2. Enviamos el bytecode a una “máquina virtual”. Una vez compilado y cargado en memoria
el bytecode es enviado para su ejecución a una aplicación llamada Máquina virtual de Python
(PVM).
- 13 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Máquina virtual de Python: Parte del intérprete de Python capaz de ejecutar estos bytecodes.
Software que simula el funcionamiento de un ordenador prescindiendo de las características
específicas de cada sistema operativo y configuración de hardware.
Estamos hablando pues de un proceso intermedio entre un traductor (lenguajes como basic) que
tendría que compilar completamente cada línea de código cada vez que se ejecuta en el programa
y un lenguaje compilado puro (C++) en el cual el proceso de compilación genera un archivo en un
código máquina que entienda directamente MI ordenador. La velocidad es intermedia, pero la
ventaja es que la PVM es capaz de tratar el bytecode y transformarlo en algo que CUALQUIER
ordenador entenderá, adaptándolo a su propia arquitectura.
Tipos de Python
Existen múltiples distribuciones diferentes del lenguaje Python. Las tres más importantes son:
- CPython: Es el estándar, la llamamos CPython para contrastarla del resto, sino nos
referiremos a ella como Python simplemente.
- Jython, para Java: Compila el código fuente en un bytecode propio del lenguaje Java y el
resultado se ejecuta en una máquina virtual de Java (JVM). La integración es total, un
programa en Jyhton funcionará aparentemente como una aplicación Java, el código podrá
importar otras clases (programas) escritos en Java…
- IronPython, para .NET: Similar al anterior pero diseñado para trabajar con las aplicaciones
.NET de Microsoft (y el equivalente Mono de Linux).
A lo largo de esta unidad trabajaremos con CPython.
- 14 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
También podemos seleccionar la opción Python contenida en el menú del mismo nombre
contenida en el menú de inicio.
En que veamos los iconos >>> quiere decir que estamos en una sesión interactiva del intérprete
de Python y podemos ejecutar ordenes en Python.
Atajo: La forma más rápida de acceder al intérprete de Python es abrir el cuadro de
diálogo ejecutar (tecleando TeclaWindows+R) y escribir en él la palabra python.
El hecho de que al teclear Python sin más el ordenador sea capaz de ejecutarlo se debe a que el
sistema operativo es capaz de encontrar donde está instalado Python por haberlo incluido esta ruta
en su path de búsqueda de programas cuando hemos realizado la instalación.
Si el ordenador no fuera capaz de encontrarlo (o hubiera instalada más de una versión y
quisiéramos ejecutarla en lugar de la versión por defecto) habría que añadirlo en la llamada (por
ejemplo c:\python27\python).
A esta forma de trabajar, escribiendo algo de código en la ventana y ejecutarlo directamente se
le llama crear código interactivamente. Cada vez que se pulsa enter se muestra el resultado de la
orden ejecutada (ni siquiera haría falta poner print)
>>>pera = 'okay'
>>>pera
'okay'
>>>2 ** 8
256
Esta forma de trabajo no permite guardar código, normalmente no la utilizaremos, pero permite:
Experimentar con el lenguaje sin riesgo a estropear cosas que funcionan en el programa real.
Probar archivos ya programados al vuelo.
Cuando utilizamos una orden que requiere más de una línea de código (ordenes
compuestas) es necesario hacer dos veces clic en Enter para ejecutar el programa.
Vamos a comenzar a utilizar algunos sencillos comandos de Python, para comprender su
funcionamiento utilizaremos una sesión interactiva a través de la consola.
Salir de la sesión interactiva: Ejecuta la orden exit()
- 15 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
8. Tipos de datos
Python puede manejar los siguientes tipos de datos:
- 16 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 17 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 18 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 19 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 20 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 21 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 22 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 23 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
“rebanadas de texto”
Una rebanada de texto es una porción de una cadena de caracteres con más de un carácter.
Para definir una rebanada de texto utilizaremos la siguiente notación:
variable[a:b]
Donde variable es el nombre de la variable que contiene la cadena de caracteres, a es el índice
del primer carácter incluido en la rebanada y b el índice el primer carácter excluido de la rebanada.
Sería algo parecido a un intervalo [a,b) en matemáticas.
>>>variable = 'melocotón'
>>>print(variable[0:3]) #desde la posición 0 (incluida) hasta la 3 (excluida)
mel
Esta forma de definir los intervalos permite dividir cadenas en dos partes de manera sencilla:
>>>variable = 'melocotón'
>>>print(variable[:3])
mel
>>>print(variable[3:])
ocotón
Observa que si no definimos el índice inicial de la rebanada se toma por defecto el valor
cero y si no definimos el índice final se toma la longitud total de la cadena.
- 24 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
12. Listas
Lista: Tipo de variable que se capaz de almacenar más de un valor. Cada uno de los valores
queda definido por un subíndice.
La forma más sencilla de definir una lista es a través de un bloque de elementos agrupados entre
corchetes y separados entre sí por medio de comas:
>>> cuadrados = [1, 4, 9, 16, ‘palabra’]
>>> cuadrados
[1, 4, 9, 16, ‘palabra’]
Cada elemento de la lista pasa a estar indexado de forma análoga a la vista en el punto anterior:
>>>cuadrados[0] # índices retornan un ítem
1
>>>cuadrados[-1]
‘palabra’
>>>print(cuadrados[-1])
palabra
>>>cuadrados[-3:] # rebanadas retornan una nueva lista
[9, 16, ‘palabra’]
Modificar el valor almacenado en un elemento de la lista:
>>>cubos = [1, 8, 27, 65, 125] # hay algo mal aquí
>>> 4 ** 3 # el cubo de 4 es 64, no 65!
64
>>>cubos[3] = 64 # reemplazar el valor incorrecto
>>>cubos
[1, 8, 27, 64, 125]
En el ejemplo anterior modificamos el valor almacenado en el cuarto elemento de la lista.
Modificar los valores almacenados en una rebanada
Podemos modificar, borrar parcialmente, borrar completamente…
Ojo: Recuerda que el intervalo está cerrado por la izquierda y abierto por la derecha.
>>>letras = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>>letras
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # reemplazar algunos valores
>>>letras[2:5] = ['C', 'D', 'E']
>>>letras
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # ahora borrarlas
>>>letras[2:5] = []
>>>letras
['a', 'b', 'f', 'g']
>>> # borrar la lista reemplazando todos los elementos por una lista vacía
>>>letras[:] = []
>>>letras
[]
- 25 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 26 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 27 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Una variación. Podemos utilizar las propiedades de la ventana de comandos, así si ejecutamos
el programa según:
python script1.py > saveit.txt
El resultado se guardará en un archivo de nombre saveit.txt en el directorio de trabajo.
En Windows 7 podemos escribir directamente el nombre modulo (sin anteponer la
palabra Python) ya que el SO reconoce la extensión .py
- 28 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
x = 'Spam!'
print(x * 8) # Repetimos una cadena de texto ocho veces
input() # <== ADDED
Input queda esperando la siguiente información que se introduzca por teclado. En este contexto
lo utilizaremos como una pausa. Al pulsar la tecla Enter el programa terminará.
Ejecutar los programas por clic tiene muchas más limitaciones (por ejemplo detección de
errores).
- 29 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
13.6 PyCharm
PyCharm es un entorno de desarrollo integrado (IDE) utilizado en programación y
específicamente para el lenguaje Python. Está desarrollado por la empresa checa JetBrains.
PyCharm es multiplataforma, con versiones de Windows, macOS y Linux. Existe una edición “
Community Edition” gratuita y también hay una edición profesional con características adicionales,
lanzada bajo una licencia propietaria.
- 30 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 31 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 32 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 33 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Ejercicio: Crea un proyecto que sea capaz de leer dos números enteros que introduciremos a través
del teclado, realizará la suma de los dos y mostrará el resultado por pantalla. Añade tantos
comentarios como sea necesario para conseguir que el código sea fácilmente entendible.
La salida debe ser similar a:
Introduce el primer entero: 45
Introduce el Segundo entero: 72
La suma es: 117
- 34 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 35 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Crea un módulo que pida al usuario un número positivo. La respuesta ha de ser almacenada en un
variable a la que llamaremos numero. Comprueba si el número es negativo. Si lo es, el programa
debe avisar del error. Finalmente el programa muestra siempre el número por pantalla.
- 36 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 37 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 38 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 39 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 40 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
En otros casos el valor que toma la variable de control en cada iteración es fundamental.
Modifica el código del ejemplo anterior para, utilizando un bucle for con tres iteraciones, calcular
los cuadrados de 3, 4 y 5.
Python considerará que pertenece al bucle todo el código indentado que tenga la misma
indentación que la línea siguiente a la línea con la orden for.
La lista puede contener cualquier tipo de elementos, no sólo números.
Modifica el código del ejemplo anterior para, utilizando un bucle for con tres iteraciones, crear tres
saludos personalizados a tres amigos que se llaman Luis, Mireia y Andrés.
Bucle controlado por una cadena de caracteres
En este caso:
- El bucle realizará tantas iteraciones como caracteres tenga la cadena de caracteres.
- En cada iteración la variable irá tomando sucesivamente en cada iteración cada uno de los
caracteres.
for i in "AMIGO":
print("Dame una ", i)
print("¡AMIGO!")
Mostrará como resultado:
Dame una A
Dame una M
Dame una I
Dame una G
Dame una O
¡AMIGO!
Escribe un programa que, utilizando un bucle for, muestre la tabla de multiplicar de un número que
el usuario introduzca a través del teclado.
Bucle controlado por un range()
Un tipo range se puede definir de tres maneras:
- 41 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Ejemplo: Código para mostrar diez veces la palabra Hola utilizando un bucle for y un tipo range(a).
print("Comienzo")
for i in range(10):
print("Hola ", end="")
print()
print("Final")
Ejemplo: Código muestra los 100 primeros números naturales utilizando un bucle for y un tipo
range(a,b).
for i in range(1,101):
print(i)
Ejemplo: Múltiplos del 3 contenidos entre 1 y 100.
for i in range(3,101,3):
print(i)
Contador: Variable que lleva la cuenta del número de veces que se ha cumplido una condición.
El código asociado a un contador sería:
i=i+1
Crea un programa que determine cuantos números naturales menores de 100 son múltiplos de tres.
- 42 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 43 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 44 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Cuando se está ejecutando el programa desde otras instancias, la ejecución del mismo se
interrumpirá pulsando la combinación de teclas Ctrl+C. En ese caso se mostrará un mensaje tipo:
Traceback (most recent call last):
File "ejemplo.py", line 3, in <module>
print(i)
Keyboard Interrupt
Encuentra la razón por la que se genera un bucle infinito en cada uno de los siguientes ejemplos:
i=1
while i<= 10:
print(i, "", end="")
i=1
while i> 0:
print(i, "", end="")
i += 1
i=1
while i!= 100:
print(i, "", end="")
i += 2
- 45 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
else Solamente se ejecuta si el bucle termina normalmente (no por acción del break.
pass No hace nada. Se utiliza para dar contenido a una orden que no va a hacer nada
pero necesita por sintaxis tener algo escrito en ella.
18.2.1 break
Partimos del programa:
i=1
while i<= 10:
print(i,'- ',end='')
i += 1
print("Programa terminado")
El bucle se ejecutará normalmente, realizado diez iteraciones, mostrando el resultado:
1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 – 10 – Programa terminado
Si simplemente introducimos la orden break:
i=1
while i<= 10:
print(i,'- ',end='')
i += 1
break
print("Programa terminado")
El resultado tendrá la forma:
1 - Programa terminado
La orden break actúa en la primera iteración y por lo tanto termina la ejecución del bucle mñas
próximo en la que está incluida (en este caso es el único).
Utilizar la orden break de esta forma no tiene mucho sentido ya que siempre se va a ejecutar,
deteniendo el bucle. Normalmente la orden estará incluida dentro de un condicional. Con ello el
bucle se saltará cuando se cumpla dicha condición. Un ejemplo sencillo:
i=1
while i<= 10:
print(i,'- ',end='')
i += 1
if i==7:
break
print("Programa terminado")
- 46 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
18.2.2 continue
Si en lugar de break utilizamos continue, el resultado es diferente:
i=1
while i<= 10:
print(i,'- ',end='')
i += 1
if i==7:
continue
print("Programa terminado")
El resultado será:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - Programa terminado
Parece que continue no ha hecho nada ya que el resultado es el mismo que en caso del programa
sencillo. Pero no es así, el problema es que el resultado no es apreciable. Piensa en ello, continue
termina la ejecución de la vuelta actual del bucle. Al estar colocado al final de la iteración el que i
sea igual a 7 o no lo sea no afecta al resultado del bucle. Debemos cambiar la posición de la orden
incremental:
i=1
while i<= 10:
print(i,'- ',end='')
if i==7:
continue
i += 1
print("Programa terminado")
En este caso el programa creará un bucle infinito que no terminará nunca ya que al llegar i al
valor 7, la condidicón del if es cierta, se ejecuta el continue, terminando la vuelta del bucle actual y
por lo tanto desde ese momento nunca se vuelve a ejecutar la orden i += 1 con lo que i continúa
valiendo 7.
Si queremos evitar este problema podemos utilizar el código:
i=1
while i<= 10:
print(i,'- ',end='')
if i==7:
i += 2
continue
i += 1
print("Programa terminado")
En este caso la salida será:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 9 - 10 - Programa terminado
Sin mostrar el valor 8 ya que cuando i vale 7 modificamos su valor sumando dos unidades en
lugar de una, la orden continue hace que i+=1 no se ejecute cuando i vale 7.
- 47 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
18.2.3 else
El else asociado a un bucle while o for delimita un conjunto de órdenes que solamente se
ejecutan si hemos salido del bucle sin que se haya ejecutado una orden break.
Según el ejemplo anterior:
i=1
while i<= 10:
print(i,'- ',end='')
if i==7:
break
i += 1
else:
print("Programa terminado")
La salida será:
1-2-3-4-5-6-7-
Cuando i=7 el bucle se interrumpe, por lo tanto el bloque de ordenes asociado a else no se
ejecutará.
En cambio:
i=1
while i<= 10:
print(i,'- ',end='')
if i==77:
break
i += 1
else:
print("Programa terminado")
La salida en este caso será:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - Programa terminado
La orden break no llega a ejecutarse ya que i nunca puede llegar a tomar el valor 77. Por lo tanto
el bucle termina normalmente y a continuación se ejecuta el bloque de instrucciones asociados al
else.
18.2.4 pass
La mejor forma de entender la funcionalidad de esta orden es ver un ejemplo. Siguiendo con el
caso anterior:
i=1
while i<= 10:
print(i,'- ',end='')
if i==77:
break
i += 1
else:
Hemos eliminado las ordenes asociadas al bloque else:. El resultado es:
- 48 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
^
SyntaxError: unexpected EOF while parsing
Se genera un error de sintáctico ya que else requiere que en su interior exista al menos una
orden. La solución es incluir la orden pass que no tiene ninguna utilidad más que la de dar contenido
(hacer montón).
i=1
while i<= 10:
print(i,'- ',end='')
if i==77:
break
i += 1
else:
pass
La salida es:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 -
- 49 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 50 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
20. Funciones
Función: Bloque de instrucciones que al ser llamado por el programa principal realiza la acción
definida en su código.
- 51 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 52 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
2
5
La función subrutina asigna el valor 2 a la variable a y muestra su valor por pantalla.
El código principal asigna a la variable a el valor 5, llama a la función subrutina(), que escribirá un
2 y por último escribe el valor de la variable a que al estar fuera de la función continúa teniendo el
valor 5 ya que el valor 2 sólo se mantiene dentro de la función.
Las variables locales sólo existen en la propia función, no son accesibles desde niveles superiores.
Por ejemplo:
def subrutina():
a=2
print(a)
return
subrutina()
print(a)
La orden print(a) generará un mensaje de error ya que intenta escribir el valor de una variable
que no existe fuera de la subrutina.
2
Traceback (most recent call last):
File "D:\Code\8. Ejercicios while 2\src\ensayo.py", line 7, in <module>
print(a)
NameError: name 'a' is not defined
Si en el interior de una función se asigna valor a una variable que no se ha declarado como global
o no local, esa variable es local a todos los efectos. Por ello el siguiente programa da error:
def subrutina():
print(a)
a=2
print(a)
return
a=5
subrutina()
print(a)
Genera:
Traceback (most recent call last):
File "D:\Code\8. Ejercicios while 2\src\ensayo.py", line 8, in <module>
subrutina()
File "D:\Code\8. Ejercicios while 2\src\ensayo.py", line 2, in subrutina
print(a)
UnboundLocalError: local variable 'a' referenced before assignment
La primera instrucción de la función produce un mensaje de error debido a que quiere imprimir
el valor de la variable "a" definida como local dentro de la función (por el simple hecho de que en la
línea siguiente se la va a asignar un valor), pero a la que todavía no se le ha dado valor dentro de la
función (el valor de la variable "a" del programa principal no cuenta pues se trata de variables
distintas, aunque se llamen igual).
- 53 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
a=5
subrutina()
print(a)
Produciendo el resultado:
5
5
En la función subrutina(), la variable "a" es libre puesto que no se le asigna valor. Su valor se
busca en los niveles superiores, por orden. En este caso, el nivel inmediatamente superior es el
programa principal. Como en él hay una variable que también se llama "a", Python coge de ella el
valor (en este caso, 5) y lo imprime. Para la función subrutina(), la variable "a" es una variable global,
porque su valor proviene del programa principal.
En el ejemplo siguiente, la variable libre "a" de la función sub_subrutina() se considera
no local porque obtiene su valor de una función intermedia:
def subrutina():
def sub_subrutina():
print(a)
return
a=3
sub_subrutina()
print(a)
return
a=4
subrutina()
print(a)
Mostrando:
3
3
4
En la función sub_subrutina(), la variable "a" es libre puesto que no se le asigna valor. Su valor se
busca en los niveles superiores, por orden. En este caso, el nivel inmediatamente superior es la
- 54 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
función subrutina(). Como en ella hay una variable local que también se llama "a", Python coge de
ella el valor (en este caso, 3) y lo imprime. Para la función sub_subrutina(), la variable "a" es una
variable no local, porque su valor proviene de una función intermedia.
Si a una variable que Python considera libre (porque no se le asigna valor en la función)
tampoco se le asigna valor en niveles superiores, Python dará un mensaje de error.
- 55 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Al declarar nonlocal la variable "a", Python busca en los niveles superiores, por orden, una
variable que también se llame "a", que en este caso se encuentra en la función subrutina(). Python
toma el valor de esa variable, es decir, 3.
La última instrucción del programa escribe el valor de la variable global "a", que sigue siendo 4,
puesto que ninguna función la ha modificado.
Si a una variable declarada global o nonlocal en una función no se le asigna valor en el
nivel superior correspondiente, Python dará un error de sintaxis.
- 56 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 57 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
a, b, c = 3, 5, 10
media = calcula_media(a, b, c)
print("La media de", str(a)+",", b, "y", c, "es:", media)
print("Programa terminado")
La expresión *args indica que la función calcula_media admitirá una serie indefinida de
argumentos y que trabajará con ellos como si fuera una lista.
Ojo: args es el nombre de la lista y como tal podemos elegir el nombre que queramos.
Así esta función puede ser utilizada con más flexibilidad que las anteriores. El programador
puede elegir de cuántos valores hacer la media y qué hacer con el valor calculado por la función.
- 58 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
En Python no se producen conflictos entre los nombres de los parámetros y los nombres
de las variables globales. Es decir, el nombre de un parámetro puede coincidir o no con
el de una variable global, pero Python no los confunde: en el ámbito de la función el
parámetro hará referencia al dato recibido y no a la variable global.
- 59 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 60 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 61 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 62 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
3. Hacemos clic en el botón “Add source folder” y buscamos el directorio donde están
guardados los módulos:
El problema es saber dónde se están guardando los proyectos que creamos con Eclipse.
Este directorio se define en el momento de realizar la instalación de Eclipse. Si no sabes
cual es, comienza a crear un nuevo proyecto y en la ventana de configuración puedes
ver donde se va a guardar. En el caso de los ordenadores del centro el directorio es
C:\Usuarios\alumno\workspace.
- 63 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 64 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Método Descripción
Devuelve un número entero aleatorio entre a y b (ambos
random.randint(a, b)
incluidos).-
Devuelve de forma aleatoria un carácter de una variable
random.choice(secuencia)
o cadena de caracteres (secuencia).
Reorganiza los elementos de una variable tipo lista. La
random.shuffle(lista)
lista mantiene su nombre de variable.
Devuelve n elementos aleatorios de una variable o
random.sample(secuencia, n)
cadena de caracteres
Para poder utilizar los métodos incluidos en este módulo solamente es necesario utilizar la orden:
import random
A partir de ese instante si por ejemplo se quiere generar un número aleatorio entre 1 y 7 será
suficiente con escribir:
random.randint(1,7)
Al igual que hacíamos con los módulos de nuestras bibliotecas personales podremos importar
directamente las funciones incluidas en el módulo. El siguiente ejemplo importaría los
procedimientos randint y simple del módulos random:
from random import randint, sample
A partir de ese momento para utilizar cualquiera de esos módulos es suficiente con nombrarlo
directamente y no usar la sintaxis nombre_modulo.procedimiento. Según lo anterior:
randint(1,7)
- 65 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 66 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Se muestra la información relativa a las últimas líneas de código que se han ejecutado hasta
producirse el error. En este caso indica que la última línea que se ha intentado ejecutar es la número
3 (c=a/b). También nos indica el tipo de error que se ha generado, en este caso ZeroDivisionError,
siendo este un error de división por cero. Utilizaremos el nombre del tipo de error.
Para gestionar el posible error modificamos el código de la siguiente forma:
a=int(input("Introduce un número entero: "))
b=int(input("Introduce un número entero: "))
try:
c=a/b
print(a,"/",b," = ", c)
except ZeroDivisionError:
print("No se puede dividir entre 0")
print("Operación ejecutada")
En negrita se indica como se gestiona el error. La estructura es parecida a un bloque if…else:
- El programa intenta realizar las ordenes incluidas dentro del bloque try.
- Cuando no se pueda ejecutar el bloque incluido en try y solo si el error producido es del tipo
ZeroDivisionError se ejecutará el bloque de instrucciones incluidas en del apartado except.
Es decir:
- Si no hay error de división por cero:
Introduce un número entero: 8
Introduce un número entero: 2
8 / 2 = 4.0
Operación ejecutada
- Si hay error de división por cero:
Introduce un número entero: 8
Introduce un número entero: 0
No se puede dividir entre 0
Operación ejecutada
En ese segundo caso se ha conseguido dos cosas:
- Se ha gestionado el error producido al intentar dividir por cero.
- El programa continúa su ejecución tras la línea que habría generado el problema.
- 67 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
no ha podido asignar un valor entero al dato que hemos introducido (hola) por ser este una cadena
alfanumérica. La solución más sencilla sería, incluir las dos líneas input dentro de un bloque try:
try:
a=int(input("Introduce un número entero: "))
b=int(input("Introduce un número entero: "))
except ValueError:
print("Los valores introducidos no son correctos"
El programa detectaría el primer problema, pero no va a funcionar de forma correcta:
Introduce un número entero: 7
Introduce un número entero: hola
Los valores introducidos no son correctos
Traceback (most recent call last):
File "…\eclipse-workspace\Ensayos curos\src\print.py", line 7, in <module>
c=a/b
NameError: name 'b' is not defined
En este caso evitamos el error del tipo de dato alfanumérico, pero se genera uno nuevo ya que
no hemos asignado ningún valor a la variable b.
La solución será introducir las ordenes input en un bucle que se repita de forma infinita hasta
que los datos hayan sido introducidos de forma correcta. Esto es:
while True:
try:
a=int(input("Introduce un número entero: "))
b=int(input("Introduce un número entero: "))
break
except ValueError:
print("Los valores introducidos no son correctos, inténtalo de nuevo:")
try:
c=a/b
print(a,"/",b," = ", c)
except ZeroDivisionError:
print("No se puede dividir entre 0")
print("Operación ejecutada")
El resultado será:
Introduce un número entero: 5
Introduce un número entero: hola
Los valores introducidos no son correctos, inténtalo de nuevo:
Introduce un número entero: 5
Introduce un número entero: 2
5 / 2 = 2.5
Operación ejecutada
En el primer intento try detecta el error, se ejecuta la gestión de la excepción mostrando el texto
“Los valores introducidos no son correctos”. Como estamos dentro del bucle while y es un bucle
infinito (la concición es “True” y por lo tanto es siempre cierta) se vuelve a ejecutar su contenido.
- 68 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
En el segundo caso asignamos de forma correcta valor a las variables a y b, pasamos a la orden
break y esta saca la ejecución del programa del interior del bucle continuando la ejecución en la
siguiente orden try.
En un mismo bloque try: podemos incluir varias clausulas except consecutivas para
capturar diferentes excepciones.
Otra forma de trabajar es colocar un único bloque except: sin indicar el tipo de error:
except:
print(“menaje”)
Al producirse cualquier tipo de error (en el bloque try: asociado) se ejecutará la orden
print(“mensaje”) y continuará la ejecución normal del programa.
- El lado positivo, es que sea cual sea el error la ejecución no se detendrá.
- El lado negativo, el programa no dará ningún mensaje específico asociado al tipo de error.
- 69 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
elif edad<65:
print("Eres maduro")
elif edad<100:
print("Cuídate...")
Si introducimos un valor negativo para la variable edad:
Introduce tu edad: -10
Eres muy joven
El programa no nos da un error, pero nos da una respuesta que no tiene sentido.
Podríamos resolver este problema de muchas formas, pero de cara a aprender cómo funciona
esta herramienta, vamos a hacerlo lanzando una excepción diseñada por nosotros que se ejecutará
cuando se cumpla una condición (en este caso edad<0).
La sintaxis sería:
edad=int(input("Introduce tu edad: "))
if edad<0:
raise TypeError("No se permiten edades negativas")
if edad<20:
print("Eres muy joven")
elif edad<40:
print("Eres joven")
elif edad<65:
print("Eres maduro")
elif edad<100:
print("Cuídate...")
La parte que nos interesa está en negrita:
- Consideramos un if que detectará que el valor introducido no es correcto (edad<0).
- En ese caso se ejecuta la orden raise que lanzará una excepción. La excepción que
invoquemos en realidad no es importante. Lo importante es que conseguimos parar el
programa. En este caso uso TypeError…
- Entre paréntesis introducimos un mensaje personalizado que se ejecutará cuando lancemos
la excepción y el programa cae.
Más adelante veremos cómo crear nuestras propias excepciones con un nombre
específico.
Capturar una excepción
En el caso anterior el programa se detiene cuando generamos la excepción, veamos ahora como
la podemos capturar y gestionar.
Veamos otro ejemplo. Vamos a crear un programa que calcule la raíz cuadrada de un número.
Como recordarás necesitaremos importar el módulo math y el método sqrt.
import math
def calculaRaiz(num):
if num<0:
raise ValueError("El número no puede ser negativo")
else:
- 70 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
return math.sqrt(num)
opt1=int(input("Introduce un número: "))
print(calculaRaiz(opt1))
print(“Programa finalizado”)
- 71 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
25. Diccionarios
Diccionario: Lista no ordenada de términos. Cada uno de los términos queda definido por una
clave única y almacena uno o varios valores.
Con un ejemplo lo entenderemos mejor. Un diccionario podría un horario escolar. El diccionario
tendría cinco términos. Cada uno de ellos quedaría identificado por una clave (el día de la semana)
y cada uno de ellos almacenaría el nombre de las asignaturas de las que tengamos clase en ese día.
- 72 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Para acceder al valor asociado a una clave, utilizamos el mismo método que para
acceder a un elemento de una lista, pero utilizando la clave elegida en lugar del índice.
Cada elemento se define con un par clave:valor, pudiendo ser la clave y el valor de
cualquier tipo de dato (‘int’, ‘float’, ‘chr’, ‘str’, ‘bool’, ‘object’).
OJO: el diccionario no se muestra con el orden en que se han definido los términos.
- 73 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
materias["martes"] = 6201
materias["miércoles"] = [6103, 7540]
if( materias.get("domingo")!=None):
print(materias['domingo'])
El código anterior no mostrará nada por pantalla ya que al no existir el índice “domingo”, la
función get genera el valor None. La expresión lógica incluida en el if es falsa y por lo tanto la orden
print no llega a invocarse.
Otra forma más elegante de conseguir no llamar índices no existentes es utilizar la
palabra reservada in. Observa el siguiente ejemplo:
d = {'x': 12, 'y': 7}
if'y'in d:
print(d['y']) # Imprime 7
if'z'in d:
print(d['z']) # No se ejecuta
Genera la salida:
7
- 74 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 75 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 76 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Una forma sencilla de abrir la consola es teclear cmd en el menú de inicio de Windows.
La línea de código que utilizaremos es:
- Para Unix/Linux/MacOS/BSD
os.system ("clear")
- Para DOS/Windows
os.system ("cls")
Si estamos creando un programa que deseamos que funcione en cualquier ordenador, el código
debería primero identificar en que sistema operativo está corriendo. Para ello, crearemos la
siguiente función:
def borrarPantalla():
if os.name == "posix":
os.system ("clear")
elif os.name == "ce" or os.name == "nt" or os.name == "dos":
os.system ("cls")
Posteriormente, para ejecutar la función solo debemos invocarla.
borrarPantalla()
Entendiendo la función de os.name
La sentencia os.name nos indica el sistema operativo en que se está trabajando. Así para conocer
el sistema operativo en el que se está trabajando bastaría con:
import os
var = os.name
print ("El sistema operativo de mi ordenador es: "+var)
Los nombres registrados en este módulo son:
- 77 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- ‘posix’ – UNIX
- ‘mac’ – Apple
- ‘java’ – Máquina virtual de Java
- ‘nt’, ‘dos’, ce – Sistemas operativos desarrollados por Microsoft
Aplicación sencilla: Generar una pequeña animación
Vamos a mostrar un mensaje dinámico o simular movimiento.
# Mensaje dinámico
import os
import time
if os.name == "posix":
var = "clear"
elif os.name == "ce" or os.name == "nt" or os.name == "dos":
var = "cls"
time.sleep(2)
os.system(var)
print("****************************************")
print("* *")
print("* ¡Bienvenidos a AprenderPython.net! *")
print("* *")
print("****************************************")
time.sleep(2)
os.system(var)
print("****************************************")
print("* *")
print("* Aquí aprenderas a programar con Python *")
print("* *")
print("****************************************")
time.sleep(2)
os.system(var)
print("****************************************")
print("* *")
print("* Es totalmente gratis *")
print("* *")
print("****************************************")
time.sleep(2)
- 78 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 79 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 80 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 81 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
fichero_in = open("file.txt")
fichero_out = open("file2.txt","w")
i=1
for line in fichero_in:
print(line.rstrip())
fichero_out.write(str(i) + ": " + line)
i=i+1
fichero_in.close()
fichero_out.close()
En este caso si el fichero file2.txt no existía previamente y había sido incluido en el proyecto, no
se mostrará dentro del pyDev Package Explorer. Sin embargo si entramos dentro de la carpeta que
lo contiene (en nuestro caso incluida dentro de D:\Code) podremos abrirlo y trabajar con él
normalmente. El resultado sería:
1: All You Need Is Love - John Lennon/Paul McCartney
2:
3: There's nothing you can do that can't be done.
4: Nothing you can sing that can't be sung.
5: Nothing you can say but you can learn how to play the game.
6: It's easy.
7:
8: Nothing you can make that can't be made.
9: No one you can save that can't be saved.
10: Nothing you can do but you can learn how to be you in time.
11: It's easy.
La clave está en la línea:
fichero_out.write(str(i) + ": " + line)
Esta línea añade en cada pasada una nueva línea al fichero file2.txt. El contenido de la línea es
una cadena de texto formada por el número de línea y el contenido almacenado en la variable line
(línea leída del fichero file.txt).
- 82 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 83 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- El primer ft.tell() da como resultado un 0 por ser la posición inicial del puntero.
- La orden fh.read(7) lee siete caracteres desde la posición actual del puntero (All You).
- A continuación, llevamos el puntero a la posición 10 y mostramos el puntero de nuevo.
- La siguiente orden lee 5 caracteres, desde la posición actual (10): (ed Is).
- La posición final del puntero es 15.
- Si leemos 7 caracteres más, se leen desde la posición actual del puntero (15 – “Love – “.
También es posible modificar la posición del puntero de forma relativa a la posición actual. Así:
fh = open("file.txt")
print(fh.read(15))
fh.seek(fh.tell() -7) # fijamos la posición actual siete caracteres a la izquierda:
print(fh.read(7))
fh.seek(fh.tell() + 25) # Avanzamos 25 caracteres a la derecha
print(fh.read(9))
Produce como resultado:
All You Need Is
Need Is
- 84 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
McCartney
Observa que una vez que definimos el punto en el que se quiere escribir, el nuevo texto
sustituye al anterior (no se produce inserción de texto sino sustitución).
El ejemplo anterior se podría realizar a partir de un archivo inicial con la información “Color
marrón”, sería necesario realizar la apertura en modo r+ para evitar eliminar la información inicial.
- 85 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Nota: Intentar abrir un archivo que no existe, en modo lectura (r) genera un error; en
cambio si lo abrimos para escritura se crea un archivo (w, a, w+ o con a+).
Si no se especifica el modo, los archivos son abiertos en modo sólo lectura (r).
- 86 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 87 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Normalmente utilizaremos la extensión .pkl para un archivo generado con pickle. Sin
embargo, esto no es necesario. Podemos utilizar cualquier otra o incluso ninguna
extensión. Utilizar .pkl informa al usuario de la función del archivo.
27.9.2 load
Permite leer una cadena de bytes generada previamente por pickle y recuperar el objeto a partir
del cual se ha generado.
Antes de utilizar load debemos abrir el archivo en modo lectura de bytes para lo cual es
necesario que el segundo parámetro de open sea “br” o “rb”.
A modo de ejemplo vamos a crear el código necesario para leer el archivo data.pkl que creamos en
el apartado anterior:
1 import pickle
2 file = open("data.pkl", "br")
3 villas=pickle.load(file)
4 print(villas)
5 file.close()
Analicemos cada línea de código.
1. Importamos el módulo pickle
2. Abrimos el archivo data.pkl en modo lectura de bytes y lo asignamos al objeto archivo con el
nombre file.
3. Leemos el archivo y guardamos la información en una variable de nombre villas. Como el
contenido almacenado en file es una lista, villas tomará el formato de variable lista.
4. Escribimos el contenido de la lista villas.
5. Cerramos el archivo.
El objeto empaquetado podría ser todo lo complejo que yo quisiera. Por ejemplo, una
lista de objetos, cada uno de los cuales fuera a su vez una lista (nombre jugador, número
camiseta, posición en el campo, titular/suplente…)
- 88 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Recuerda que en un objeto shelf las claves de los valores han de ser cadenas de texto.
- 89 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 90 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 91 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
miCoche.arranca()
Recuerda que un objeto quedará definido por sus propiedades, comportamientos y estados.
Vamos a ir añadiendo los mismos:
29.1.1 Añadir propiedades y estados:
Solo es necesario definir el nombre de la propiedad y su valor, por ejemplo:
class Coche():
largoChasis=250
anchoChasis=120
ruedas=4
enmarcha=False
Todos los objetos que, más adelante, creemos pertenecientes a la clase Coche tendrán en común
un chasis que medirá 250 cm de largo, 120 cm de ancho, tener cuatro ruedas e inicialmente no estar
en marcha.
29.1.2 Añadir comportamientos, procedimientos o métodos:
Un método va a ser un bloque de código una “función” que pertenece a una clase que permite
hacer una o varias acciones.
El procedimiento será el siguiente, supongamos que queremos crear un método que permita
arrancar a los coches que creemos más adelante:
Sintaxis
- Palabra reservada def (igual que haríamos con una función).
- Nombre del método, paréntesis y en su interior escribimos como parámetro la palabra self.
Terminamos la línea con dos puntos.
- Bloque de código que define que va a hacer el método (indentado).
self indica como parámetro que el método se refiere al propio objeto que creemos en
un futuro (es decir a sí mismo).
En nuestro ejemplo vamos a crear el procedimiento arrancar. Este método permitirá cambiar el
estado enmarcha en los objetos que creemos en un futuro. Para ello crearemos un método que
cambie el valor de la propiedad enmarcha de False a True:
class Coche():
- 92 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
largoChasis=250
anchoChasis=120
ruedas=4
enmarcha=False
def arrancar(self):
self.enmarcha=True
- 93 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
else:
return "El coche está parado"
miCoche=Coche()
print("La longitud de mi coche es:", miCoche.largoChasis)
# Llamo al método que arranca mi coche
miCoche.arrancar()
# Muestro por pantalla el estado del coche a través de un método
print(miCoche.estado())
miCoche=Coche()
print("La longitud de mi coche es:", miCoche.largoChasis)
# Llamo al método que arranca mi coche
miCoche.arrancar()
# Muestro por pantalla el estado del coche a través de un método
print(miCoche.estado())
- 94 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 95 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
A modo de ejemplo vamos a modificar el código anterior de tal forma que el método arrancar no se
encargue solamente de arrancar el coche, si no que informe también del estado. Por otro lado,
cambiaremos la función del método estado para que nos informe del número de ruedas, ancho y
largo de cada uno de los dos objetos del ejemplo anterior.
La idea es llamar al método arrancar, pero pasándole un parámetro que indique si estamos
arrancando o no.
class Coche():
largoChasis=250
anchoChasis=120
ruedas=4
enmarcha=False
def arrancar(self,arrancamos):
self.enmarcha=arrancamos
if (self.enmarcha==True):
return "El coche está en marcha"
else:
return "El coche está parado"
def estado(self):
print("El coche tiene ", self.ruedas, "ruedas. Un ancho de ", self.anchoChasis, "
y un largo de ", self.largoChasis)
miCoche=Coche()
print(miCoche.arrancar(True))
miCoche.estado()
- 96 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 97 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Para que esta orden tenga sentido, será necesario haber modificado previamente la definición
de la clase y su constructor. Quedaría:
class Coche():
def __init__(self, parametro):
self.largoChasis=250
self.anchoChasis=120
self.ruedas=4
self.enmarcha=False
self.color=parametro
Observa la última línea. Cuando se cree el objeto le asignará un valor a la propiedad color. Este
valor no será el mismo para todos los coches. Será definido por el valor que enviamos como
parámetro al realizar la creación del objeto.
- 98 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 99 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
if (self.__enmarcha==True):
return "El coche está en marcha"
else:
return "El coche está parado"
def estado(self):
print("El coche tiene ", self.__ruedas, "ruedas. Un ancho de ",
self.__anchoChasis, " y un largo de ", self.__largoChasis)
miCoche=Coche()
print(miCoche.arrancar(True))
miCoche.estado()
- 100 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 101 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Modifiquemos este código teniendo en cuenta que debemos realizar la llamada al método de
chequeo. En primer lugar, hay que tener en cuenta que el chequeo solamente se realizará
cuando el método arrancar esté enviando como parámetro el valor True (es decir cuando
estamos intentando arrancar). Una posible opción sería:
def arrancar(self,arrancamos):
if arrancamos== True:
chequeo=self.chequeo_interno()
if (chequo==True):
self.__enmarcha= True
return "El coche está en marcha"
else:
return " Algo ha ido mal en el chequeo. No es posible arrancar "
else:
return " El coche está parado "
Es decir, en primer lugar, comprobamos que valor toma el parámetro del método arrancamos.
Si es True (queremos arrancar) comprobamos si el coche puede arrancar a través del método
chequeo_interno. Si este método genera True, arrancamos, si no lo hace, informamos de la
imposibilidad de realizar el arranque. En caso de que no hayamos enviado el valor True como
parámetro en el método arrancar, el coche está parado.
Juntándolo todo, la clase coche quedaría:
class Coche():
def __init__(self):
self.__largoChasis=250
self.__anchoChasis=120
self.__ruedas=4
self.__enmarcha=False
def arrancar(self,arrancamos):
if arrancamos== True:
chequeo=self.chequeo_interno()
if (chequo==True):
self.__enmarcha= True
return "El coche está en marcha"
else:
return " Algo ha ido mal en el chequeo. No es posible arrancar "
else:
return " El coche está parado "
def estado(self):
print("El coche tiene ", self.__ruedas, "ruedas. Un ancho de ",
self.__anchoChasis, " y un largo de ", self.__largoChasis)
def chequeo_interno(self):
print("Realizando chequeo interno")
self.gasolina="ok"
self.aceite="ok"
if(self.gasolina=="ok" and self.aceite=="ok"):
return True
else:
return False
Si ejecutamos el programa todo parece funcionar de forma correcta:
- 102 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
miCoche=Coche()
print(miCoche.arrancar(True))
miCoche.estado()
- 103 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
print(miCoche2.chequeo_interno())
Generaría:
----Creamos un nuevo objeto: miCoche2---
El coche está parado
El coche tiene 4 ruedas. Un ancho de 120 y un largo de 250
Realizando chequeo interno
True
Para evitar estos problemas es suficiente con encapsular el método. Al hacerlo su uso quedará
restringido al interior de la clase.
La sintaxis es sencilla:
- Comenzar con dos guiones bajos su nombre en la definición.
- Al llamar el método más adelante, recordar que debemos añadir los dos guiones bajos que
forman parte del nombre.
En nuestro ejemplo:
class Coche():
def __init__(self):
self.__largoChasis=250
self.__anchoChasis=120
self.__ruedas=4
self.__enmarcha=False
def arrancar(self,arrancamos):
if arrancamos== True:
chequeo=self.__chequeo_interno()
if (chequo==True):
self.__enmarcha= True
return "El coche está en marcha"
else:
return " Algo ha ido mal en el chequeo. No es posible arrancar "
else:
return " El coche está parado "
def estado(self):
print("El coche tiene ", self.__ruedas, "ruedas. Un ancho de ",
self.__anchoChasis, " y un largo de ", self.__largoChasis)
def __chequeo_interno(self):
print("Realizando chequeo interno")
self.gasolina="ok"
self.aceite="ok"
if(self.gasolina=="ok" and self.aceite=="ok"):
return True
else:
return False
Si intentamos ahora ejecutar el método desde los objetos:
miCoche=Coche()
print(miCoche.arrancar(True))
miCoche.estado()
print(miCoche.chequeo_interno())
- 104 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Obtendremos:
Realizando chequeo interno
El coche está en marcha
El coche tiene 4 ruedas. Un ancho de 120 y un largo de 250
Traceback (most recent call last):
File "…Ensayos curos\src\encapsularmetodos.py", line 31, in <module>
print(miCoche.__chequeo_interno())
AttributeError: 'Coche' object has no attribute '__chequeo_interno'
El programa detecta que estamos intentando ejecutar el método encapsulado desde fuera de la
definición de clase y por lo tanto da un error.
Si retiramos las llamadas al método chequeo_interno desde los objetos todo funcionará de forma
correcta.
- 105 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 106 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
34. Herencia
Herencia: Procedimiento mediante el cual una clase adquiere características y
comportamientos de otra clase de un nivel jerárquico superior.
Sea el ejemplo una serie de cinco clases relacionadas según la siguiente jerarquía de herencia.
La clase 1, ocupa el primer nivel en la escala jerárquica, recibe el nombre clase padre o
superclase.
La clase 2 heredará propiedades de la clase 1 por lo que es subclase de esta.
Por otro lado, las clases 3, 4 y 5 heredarán propiedades de la clase 2. Por la tanto la clase 2 es
superclase de ellas y 3, 4 y 5 son subclases de 2.
- 107 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
34.2 Sintaxis
Guarda todo el código que veamos en este punto en un módulo con nombre
herencia.py, lo reutilizaremos más adelante.
Superclase
En primer lugar, crearemos la superclase, la llamamos Vehículos, seguimos las normas habituales:
class Vehiculos():
def __init__(self, marca, modelo):
self.marca=marca
self.modelo=modelo
self.enmarcha=False
self.acelera=False
self.frena=False
def arrancar(self):
self.enmarcha=True
def acelerar(self):
self.acelera=True
def frenar(self):
self.frena=True
def estado(self):
print("Marca:", self.marca,"\nModelo:", self.modelo,"\nEn Marcha:",
self.enmarcha,"\nAcelerando:", self.acelera,"\nFrenando:", self.frena)
La superclase contiene:
- Un constructor que ha de recibir por parámetros (además de self) marca y modelo.
- Dentro del constructor se definirá la propiedad marca y modelo según los valores que
introduzcamos al llamar al constructor y además agregamos tres propiedades (enmarcha,
acelera y frena) cuyos valores por defecto son False (al construir el objeto está quieto).
- Tres métodos que permiten arrancar, acelerar y frenar.
- Un método que permite mostrar el estado del vehículo.
Clase moto que hereda propiedades y métodos de la clase Vehiculo
Definimos la clase igual que hasta ahora pero dentro de los paréntesis incluimos el nombre de la
superclase de la cual la nueva clase tiene que heredar. En nuestro ejemplo:
class Moto(Vehiculos):
pass
(pass se correspondería con el código particular de la clase Moto, de momento no añado nada).
Si ahora creamos un objeto de la clase Moto (ten en cuenta que hay que pasarle los parámetros
marca y modelo) y a continuación ejecutamos el método estado:
miMoto=Moto("Honda", "Special")
miMoto.estado()
El resultado será:
Marca: Honda
- 108 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Modelo: Special
En Marcha: False
Acelerando: False
Frenando: False
- 109 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
El orden en el que pongamos el nombre de las clases padre a la hora definir la clase hijo
es muy importante ya que se da prioridad a la clase que se indica en primer lugar. Así:
- Si ambas clases tienen un método con el mismo nombre, se heredará el método de la
clase padre que se escriba en primer lugar en la definición de la clase hijo.
- 110 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- El número de parámetros que tengo que definir para crear el objeto hijo será igual al
número de parámetros que tenga la primera de las funciones padre (en nuestro ejemplo
he llamado primero a Vehiculos, por lo tanto hay que definir sus dos parámetro, si
hubiera llamado primero a VElectricos no habría que poner ninguno.
- 111 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
class Empleado():
def __init__(self,salario,antiguedad):
self.salario=salario
self.antiuedad=antigüedad
class Empleado(Persona):
def __init__(self,salario,antiguedad):
self.salario=salario
self.antiuedad=antigüedad
Construyamos un objeto de tipo persona:
Antonio=Persona("Antonio",17,"Zaragoza")
Antonio.descripcion()
El resultado por pantalla será:
Nombre: Antonio Edad: 17 Residencia: Zaragoza
- 112 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 113 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
self.salario=salario
self.antiguedad=antiguedad
Antonio=Empleado(1500,15)
Antonio.descripcion()
Dando por resultado:
Nombre: Antonio Edad: 17 Residencia: Zaragoza
La función super() llama al método __init__ de la clase padre (persona), enviándole los tres
parámetros necesarios.
Ya es algo, pero este resultado es incompleto por dos razones:
- Los datos de persona se han metido como constantes, no parámetros, al crear el objeto.
- El método descripción no nos informa de los datos de Empleado.
Enviar los parámetros:
Habrá que:
- Incluir los nuevos parámetros en el método __init__ de la clase hijo.
- Incluir estos nuevos parámetros en la llamada al método __init_ de la clase padre.
- Incluir el valor de los cinco parámetros en la llamada el método descripción.
class Empleado(Persona):
def __init__(self,salario,antiguedad, nombre_empleado, edad_empleado,
residencia_empleado):
super().__init__(nombre_empleado, edad_empleado, residencia_empleado)
self.salario=salario
self.antiuedad=antiguedad
Antonio=Empleado(1500,15,"Antonio",17,"Zaragoza")
Antonio.descripcion()
Mostrar el estado completo:
- Crearemos un nuevo método descripcion para esta clase, pero aprovecharemos lo ya
utilizado en el método descripcion de la clase padre. Añadiremos la nueva información:
def descripcion(self):
super().descripcion()
print("Salario:", self.salario,"Antigüedad:",self.antiguedad)
En conjunto:
class Persona():
def __init__(self,nombre,edad, lugar_residencia):
self.nombre=nombre
self.edad=edad
self.lugar_residencia=lugar_residencia
def descripcion(self):
print("Nombre:",self.nombre, "Edad:", self.edad,
"Residencia:",self.lugar_residencia)
class Empleado(Persona):
def __init__(self,salario,antiguedad, nombre_empleado, edad_empleado,
residencia_empleado):
- 114 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Modifica el código del ejemplo de los puntos anteriores (choches) para que el objeto moto eléctrica
pueda mostrar todas sus propiedades por pantalla (las de Vehiculo y las de VElectrico
- 115 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
35. Polimorfismo
Polimorfismo: Un objeto puede cambiar de forma (propiedades y comportamientos) en
función de cuál sea el contexto en el que se utilice.
Siguiendo con el ejemplo de los vehículos, sería hacer que objeto coche pase a ser un camión…
Veamos un nuevo ejemplo:
class Coche():
def desplazamiento(self):
print("Me desplazo utilizando cuatro ruedas")
class Moto():
def desplazamiento(self):
print("Me desplazo utilizando dos ruedas")
class Camion():
def desplazamiento(self):
print("Me desplazo utilizando seis ruedas")
Hemos creado tres clases. Cada una de ellas tiene un método al que hemos llamado
desplazamiento, pero el texto generado por cada uno de ellos es diferente.
Crearemos ahora un objeto moto y ejecutemos el método desplazamiento:
miVehiculo=Moto()
miVehiculo.desplazamiento()
El resultado por pantalla será:
Me desplazo utilizando dos ruedas
Si ahora queremos que nuestro objeto pase a ser de la clase Coche habrá que hacer lo siguiente:
Creamos una función que va a recibir por parámetro el nombre del tipo de clase correspondiente
al tipo de vehículo que queremos crear:
def desplazamientoVehiculo(vehiculo):
vehiculo.desplazamiento()
Esta función llama al método desplazamiento de la clase asociada a la clase definida por el
parámetro vehiculo. Así para llamar a la función, en el caso de que el objeto sea una moto:
miVehiculo=Moto()
desplazamientoVehiculo(miVehiculo)
La respuesta será:
Me desplazo utilizando dos ruedas
Si queremos que este objeto pase a comportarse como un coche bastaría con volver a definir su
clase:
miVehiculo=Moto()
desplazamientoVehiculo(miVehiculo)
miVehiculo=Camion()
desplazamientoVehiculo(miVehiculo)
Daría por resultado:
- 116 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 117 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Método Descripción
capitalize() La primera letra de la cadena pasa a ser mayúscula, el resto serán minúsculas.
Existen muchos métodos más para la clase String. Explicarlos todos aquí, carece de sentido. De
forma similar alguno de los métodos que aparecen en la lista anterior tienen alguna peculiaridad
sintáctica que no es necesario saber de memoria. Es mucho mejor saber dónde buscar.
Si buscamos en Google “Documentación de Python” el primer enlace debería de ser el sitio
http://pyspanishdoc.sourceforge.net/. Haciendo clic en el vínculos “Referencia de bibliotecas”,
llegaremos a una tabla de contenidos desde la que podemos obtener información sobre todos los
elementos incluidos en la biblioteca de Python.
En este caso la información sobre los métodos de cadenas está incluida en punto 2.1.5 Tipos
secuenciales. Bajando al final de la página, tenemos el punto 2.1.5.1 que nos habla sobre los
métodos de las cadenas.
- 118 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Este punto nos dará una descripción de cada uno de los métodos y de los parámetros que son
necesario pasar al método para que funcionen de forma correcta.
Así por ejemplo queremos utilizar el método count, obtenemos la siguiente información:
- 119 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
class VElectricos():
def __init__(self):
self.autonomia=100
def cargarEnergía(self):
self.cargando=True
class Moto(Vehiculos):
hcaballito=""
def caballito(self):
self.hcaballito="Voy haciendo el caballito"
def estado(self):
print("Marca:", self.marca,"\nModelo:", self.modelo,"\nEn Marcha:",
self.enmarcha,"\nAcelerando:", self.acelera,"\nFrenando:", self.frena,"\n",
self.hcaballito)
class BicicletaElectrica(Vehiculos,VElectricos):
pass
- 120 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 121 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 122 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Otras recomendaciones
Escribir un espacio antes y después de los operadores: asignación (=), asignación aumentada (+=, -=
etc.), comparaciones (==, <, >, !=, <>, <=, >=, in, not in, is, isnot), booleanos (and, or, not).
Si se utilizan operadores con distintas prioridades, se aconseja utilizar espacios en los operadores
de menor prioridad. Nunca escriba más de un espacio y escriba los mismos espacios antes y después
de cada operador.
Sí:
i=i+1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
- 123 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
c = (a+b) * (a-b)
No:
i=i+1
submitted +=1
x=x*2-1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
Se recomienda que el nombre del programa no contenga espacios sino guiones o subrayados. Por
ejemplo, aritmeticas_1.py.
Comentarios en los programas
Es importante añadir comentarios a los programas para que sean más comprensibles para los
humanos (el ordenador ignora completamente el contenido de los comentarios). En Python un
comentario empieza por el carácter almohadilla (#) y acaba al final de la línea. No es necesario
comentar todas las líneas, sino sólo aquellas que lo necesiten. Por ejemplo:
ep = 166.386 # Factor de conversión de euros a pesetas
- 124 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
39. Funciones
Listado de las funciones más habituales.
Función Descripción
str() Transforma un número en cadena de caracteres.
int() Transforma una cadena de caracteres en un número entero.
float() Transforma una cadena de caracteres en un número decimal.
round(a,b) Redondea el número a con b decimales.
chr(num) Devuelve el carácter correspondiente al valor “num” en código ASCII.
ord(‘x’) Devuelve el código ASCII del carácter ‘x’.
# Separador de miles:
print(format(numero, ','))
print(format(numero, '0,.1f'))
# Notación científica:
print(format(numero, 'e'))
print(format(numero, '0.2E'))
- 125 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
40. Metodos
Listado de métodos de interés.
Función Descripción
cadena.lower() Devuelve la cadena de caracteres o variable en letras minúsculas.
cadena.upper() Devuelve la cadena de caracteres o variable en letras mayúsculas.
- 126 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 127 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 128 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 129 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 130 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
El navegador nos redirigirá a una nueva ventana en la que hacemos clic en el botón download:
- 131 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
En función del navegador que estés utilizando, es posible que no se inicie la descarga
del archivo. En ese caso haz clic con el botón derecho del ratón sobre el enlace “click
here” que se indica marcado en un rectángulo rojo en la imagen anterior y selecciona la
opción “Abrir enlace en una pestaña nueva”.
Descargamos el archivo en nuestro disco duro y hacemos clic sobre su icono para iniciar la
instalación.
En la primera ventana seleccionamos la opción Eclipse IDE for Java Developers.
En la siguiente ventana debemos definir el directorio de instalación para el JVM de Java y para
Eclipse. Podemos dejar las opciones por defecto:
- 132 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Clic en el botón Launch y se mostrará una ventana preguntando por la dirección del directorio de
trabajo. En mi caso dejo el directorio por defecto. Activamos el tic “Use this as the default and do
not ask again”:
Aviso: Ten en cuenta que este directorio está congelado en el ordenador del aula.
Clic en Ok y se abrirá el programa:
Si no queremos que se muestre esta ventana de inicio cada vez que abra el programa,
comprobamos que está desactivado el Tic “Always show Welcome at start up” situado en la esquina
inferior derecha y a continuación hacemos clic en el botón “Hide” situado en la esquina superior
derecha de la ventana de Eclipse.
Tras cerrar esta ventana de inicio se mostrará la ventana de trabajo:
En un punto siguiente describiremos las partes principales de esta ventana. De momento vamos
a configurar las características que nos interesan para poder trabajar con Python.
- 133 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 134 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
Seleccionamos pyDev y pyDev MyIyn Integration. Desactivamos la opción “Contact all update
sites during install to find required software” y pulsamos Next dos veces. En la pantalla siguiente
seleccionamos “I accept the terms of the license agreements”. Pulsamos Finish y esperamos a que
progrese la instalación. Se mostrará:
- 135 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 136 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 137 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- Abrimos la carpeta General y seleccionamos la opción Archive File. Hacemos clic en el botón
Next>.
- Se mostrará una ventana que permite elegir los archivos y carpetas que queremos exportar.
En este caso seleccionaremos el proyecto “03. Ejercicios if” haciendo clic en el selector
situado a la izquierda de su nombre.
- Haciendo clic en el botón “Browse…” seleccionamos el directorio en el que guardaremos el
archivo comprimido.
- En la ventana de texto situada a la izquierda del botón “Browse…” escribimos el nombre que
queremos dar al archivo exportado:
- 138 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- En este caso:
- Hacemos clic con el botón derecho en la ventana “PyDev Package Explorer” y seleccionamos
la opción “Import…”. Se mostrará la ventana emergente “Import” en ella seleccionamos la
opción “Projects from Folder or Archive” y hacemos clic en el botón “Next>”:
- Se mostrará la ventana “Import Projects from File System or Archive”, hacemos clic en el
botón “Archive…” situado a la derecha de la ventana:
- 139 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 140 -
TIC 2º BTO IES Grande Covián
Curso 2021-22 Zaragoza
- 141 -