Download INTRODUCCIÓN A LA PROGRAMACIÓN. LENGUAJE PYTHON

Document related concepts
no text concepts found
Transcript
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
INTRODUCCIÓN A LA PROGRAMACIÓN. LENGUAJE PYTHON.
Antes de empezar.
Para programar con Python en un entorno Linux tan sólo hace falta un editor de texto plano y abrir
la consola (o terminal).
Como editor de texto usaremos gedit, al que se accede desde el menú accesorios.
La forma más sencilla de abrir la consola es usando la combinación de teclas Ctrl+Alt+t. Una vez
que se nos haya abierto, nos deberemos situar en el directorio donde vayamos a grabar los
programas que vayamos escribiendo, al que llamaremos Python.
Los programas que escribamos los grabaremos con la extensión .py. De esta forma, iniciaremos su
ejecución de manera sencilla, sin más que teclear desde la terminal la orden:
python3.2 nombre_del_programa.py
Instalar python3.2.
Si deseamos instalar python3.2 en un ordenador con un sistema operativo GNU-Linux lo más
sencillo es abrir una terminal, teclear:
sudo apt­get install python3.2
e introducir la contraseña de administrador.
La descarga e instalación para windows o mac se puede encontrar en la página web
https://www.python.org/download/releases/3.2/
Introducción a la programación
Como ya se explicó en el primer tema, la CPU es el “cerebro” del ordenador, capaz de ejecutar
acciones especificadas mediante secuencias de instrucciones. Estas secuencias de instrucciones
configuran un programa.
El problema es que los programas ejecutables por la CPU deben estar escritos en el lenguaje binario
que entienden los ordenadores, llamado código máquina. Escribir un programa en código máquina
es una tarea larga y muy complicada. Por ello, existen diferentes lenguajes de programación, que
podemos definir como un sistema de notación que permite expresar programas en un lenguaje
entendible por un humano, que luego serán traducidos (o compilados) al código máquina para poder
ser ejecutados.
Dado que el lenguaje que entiende cada procesador depende de su arquitectura, existen lenguajes
llamados de alto nivel, ya que pueden ser usados con independencia del tipo de ordenador que se
esté usando, realizando una traducción automática al lenguaje propio del procesador que se esté
usando.
Los lenguajes de alto nivel pueden ser de dos tipos, intérprete o traductores. En los lenguajes de tipo
intérprete se va leyendo el programa instrucción a instrucción, y se va ejecutando cada una de ellas
inmediatamente después de traducirla. Por lo tanto, los procesos de traducción y ejecución son
simultáneos, y la traducción se realiza cada vez que se ejecute un programa.
Los lenguajes de tipo traductor cuentan con un compilador que traduce todo el programa a código
máquina y genera un archivo ejecutable, de tal forma que la traducción sólo se realiza una vez.
En general, los intérpretes son bastante más lentos en la ejecución, pero mucho más flexibles en la
escritura, lo que los hace idóneos para iniciarse en la programación. Python es un programa de alto
nivel tipo intérprete con una sintaxis sencilla, que puede orientarse a objetos.
1/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Algoritmos
Independientemente del lenguaje de programación usado, cuando un ordenador ejecuta un
programa, debe seguir una serie de órdenes encaminadas a conseguir un objetivo. Pero no basta con
indicar más o menos cómo alcanzar dicho objetivo. Tenemos que decir al ordenador exactamente
cómo realizar cada uno de los pasos, sin ningún tipo de ambigüedad, y en un tiempo finito.
Esa secuencia de pasos orientados a la consecución del objetivo es lo que se denomina algoritmo.
Como se expresan en lenguaje natural, los algoritmos presentan la enorme ventaja de que cada
programador puede traducirlos al lenguaje de programación que desee, ya que dos programas
escritos en diferentes lenguajes que realicen el mismo algoritmo darán lugar al mismo resultado.
Incluso es posible escribir dos programas diferentes con un mismo lenguaje que ejecuten el mismo
algoritmo.
En general, un algoritmo debe tener las siguientes características:
•
Debe tener cero o más datos de entrada.
•
Debe proporcionar al menos un dato de salida.
•
Cada paso debe ser definido con precisión y sin ambigüedad.
•
Debe finalizar tras realizar un número finito de pasos. Cada paso debe realizarse en un
tiempo finito.
•
A ser posible, deben ser eficientes. Deben realizar el proceso en el menos número de pasos
posibles y consumiendo la menor cantidad posible de recursos del sistema.
Es muy aconsejable emplear cierta cantidad de tiempo en usar lápiz y papel para escribir el
algoritmo mediante un diagrama de flujo antes de ponerse a programar, en vez de empezar a teclear
instrucciones en el ordenador. Esto nos puede ahorrar mucho tiempo y disgustos.
Operaciones aritméticas con Python
Si tecleamos en la consola la orden
python3.2
podremos interaccionar directamente con python, aprovechando que es un lenguaje intérprete. Eso
quiere decir que si escribimos una línea de comando él responderá ejecutándola y mostrando el
resultado. En ese momento, el prompt del bash ($) desaparece y se sustituye por
Python 3.2.3 (default, Jun 18 2015, 21:46:42) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> con el cursor parpadeando detrás de >>>. Podemos usar el lenguaje directamente como una
calculadora. Por ejemplo, si escribimos
>>>2+2
El programa devolverá
4
>>>
Los operadores aritméticos básicos (+, -, * y /) siguen las reglas de precedencias básicas. Así, la
2/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
operación
>>>3*(5+2)
devolverá
21
>>>
Además de las operaciones básicas, se definen la potenciación (**), el cambio de signo (-) y el
módulo o resto de una división (%).
Enteros y flotantes.
Python trabaja con dos formatos de números; enteros y flotantes. A un número entero no se le
asignan decimales. Esto ahorra espacio en memoria y agiliza los cálculos. Pero puede ocurrir que
operaciones con enteros den números con decimales. En ese caso, correos el riesgo de que el
programa devuelva resultados incorrectos.
En ese caso, lo más conveniente es usar flotantes, que asignan siempre una parte decimal.
>>> 3
3
>>> float(3)
3.0
>>>
Python 3.2 trabaja por defecto con flotantes, pero en algunas versiones anteriores esto no ocurre,
por lo que hay que comprobar antes de empezar a programar si tenemos o no que especificar que
trabajamos con números flotantes.
Números complejos
Python puede trabajar con números complejos. Basta con introducirlos con el siguiente formato:
>>> a = parte_real + parte_imaginaria j
Para hacer que nos devuelva la parte real tecleamos
>>> a.real
Y para la parte imaginaria
>>> a.imag
Por ejemplo, para introducir el número complejo 3+5·j teclearíamos
>>> a=3+5j Y para que nos devuelva las partes real e imaginaria:
>>> a.real 3.0 >>> a.imag 5.0 >>> Operadores lógicos.
Python también puede realizar las operaciones lógicas OR, AND y NOT. Como valores para operar,
3/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
se pueden usar indistintamente unos y ceros o True y False:
>>> 1 and 0
0
>>> True or False
True
>>> not 1
False
>>>
Operadores de comparación.
Los usaremos para comparar dos cifras. Son muy útiles en un programa, a la hora de tomar
decisiones que dependan de los rangos de valores que puedan adquirir las variables. Si se usan en la
terminal, devuelven un valor booleano. Son:
Operador
Comparación
==
Igual que
!=
Distinto que
>
Mayor que
>=
Mayor o igual que
<
Menor que
<=
Menor o igual que
Variables
Cuando definimos una variable, asignamos un nombre y un valor inicial a un espacio de memoria,
que queda reservado para almacenar los valores que pueda ir tomando la variable a lo largo de un
programa. Al crear una variable, siempre se le debe asignar un valor inicial.
Imaginemos que queremos calcular el perímetro de una circunferencia de radio 2,5 y el área del
círculo que crea. Como vamos a usar dos veces el valor del radio y otras dos el de , podemos crear
dos variables donde almacenemos estos valores, e incluso otras dos donde almacenemos los valores
del perímetro y del área, para no volver a tener que calcularlos:
>>> pi = 3.14159
>>> radio = 2.5
>>> perimetro = 2*pi*radio
>>> area = pi*radio**2
>>> perimetro
15.70795
>>> area
19.6349375 >>>
4/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Si asignamos un valor diferente a una variable existente, ésta almacenará el último de los valores.
El nombre de una variable se llama identificador. No puede empezar por un número. Se pueden usar
mayúsculas, minúsculas, números y el guión bajo (_). No se pueden usar palabras que Python
reserve para comandos propios.
Cadenas
Las cadenas son secuencias de caracteres a los que se les asigna un nombre. Se definen entre
comillas, y resultan muy útiles para representar información textual:
>>> nombre = “Lord Vetinari”
>>> nombre
'Lord Vetinari'
>>>
Listas
Podemos crear listas en las que se contengan una serie de caracteres o de números. Se crean igual
que una variable, pero introduciendo los elementos deparados por comas, dentro de corchetes [].
>>> lista_nombres = ["Vetinari", "Vimes"] >>> lista_nombres
['Vetinari', 'Vimes'] >>> Se puede operar con ellas, por ejemplo, añadiendo elementos:
>>> lista_nombres = lista_nombres + ["Angua"] >>> lista_nombres
['Vetinari', 'Vimes', 'Angua'] >>> La lista también puede ser de números. En ese caso, no hay que poner las comillas:
>>> numeros_pares = [2, 4, 6, 8, 10] >>> numeros_pares [2, 4, 6, 8, 10] >>>
y también se puede operar con ellos:
>>> numeros_pares = [2, 4, 6, 8, 10]
>>> numeros_pares = numeros_pares + [12, 14]
>>> numeros_pares [2, 4, 6, 8, 10, 12, 14] >>> Funciones predefinidas
Python tiene predefinidas una serie de funciones que podemos usar en las expresiones:
round()
Como hemos visto en un ejemplo anterior, Python no redondea los resultados. Podemos forzarle a
5/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
hacerlo, indicando el número de decimales que deseamos, usando la orden round():
>>> pi = 3.14159
>>> radio = 2.5
>>> perimetro = 2*pi*radio
>>> area = pi*radio**2
>>> round(perimetro,3)
15.708
>>> round(area,3)
19.635 >>>
abs()
Devuelve el valor absoluto del número o variable que aparezca entre paréntesis.
int()
Devuelve la parte entera de la expresión entre paréntesis.
float()
Convierte un entero a flotante.
str()
Recibe un número y devuelve su conversión a cadena.
Módulos
Los módulos permiten importar funciones que no están directamente disponibles al iniciar una
sesión. Entre ellos, el que más vamos a usar es el módulo math, que contiene funciones matemáticas
usuales.
Si queremos cargar las funciones trigonométricas seno y coseno, teclearemos:
>>>from math import sin, cos, pi
También hemos importado el valor de , para no tener que introducirlo como variable cada vez que
lo necesitemos, y porque las funciones trigonométricas en Python trabajan en radianes.
>>>sin(pi)
1.2246063538223773e­16 >>>cos(pi)
­1
>>>
Como se puede ver, el valor de sen() no es 0. Esto es debido a que Python usa 16 decimales de .
Podemos obligarle a mostrar un resultado redondeado a un decimal:
>>>round(sin(pi),1)
0.0
>>>
También podemos invocar todas las funciones del módulo math tecleando:
6/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
>>> from math import *
Pero esto ocupa memoria, por lo que es más útil importar solamente las funciones que vayamos a
necesitar en nuestro programa.
Las funciones del módulo math son:
sin()
Seno del ángulo expresado en radianes
cos()
Coseno del ángulo expresado en radianes
tan()
Tangente del ángulo expresado en radianes
exp()
e elevado a x
ceil()
Redondeo por arriba
floor()
Redondeo por abajo
log()
log10()
sqrt()
Logaritmo natural (neperiano)
Logaritmo decimal
Raíz cuadrada
PROGRAMAS.
Usar Python desde la consola, como hemos estado haciendo hasta ahora, es muy limitado. Es
bastante más operativo crear un documento de texto en el que escribamos la secuencia de
instrucciones que ejecutará Python. El contenido de este fichero de texto será el programa.
Imaginemos que queremos escribir un programa para calcular el perímetro de una circunferencia de
radio 2,5 y el área del círculo que encierra. Abriremos el editor gedit y escribiríamos el siguiente
programa, grabándolo con extensión .py.
Para ejecutarlo, abriríamos la terminal y desde el directorio en el que esté grabado el programa
teclearíamos:
$ python3.2 circulo.py
obteniendo la salida
15.708 19.635
Obviamente, el programa presenta graves inconvenientes. Si queremos cambiar el valor del radio
debemos abrir el fichero, modificarlo y volverlo a grabar antes de ejecutarlo.
Para evitar eso, podemos decir al programa que pida el valor de la variable radio desde el teclado.
Para ello, teclearíamos la siguiente línea de código (asegurándonos de que es flotante):
7/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
radio = float(input("Introduce el radio de la circunferencia: "))
Además, los resultados aparecen sin especificar cuál corresponde al perímetro y cuál al área.
Podemos modificar el aspecto de la salida de datos de la siguiente forma:
print("El perímetro vale:",round(perimetro,3)) print("El área vale:",round(area,3)) El programa quedaría modificado de esta forma:
Al ejecutarlo desde la consola, aparecería el siguiente mensaje:
$ Introduce el radio de la circunferencia: Con el cursor parpadeando. El programa está esperando a que el usuario introduzca el dato
solicitado. Al hacerlo, se ejecutarían las siguientes líneas del código, obteniendo:
El perímetro vale: 15.708 El área vale: 19.635
$
Como vemos, la sintaxis de la orden print() permite combinar texto con variables, separando con
comas (,) los diferentes componentes de lo que queramos que aparezca impreso. Es muy importante
recordar que lo que queremos que aparezca como texto debe ir entrecomillado. Si no, el programa
lo tomará como una variable. Dado que no se ha definido ninguna con ese nombre en el programa,
nos devolverá un error. Muchas veces los programas llevan órdenes print más o menos complicadas
al final de los mismos, para mostrar los resultados finales al usuario. Como Python es un programa
intérprete, no detectará posibles errores en la sintaxis hasta que llegue a esas líneas de código, cosa
que puede ocurrir después de llevar varios minutos ejecutando el programa. Como esas situaciones
suelen ser motivo de ira homicida por parte del programador, es muy recomendable examinar
cuidadosamente la sintaxis de todas las líneas de código que vayamos escribiendo.
Para mejorar la legibilidad de los programas, puede ser conveniente separar mediante líneas en
blanco los diferentes bloques funcionales del programa: importar módulos, introducción de datos,
operaciones con esos datos, salida de datos, etc.
También es conveniente asignar nombres a las variables que ofrezcan información sobre la utilidad
de dicha variable en el programa. Así, es mejor usar una variable llamada “radio” que una llamada
simplemente “r” para manejar el radio de la circunferencia.
Además, Python permite introducir comentarios en el programa. Que sirvan como aclaraciones para
que el lector pueda comprender su funcionamiento con más facilidad. Se inician con una
almohadilla (#). Todo lo que se escriba a continuación en esa línea será ignorado por Python.
8/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Condicionales
En multitud de ocasiones nos encontraremos con que el programa tendrá que ejecutar una serie de
instrucciones u otras dependiendo de que se cumpla o no una o varias condiciones. Como en casi
todos los lenguajes de programación, Python cuenta con la orden if, cuya estructura es:
if condición:
acción
acción
…
acción
else:
acción
acción
…
acción
Si se cumple la condición (o condiciones, usando funciones booleanas) marcada detrás de if, se
ejecutarán todas las acciones situadas debajo de la línea e indentadas (o sangradas) al mismo nivel.
En el momento en que se encuentre una orden que no presente sangría, el programa interpreta que
ya no pertenece a la serie de acciones a ejecutar si se cumple la condición if. Si el no cumplimiento
de las condiciones bajo if lleva a otras acciones se pueden añadir bajo la orden else:
Es importante tener en cuenta que la línea de código en la que se encuentren las sentencias if y else
debe finalizar con dos puntos (:).
Por ejemplo, imaginemos que queremos escribir un programa que solicite al usuario dos números
que dividiremos. El problema es que si se introduce un cero en el denominador el programa
devolverá un error de división entre cero, parándose la ejecución. En ese caso, podríamos obligar al
programa a comprobar si el denominador es nulo.
9/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Con la sentencia if den == 0: se comprueba si el denominador es nulo. En caso de que se cumpla la
condición, se ejecuta la serie de instrucciones (en este caso sólo una) que estén situadas debajo con
la misma indentación. A continuación de else: se ejecutan las órdenes que debe realizar el programa
en caso de que no se cumpla la condición, también con la indentación correspondiente.
Podemos refinar el programa algo más. Puede ocurrir que se dé el caso de que se introduzcan ceros
tanto en el numerador como en el denominador, lo que daría lugar a una indeterminación. En esta
ocasión, que el denominador sea cero no lleva a una única acción, sino que hay que introducir una
segunda sentencia if anidada respecto a la primera. Podríamos hacerlo de dos formas: con una
tercera sentencia if con al misma indentación que la segunda o con un else referido al segundo if:
También puede ocurrir que el programa deba elegir entre más de dos opciones. Imaginemos, como
ejemplo, un programa para saber si una cifra introducida por el usuario es positiva, negativa o nula.
Habría que comprobar cada uno de los casos por separado. En primer lugar, podríamos comprobar
si es nula. Si no lo es, comprobaríamos si es positiva. Si no es ni nula ni positiva, entonces es
negativa.
Una opción es usar la sentencia elif: (abreviatura de else if), que siempre debe ir precedida por una
sentencia if:. En esencia, lo que hace más o menos es “En caso de que no se cumpla la condición del
primer if, comprobar si se cumple esta otra). De esta forma, el programa quedaría:
10/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
En este caso concreto, no haría falta un segundo elif:, ya que, al no haber más posibilidades,
podemos finalizar con una sentencia else:.
También podemos comprobar que se cumplen dos condiciones simultáneas o una de varias usando
los operadores lógicos and y or:
if i == 1 and j == 2:
Ejecutaría las instrucciones correspondientes si se cumple a la ve que i sea 1 y j 2.
if i == 1 or j == 2:
Bastaría con que una de las dos condiciones fuese cierta.
While
Python ofrece dos formas de repetir una secuencia de instrucciones sin necesidad de volverla a
escribir, formando lo que se denominan bucles: while y for-in. De la sentencia for hablaremos más
adelante. En este apartado nos centraremos en la while. En esencia, se interpreta “mientras se
cumpla esta condición, realiza estas acciones:”
while condición:
acción
acción
…
acción
En el ejemplo de la izquierda, le decimos al programa que vaya imprimiendo el
valor de la variable i mientras siga siendo menor que 5. Cada vez que la
imprimamos, le aumentaremos su valor en 1. Cuando alcance el valor 5, dejará de
cumplirse la condición, saldremos del bucle y ejecutaremos el resto del programa,
que en este caso consiste solamente en un mensaje impreso en pantalla.
Los bucles son muy prácticos, pero hay que ser un poco cuidadoso con ellos, ya
que corremos el riesgo, si los programamos mal, de convertirlos en infinitos. Si
eso ocurre, no podremos recuperar el control si no es parando el programa desde el
teclado (ctrl+D).
Si en el ejemplo de la izquierda nos olvidamos de aumentar el valor de i en uno
cada vez que se ejecute el bucle, nunca saldremos de él, ya que i siempre valdrá 0.
Por tanto, nunca se cumplirá la condición que nos saca del bucle.
While también puede resultar muy útil para controlar la entrada de un dato incorrecto sin necesidad
de acudir a una sentencia if. Supongamos que queremos calcular la raíz cuadrada de un número. El
11/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
programa responderá con un error si la cifra introducida es negativa. El control se puede realizar de
un modo muy sencillo de la siguiente forma:
Bucle for-in
Es la otra manera de realizar bucles. La forma de emplearlo es:
for variable in serie de valores:
acción
acción
…
acción
Veamos cómo funciona mediante un ejemplo. Supongamos que queremos imprimir en pantalla los
10 primeros números enteros. Escribiríamos el siguiente código:
for i in range (1, 11):
print (i)
El ordenador interpreta que la variable i va a tomar todos los valores enteros comprendidos en el
rango entre el primero que se especifique y el anterior al último, y los irá imprimiendo por orden.
En parámetro range admite un tercer elemento, que indicaría el incremento. Por defecto, el
incremento es 1. Es decir, para obtener el siguiente término en un rango se le suma 1 al anterior. Si
quisiéramos imprimir los números pares que hay entre el 2 y el 10 escribiríamos:
for i in range (2, 11, 2):
print (i) Como la orden for-in acaba en :, se exige que las líneas de código
afectadas estén indentadas.
En el ejemplo de la izquierda, vemos que el programa tiene dos bucles
for-in. En ambos se van a imprimir los números pares comprendidos
entre 2 y 6. También se imprimirá un nombre que hayamos introducido
a través del teclado.
En el primer caso, la orden de imprimir el nombre no tiene indentación.
Por lo tanto, no se considera parte del bucle y se imprimirá después de
que en pantalla aparezcan los números 2, 4 y 6.
En el segundo caso la orden print (nombre) se ha escrito con sangría,
por lo que se considera parte del bucle. El programa considera que hay
que imprimir alternativamente una cifra par y el nombre que se haya introducido a través del
12/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
teclado; y se seguirá ejecutando el programa hasta que la variable j haya alcanzado el último valor
especificado en el rango. La salida del programa quedaría:
Nombre: Vetinari 2 4 6 Vetinari 2 Vetinari 4 Vetinari 6 Vetinari $
Si queremos una cuenta decreciente, introduciríamos en primer lugar el número mayor, en segundo
el anterior al menor y un incremento negativo (decremento).
También podemos definir un for-in que contenga una cadena de caracteres o números (una lista):
for i in [“Vetinari”, “Vimes”, “Angua”]:
print (i)
En pantalla aparecerían sucesivamente los nombres en el corchete.
Se pueden anidar bucles unos dentro de otros. La única limitación es que no podemos asignar el
mismo nombre a dos variables diferentes.
Variables Booleanas
Las variables booleanas pueden adoptar dos valores, True o False, y sobre ellas se pueden aplicar
los operadores lógicos definidos al principio del tema. Ya hemos visto un ejemplo en la sección if
sobre uso de operadores lógicos. En esta sección veremos como podemos usar variables booleanas
mediante un ejemplo.
Supongamos que deseamos escribir un programa capaz de decirnos si un número entero es primo.
En principio, tendríamos que ver los restos de todas las divisiones entre es número y los enteros
comprendidos entre 2 y el anterior a él mismo. Si todos son no nulos, el número es primo. Si no, no
lo es.
Pero podemos ahorrar tiempo de cálculo en el caso de que el número no sea primo, ya que basta con
que una sola división produzca resto cero para demostrar que el número no es primo, sin necesidad
de seguir haciendo divisiones.
Dado que el problema sólo tiene dos opciones (primo o no), se presta muy bien al uso de variables
booleanas. Creamos una variable suponiendo de entrada que el número será primo:
es_primo = True
Si encontramos una división con resto cero, cambiaríamos su valor a False. Cuando se compruebe
el valor de la variable al finalizar el programa, podremos saber si el número introducido es primo o
13/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
no. El programa quedaría así:
En cuanto encontramos un divisor, cambiamos el valor de la variable a False e interrumpimos el
bucle con break. Si no hay ningún divisor, se ejecuta el bucle completo y se comprueba el valor de
es_primo, que sigue en su valor inicial True.
La orden break interrumpe la ejecución del bucle pero no del programa. Si necesitamos finalizar el
programa en algún punto anterior al final del fichero, usaremos la orden quit().
Programando con listas
En la página 5 se introdujo el concepto de listas. Veamos un posible uso de las mismas en un
programa, modificando el anterior, de tal forma que en vez de comprobar si un número es primo o
no, nos muestre una lista con los divisores de los que no sean primos. En este caso, podemos crear
una lista a la que iríamos añadiendo los divisores del número no primo según los vayamos
detectando.
14/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Cada vez que el resto de la división entre el número en cuestión y el índice i sea nulo, sabremos que
el valor de i será un divisor del número. En ese caso, lo añadiríamos a la lista.
Al igual que ocurre con las variables, al inicio del programa deberemos nombrarla y darle un valor
inicial. En este caso, queremos que esté vacía. Esto es lo que conseguimos con la línea a = []
Try Except
Como vimos en el ejemplo del programa para dividir dos números de la página 9, teníamos que
tener presente la posibilidad de que los números introducidos pudiesen dar lugar a errores en el
programa. Para ello, introducíamos sentencias if para poder controlar esos problemas. Un gran
número de comprobaciones de este estilo en un programa puede ralentizar su ejecución. En esos
casos, se puede acudir a la estructura try-except, que tiene la siguiente estructura:
try:
acción
acción
…
acción
except:
acción
acción
…
acción
En primer lugar se ejecutan todas las instrucciones que hayamos escrito bajo el bloque try (ojo con
las indentaciones). Si no ocurre ningún error durante su ejecución, el programa seguirá adelante sin
problemas. Pero si la ejecución de alguna de estas órdenes lleva a un error, el programa acude a las
órdenes bajo el bloque except. Ahí programaríamos cómo debe actuar el programa para cada uno de
los errores posibles. Con esta estructura, el programa para dividir dos números entre sí quedaría de
la siguiente forma:
15/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Funciones
Los programas que hemos visto hasta ahora sólo realizan una tarea y se ejecutan una única vez.
Muchas veces nos encontraremos con la necesidad de realizar varias tareas, de repetirlas más de una
vez o de ambas cosas. En lenguajes de programación más antiguos, como BASIC o FORTRAN, se
acudía a las subrutinas, que podían invocarse mediante una orden GOSUB, o mediante llamadas a
líneas concretas del programa con comandos tipo GO TO. En la actualidad estos métodos han caído
en desuso debido a los problemas que surgían al gestionar una gran cantidad de ellos en un mismo
programa.
Muchos lenguajes de programación, entre ellos Python, ofrecen una alternativa más flexible y
manejable, como son las funciones. Cada función que definamos puede hacer que las líneas de
código que haya debajo de ellas (ojo nuevamente a la indentación) puedan tratarse como subrutinas
o pequeños subprogramas dentro del programa. Cuando queramos ejecutarlo, simplemente haremos
una llamada a la función.
Veamos un ejemplo modificado del programa que habíamos realizado para calcular el perímetro y el
área de un círculo, de tal forma que se ofrezca al usuario la posibilidad de realizar otro cálculo sin
necesidad de volver a ejecutar el programa:
Hemos definido dos funciones, una para realizar el cálculo, a la que hemos llamado programa() y
otra para ofrecer la posibilidad de hacer otro cálculo o repetir el programa, llamada repetir().
Para definirlas, sólo necesitamos escribir def nombre_funcion(): y escribir debajo las órdenes que se
ejecutarán cuando la llamemos.
16/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Después de definirlas y programarlas, lo único que hemos necesitado es llamarlas en el orden que
deseemos que se ejecuten. Como se puede comprobar, se puede hacer una llamada a una función
dentro de la misma u otra función.
Los paréntesis detrás del nombre de una función no se escriben por capricho. Permiten definir una o
más variables que harán que una misma función pueda actuar de formas diferentes dependiendo del
valor de la variable. Veámoslo mediante un ejemplo.
Los más curiosos de los alumnos hará ya unas cuántas páginas que se habrán dado cuenta de que el
nombre Vetinari aparece repetidas veces en los ejemplos que se han puesto, y ansiosos de ampliar
sus horizontes mentales, habrán acudido raudos a google para averiguar quién es.
Vamos a escribir un programa en el que daremos al usuario la oportunidad de demostrar este nuevo
conocimiento, otorgándoles tres oportunidades de contestar correctamente una pregunta relacionada
con el famoso personaje.
Dado que tenemos que realizar hasta tres veces la misma acción, podemos definir una función para
ella, pero como además debemos llevar una cuenta de los intentos fallados, necesitaremos definir
una variable que no sólo llevará la contabilidad de los fallos, sino que además le diga a la función
en qué iteración se encuentra, para dar otra oportunidad o finalizar el programa con un fracaso del
usuario. En este caso, definimos una variable en el nombre de la función, cuyo valor inicial debe ser
asignado en la definición de la función:
A lo largo del programa se hacen dos llamadas a la función:
Una al final del código (que será lo primero que se ejecute después de haber borrado la pantalla) en
la que no hace falta acudir al valor de la variable.
La otra llamada se hace dentro de la misma función, de tal forma que ella sabe en qué intento nos
encontramos y obrará en consecuencia.
Variables locales y globales.
Las variables que se definen dentro de una función se llaman variables locales, que sólo se definen
y aplican dentro de la función. Si deseamos usar una variable definida dentro de una función en
otras partes del programa deberemos definirla como variable global. Si pretendemos usar una
variable local fuera de la función en la que ha sido definida, el intérprete devolverá un mensaje de
17/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
error.
Como siempre, intentaremos aclarar el concepto mediante un ejemplo.
El programa que escribimos en la página 14 comprobábamos si un número entero era primo o no.
en caso de no serlo, calculábamos sus divisores. Vamos a introducir unos cambios en el programa.
Calcular los divisores de un número no primo grande puede llevar mucho tiempo. Por lo tanto,
vamos a ofrecer al usuario la posibilidad de calcular los divisores después de comprobar si el
número no es primo (para esto último vale con encontrar un sólo divisor).
Vamos a reescribir el programa con tres funciones:
programa (), que comprobará si el número es o no primo,
divisores (), que calculará los divisores de un número no primo si el usuario lo desea y
repetir (), que ofrecerá la posibilidad de realizar un nuevo cálculo.
Como ya hemos usado esta última función en un ejemplo anterior, nos centramos en cómo quedarán
las otras dos funciones.
En cuanto encontremos un divisor del número que hemos introducido en la variable num haremos
una llamada a la función divisores(), donde se ofrecerá al usuario la posibilidad de calcular sus
divisores (de la cifra introducida, no del usuario. En general, no es fácil, ni ético, ni probablemente
legal dividir a los usuarios). Para no tener que repetir el cálculo desde el inicio (el primer divisor
puede ser una cifra muy alta), guardamos en la variable primer_divisor el número i por el que es
divisible nuestra cifra, para continuar el cálculo desde este punto. Para que la función divisores ()
pueda usar esas variables definidas en otra función, las hemos declarado globales en las lineas 4 y 5,
antes de asignarles un valor inicial.
Cuando el programa realiza la llamada a la función divisores (), se ejecutará lo siguiente:
18/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Si el usuario desea calcular los divisores de la cifra introducida, se retoma el cálculo desde donde lo
dejó la función programa (). Para ello, se toman los valores de las variables num y primer_divisor.
Como ambas han sido definidas como variables globales, el resto del programa podrá utilizarlas sin
problemas. Si no lo hubiésemos hecho así, se tratarían como variables locales, y el intérprete nos
devolvería un mensaje de error.
19/20
Introducción a la programación con Python. TICO I 1º Bachillerato.
Dpto. Tecnología IES Palas Atenea
Ejercicios
En todos lo ejercicios, deberá incluirse la opción de volver a realizar otro cálculo.
•
Escribir un programa para calcular el área de un polígono regular de n lados.
•
El área A de un triángulo se puede calcular a partir del valor de dos de sus lados, a y b, y del
ángulo que éstos forman entre sí  con la fórmula A = 1/2 a·b·sen(). Diseña un programa
que pida al usuario el valor de los dos lados (en metros), el ángulo que estos forman (en
grados), y muestre el valor del área.
•
Escribir un programa para calcular la superficie y el volumen de varias figuras: Cubo,
prisma, cilindro, y esfera.
•
Escribir un programa para calcular las soluciones de una ecuación de segundo grado. Hay
que tener en cuenta la posibilidad de que las dos soluciones sean iguales y que sean
imaginarias.
•
Escribir un programa para calcular los múltiplos de un número entero dentro de un intervalo
de números.
•
Diseña un programa que sea capaz de calcular si un número es una potencia de 2. En caso
afirmativo, mostrar qué potencia de 2 es. (Sugerencia: El problema se puede simplificar
trabajando con logaritmos)
Para ampliar
Estos apuntes no son más que una brevísima introducción a la programación en Python. En internet
se pueden encontrar una gran cantidad de manuales completos y sitios web actualizados donde
ampliar lo aquí mostrado. Algunos son:
https://docs.python.org/3/contents.html (Manual de la versión 3.5 de la página de Python Software
Foundation)
repositori.uji.es/xmlui/bitstream/10234/102653/1/s93.pdf (Un completo manual en castellano de la
Universidad Jaume I de Castellón)
https://librosweb.es/libro/python/ (Un manual en castellano para principiantes)
http://librosweb.es/libro/algoritmos_python/ (Algoritmos para Python)
20/20