TEMA 2 PROGRAMACIÓN
TEMA 2. PROGRAMACIÓN
2.1 2.2 2.3 2.4 2.5 2.6
Algoritmos Tipos de datos simples y variables Instrucciones básicas Estructuras de control Tipos de datos estructurados: Secuencias Funciones
2.1 Algoritmos Un algoritmo es una secuencia finita de acciones primitivas, entendiendo como tales, aquellas que pueden ser ejecutadas por el procesador.
Técnicas para el diseño de algoritmos:
Programación estructurada • Programa con diseño modular • Cada módulo tiene diseño descendente • Cada módulo se codifica con estructuras de control secuenciales, selectivas e iterativas
2.1 Algoritmos Lenguaje Python Python fue creado a principios de los noventa por Guido van Rossum en los Países Bajos. Es relativamente joven. Ventajas
Python es un lenguaje muy expresivo, es decir, los programas Python son muy compactos. Un programa Python suele ser bastante más corto que su equivalente en lenguajes como C. Python llega a ser considerado por muchos un lenguaje de programación de muy alto nivel. Python es muy legible. La sintaxis de Python es muy elegante y permite la escritura de programas cuya lectura resulta más fácil que si utilizáramos otros lenguajes de programación.
2.1 Algoritmos Lenguaje Python Ventajas
Python ofrece un entorno interactivo que facilita la realización de pruebas y ayuda a despejar dudas acerca de ciertas características del lenguaje. El entorno de ejecución de Python detecta muchos de los errores de programación que escapan al control de los compiladores y proporciona información muy rica para detectarlos y corregirlos. Python puede usarse como lenguaje imperativo procedimental o como lenguaje orientado a objetos. Posee un rico juego de estructuras de datos que se pueden manipular de modo sencillo.
2.2 Tipos de datos simples y variables Estructura básica de un programa En nuestros programas utilizaremos: Identificadores: Designan datos y partes del programa. Formados por letras minúsculas, mayúsculas, dígitos y/o el carácter de subrayado, con una restricción: que el primer carácter no sea un dígito. Python distingue mayúsculas de minúsculas Palabras reservadas: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, nonlocal, None, not, or, pass, raise, return,True, try, with, while y yield.
2.2 Tipos de datos simples y variables Programas o scripts Los programas en Python tienen extensión .py
Ejemplos:
2.2 Tipos de datos simples y variables
Tipos simples:
Enteros int, reales float y lógicos boolean. No existe el tipo carácter.
Tipos compuestos:
Inmutables:
Conjunto congelado frozenset : colección de elementos, potencialmente de distinto tipo (mientras estén entre los simples e inmutables), no repetidos y sin orden entre sí. Ejemplo: congelado=frozenset({3,5,6.1}) Cadena str : secuencia de caracteres Ejemplo: cadena=’buenos días’ Tupla tuple: secuencia de 0, 1 o n elementos, potencialmente de distinto tipo Ejemplo: t1=(1,’a’,3,3)
2.2 Tipos de datos simples y variables
Tipos compuestos:
Mutables:
Conjunto set: colección de elementos (sin orden y no repetidos), potencialmente de distinto tipo simple al que se le pueden añadir nuevos elementos o eliminar existentes. Ejemplo: conj1={’infinito’,1,0,5,(’a’,1)} Lista list: secuencia de elementos, potencialmente de distinto tipo (incluidos mutables), a la que se le puede eliminar elementos, añadir nuevos, y modificar valores individuales. Ejemplo: lista=[’hola’,4, (1,2),{3,4}] Diccionario dict: colección (conjunto) de pares de clave-valor. La clave es de cualquier tipo inmutable. Los valores pueden ser de cualquier tipo. Ejemplo: ingredientes={’tomate’:(1,’Kg’), ’pepino’:2,’sal’:’1 cucharilla’, ’aceite’:.1, ’oregano’:’1 pizca’}
2.2 Tipos de datos simples y variables
Entero int 16 bits de representación.
Operadores
Ejemplos:
Binarios de relación:==, <, >, !=, <=, >= Aritméticos: +, -, *, //, %, ** Casting (convertir el valor de una variable de un tipo a otro): int() 5 // 3 es 1 5 % 3 es 2 5 ** 2 es 25 int(-2.9) es -2 int(‘2’) es 2
2.2 Tipos de datos simples y variables
Real float Python utiliza doble precisión: 64 bits Operadores Relacionales: ==, <, >, !=, <=, >= Aritméticos: +, -, *, / Funciones: Predefinidas: abs, round, float… Definidas en módulos: sin, cos (módulo math)… Ejemplo: abs(-3) es 3
float(‘3.2’) es 3.2
2.2 Tipos de datos simples y variables
Lógico boolean Un dato de tipo lógico sólo puede presentar uno de dos valores: True o False Operadores Relacionales: ==, <, >, !=, <=, >= Lógicos: and, or, not Ejemplos: 3!=5 es True 3<5 and 17<10 es False
2.2 Tipos de datos simples y variables
Lógico boolean
2.2 Tipos de datos simples y variables
2.2 Tipos de datos simples y variables Utilizaremos variables en nuestros programas para guardar valores. Estas variables serán de los tipos que hemos descrito. El nombre de una variable es su identificador: formado por letras minúsculas, mayúsculas, dígitos y/o el carácter de subrayado, con una restricción: que el primer carácter no sea un dígito. Este identificador no debe coincidir con ninguna palabra reservada: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, nonlocal, None, not, or, pass, raise, return,True, try, with, while y yield. Python distingue entre mayúsculas y minúsculas, así que área, Área y ÁREA son tres identificadores válidos y diferentes.
2.2 Tipos de datos simples y variables Ejemplo: Supongamos que deseamos efectuar el cálculo del perímetro y el área de un círculo. La fórmula del perímetro es 2*pi*r, donde r es el radio, y la fórmula del área es pi*r**2. Si el radio es 1.298373 m, tenemos:
2.3 Instrucciones básicas
Asignación En Python, la primera operación sobre una variable debe ser la asignación de un valor. variable=expresion Se evalúa la expresión a la derecha del símbolo igual y se guardar el valor resultante en la variable indicada a la izquierda del símbolo igual. Recuerda que comparar == no es asignar = Asignaciones con operador: +=, -=, *=, /=, %=, //=, **= Ejemplos:
2.3 Instrucciones básicas
Lectura
Vamos a aprender a hacer que nuestro programa, cuando se ejecute, pida datos que se introduzcan desde teclado: utilizaremos input()
Esta función detiene la ejecución del programa y espera a que el usuario escriba un texto y pulse la tecla de retorno de carro; en ese momento prosigue la ejecución y la función devuelve una cadena con el texto que tecleó el usuario.
Ejemplo: Tres formas de leer datos para calcular el volumen de una esfera
2.3 Instrucciones básicas
Escritura
Vamos a aprender escribir valores en pantalla: print(variable) Ejemplo:
Para que no haya retorno de carro:
print(variable,end=‘ ‘)
2.3 Instrucciones básicas
Formato de escritura format
Interpolar valores en una cadena:
También podríamos haber escrito la instrucción como: ‘Los números {} y {} han sido interpolados.’.format(1.23, 9.9999)
Cuidado:
Para mostrar los valores en coma flotante con un solo decimal:
2.4 Estructuras de control
Sentencias condicionales
Sentencia if Sentencia if-else Forma compacta elif
Sentencias iterativas
Sentencia while Sentencia for-in
2.4 Estructuras de control. Sentencias condicionales
Sentencia if
F Cond V acción acción…
2.4 Estructuras de control. Sentencias condicionales
Sentencia if
Ejemplo:
2.4 Estructuras de control. Sentencias condicionales
Sentencia if
2.4 Estructuras de control. Sentencias condicionales
Se pueden establecer sentencias if anidadas
2.4 Estructuras de control. Sentencias condicionales
Sentencia if-else que equivale a:
V
F Cond
acción acción…
acción acción… .
2.4 Estructuras de control. Sentencias condicionales
Sentencia if-else
Ejemplo:
2.4 Estructuras de control. Sentencias condicionales Sentencia if-else Ejemplo:
2.4 Estructuras de control. Sentencias condicionales
Forma compacta elif
que equivale a:
2.4 Estructuras de control. Sentencias condicionales
Forma compacta elif
Ejemplo:
2.4 Estructuras de control. Sentencias iterativas
Sentencia while
2.4 Estructuras de control. Sentencias iterativas
Sentencia while
Ejemplo:
Ten cuidado con los bucles infinitos:
2.4 Estructuras de control. Sentencias iterativas Sentencia while Ejemplo: un programa que calcula la suma de los 1000 primeros números
2.4 Estructuras de control. Sentencias iterativas
Sentencia for-in
2.4 Estructuras de control. Sentencias iterativas
Sentencia for-in
Otro ejemplo:
Una versión más simple:
2.4 Estructuras de control. Sentencias iterativas
Función range
Ejemplos:
range(2, 10) es [2, 3, 4, 5, 6, 7, 8, 9] range(0, 3) es [0, 1, 2] range(-3, 3) es [-3, -2, -1, 0, 1, 2] range(-10, -1) es [-10, -9, -8, -7, -6, -5, -4, -3, -2]
2.4 Estructuras de control. Sentencias iterativas
Función range
Podemos usar range con uno, dos o tres argumentos: range(5) es [0, 1, 2, 3, 4] range(2, 10, 2) es [2, 4, 6, 8] range(2, 10, 3) es [2, 5, 8] range(10, 5, -1) es [10, 9, 8, 7, 6] range(3, -1, -1) es [3, 2, 1, 0] range(10, 1, -3) es [10, 7, 4]
2.4 Estructuras de control. Sentencias iterativas
for-in como forma compacta de ciertos while
Ciertos bucles se ejecutan un número de veces fijo y conocido a priori:
Ejemplo: Calcula el sumatorio de los 1000 primeros números
2.4 Estructuras de control. Sentencias iterativas
for-in como forma compacta de ciertos while
Podemos escribirlos de la siguiente forma:
En el ejemplo:
2.4 Estructuras de control. Sentencias iterativas
Rotura de bucles: break
2.4 Estructuras de control. Sentencias iterativas
Índice del bucle for-in
En un bucle for-in, las variables de índice solo deben usarse para consultar su valor, nunca para asignarles uno nuevo. Ejemplo: Es incorrecto:
O utilizar el mismo índice para dos bucles anidados:
2.5 Tipos de datos estructurados: Secuencias
Cadenas str
Python ofrece una serie de operadores y funciones predefinidos para las secuencias de caracteres:
Operador + : acepta dos cadenas como operandos y devuelve la cadena que resulta de unir la segunda a la primera. Operador *: acepta una cadena y un entero y devuelve la concatenación de la cadena consigo misma tantas veces como indica el entero. int: recibe una cadena cuyo contenido es una secuencia de dígitos y devuelve el número entero que describe. float: acepta una cadena cuyo contenido describe un flotante y devuelve el flotante en cuestión.
2.5 Tipos de datos estructurados: Secuencias
Cadenas str
Podemos también manipular cadenas mediante métodos que les son propios:
a.lower() (paso a minúsculas): devuelve una cadena con los caracteres de a convertidos en minúsculas. a.upper() (paso a mayúsculas): devuelve una cadena con los caracteres de a convertidos en mayúsculas. a.format(expr1 expr2 . . . ) (sustitución de marcas de formato): devuelve una cadena en la que las marcas de formato de a se sustituyen por el resultado de evaluar las expresiones dadas. a.split() : obtiene una lista con todas las palabras de una cadena.
2.5 Tipos de datos estructurados: Secuencias
Cadenas str
Python ofrece una serie de operadores y funciones predefinidos:
str: se le pasa un entero o flotante y devuelve una cadena con una representación del valor como secuencia de caracteres. ord: acepta una cadena compuesta por un único carácter y devuelve su código Unicode (un entero). chr: recibe un entero y devuelve una cadena con el carácter que tiene a dicho entero como código Unicode. len: devuelve la longitud de una cadena
2.5 Tipos de datos estructurados: Secuencias
Cadenas str Es posible incluir ciertos caracteres especiales que no tienen una representación trivial: Ejemplo: Saltos de línea \n
También tenemos: \t tabulador horizontal \\ barra invertida \’ comilla simple \” comilla doble \ y salto de línea: para expresar una cadena en varias líneas
2.5 Tipos de datos estructurados: Secuencias
Cadenas str Podemos acceder a cada uno de los caracteres de una cadena utilizando un operador de indexación: a[i] es el carácter que ocupa la posición i+1 en a
2.5 Tipos de datos estructurados: Secuencias
Cadenas str
Cuidado: Las cadenas son inmutables
2.5 Tipos de datos estructurados: Secuencias
Cadenas str Podemos recorrer de izquierda a derecha una cadena con un bucle for-in. Veamos tres ejemplos:
2.5 Tipos de datos estructurados: Secuencias
Cadenas str Ejemplo: Contador de palabras.
2.5 Tipos de datos estructurados: Secuencias
Cadenas str Subcadenas: El operador corte La expresión a[i:j] significa que se desea obtener la subcadena formada por los caracteres a[i] , a[i+1] , . . . , a[j-1].
a[2:5], a[-5:5] , a[2:-2] y a[-5:j-2] es la cadena ‘emp’ El corte a[:j] es equivalente a a[0,j] y el corte a[i:] equivale a a[i:len(a)] Se pueden utilizar cortes con tres parámetros: a[0:len(a):2] selecciona los caracteres de índice par: ‘Eepo’ Así se puede invertir la cadena a con la siguiente expresión: a[::-1]
2.5 Tipos de datos estructurados: Secuencias
Cadenas str Referencias a cadenas:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Python nos permite definir secuencias de valores de cualquier tipo. Los valores de una lista deben estar entre corchetes y separados por comas.
2.5 Tipos de datos estructurados: Secuencias
Listas list
Muchos de los operadores y funciones que trabajan sobre cadenas, también lo hacen sobre listas: len, +,*,operador de corte:
Podemos construir listas que contienen réplicas de un mismo valor:
2.5 Tipos de datos estructurados: Secuencias
Listas list Operador is
2.5 Tipos de datos estructurados: Secuencias
Listas list Modificación de elementos de listas:
2.5 Tipos de datos estructurados: Secuencias Listas list Mutabilidad, inmutabilidad y representación de la información en memoria: Python procura almacenar en memoria una sola vez cada valor inmutable
Los arrays se representan en memoria siguiendo la figura de la derecha
2.5 Tipos de datos estructurados: Secuencias
Listas list
Diferencia entre el operador + y append:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Para leer una lista podemos hacerlo elemento a elemento:
Si usamos append evitaremos que cada concatenación genere una nueva lista:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Otra forma de leer una lista:
Con las siguientes instrucciones estamos leyendo una cadena, no una lista.
Lista
Tal y como vimos, para transformarlo en una lista podríamos utilizar lista.split()
2.5 Tipos de datos estructurados: Secuencias
Listas list
Para eliminar elementos de una lista tenemos utilizamos del:
La sentencia del modifica directamente la lista sobre la que opera. Ten cuidado al borrar un elemento ya que estarás modificando también el tamaño de la lista.
2.5 Tipos de datos estructurados: Secuencias
Listas list
Podemos también iterar sobre los elementos de una lista mediante el operador in:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Se puede hacer una asignación de una lista a otra:
puede escribirse:
Esto permite intercambiar dos variables de forma sencilla:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Podemos representar una matriz con una lista de listas de números:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Así crearemos una matriz con tres filas y seis columnas:
2.5 Tipos de datos estructurados: Secuencias
Listas list
Vamos a ver ahora cómo podemos leerla desde teclado:
2.6 Funciones En capítulos anteriores hemos aprendido a utilizar funciones: Predefinidas: abs, round, etc. Importadas de módulos: sin, cos del módulo math
Vamos ahora a aprender a definir nuestras funciones.
2.6 Funciones La siguiente función recibe un número y devuelve el cuadrado de dicho número:
Nuestros programas definirán funciones y las llamarán:
2.6 Funciones
Las reglas para dar nombre a las funciones y a sus parámetros son las mismas que seguimos para dar nombre a las variables
2.6 Funciones Otro ejemplo:
Aunque hemos aprendido a calcular sumatorios con bucles, desde la versión 2.3, Python ofrece una forma mucho más cómoda de hacerlo: la función predefinida sum
2.6 Funciones Otro ejemplo: Este programa calcula el máximo de los elementos de una lista de números.
2.6 Funciones También se pueden definir funciones con varios parámetros
2.6 Funciones No es obligatorio utilizar parámetros en las funciones:
2.6 Funciones Un ejemplo típico son los menús que leen opciones:
Que se llamaría de la siguiente forma:
2.6 Funciones Existen funciones que no devuelven valores, por ejemplo, las que se utilizan para escribir valores en pantalla: Ejemplo: Solicita al usuario un número y muestra por pantalla todos los números perfectos entre 1 y dicho número.
Esta funciones no tienen sentencia return.
2.6 Funciones Una función puede devolver varios valores mediante una lista:
Más apropiado:
Llamada: [a, b]= minmax(10, 2, 5) print(‘El mínimo es ‘, a) print(‘El máximo es ‘, b)
2.6 Funciones Variables globales y locales Vamos a estudiar la diferencia entre las variables definidas en el programa principal y dentro de las funciones. Ejemplo: Definamos una función que, dados los tres lados de un triángulo, devuelva el valor de su área.
La variable s es una variable local. a, b y c son también variables locales.
2.6 Funciones Variables globales y locales
Este programa provoca un error al ejecutarse porque intenta acceder a s desde el programa principal. Las variables que sólo existen en el cuerpo de una función se denominan variables locales. El resto de variables se llaman variables globales.
2.6 Funciones Variables globales y locales Otro ejemplo: Queremos ayudarnos con un programa en el cálculo del área de un triángulo de lados a, b y c y en el cálculo del ángulo (en grados) opuesto al lado a.
2.6 Funciones Variables globales y locales
Observa que tenemos dos variables s diferentes y que cada una toma valores distintos sin interferir en la otra. Una es local y la otra global.
2.6 Funciones Variables globales y locales
Cada función define un ámbito local propio: su cuerpo. Los identificadores de las variables locales sólo son visibles en su ámbito local. Por ejemplo, la variable opción definida en la función menú solo es visible en el cuerpo de menú.
2.6 Funciones Variables globales y locales En nuestros programas tendremos ámbitos locales y globales.
Cuidado: Si el identificador de una variable (o función) definida en el ámbito global se usa para nombrar una variable local en una función, la variable (o función) global queda oculta y no es accesible desde el cuerpo de la función. Esto ocurre con la variable s. Como norma general, no utilizaremos los mismos nombres para las variables globales y locales.
2.6 Funciones Más sobre el paso de parámetros ¿Qué ocurre si el parámetro es modificado dentro de la función? ¿Se modificará igualmente la variable o parámetro del ámbito desde el que se produce la llamada? Veamos un ejemplo: 5
6
2
3
2.6 Funciones Más sobre el paso de parámetros Más ejemplos:
a: 1 b: 2
0 [1, 1, 2]
En el segundo programa, la lista b se ha modificado al ejecutarse la función.
2.6 Funciones Más sobre el paso de parámetros Si un parámetro modifica su valor mediante una asignación, (probablemente) obtendrá una nueva zona de memoria y perderá toda relación con el argumento del que tomó valor al efectuar el paso de parámetros. Cuidado: dentro de una función se puede modificar una lista (mutable): Operaciones como append, del o la asignación a elementos indexados de listas modifican la propia lista, por lo que los cambios afectan tanto al parámetro como al argumento. Las cadenas son inmutables y, por tanto, no se modifican.