programación en java -...

91
Introducción a la programación en Python Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria [email protected]

Upload: hoangthuy

Post on 22-Sep-2018

261 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Introducción a la programación en Python

Pedro CorcueraDpto. Matemática Aplicada y Ciencias de la ComputaciónUniversidad de Cantabria

[email protected]

Page 2: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 2

Objetivos

• Revisión de la programación en Python• Funciones y Módulos • Programación orientada a objetos• Estructuras de datos

Page 3: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 3

Índice

• Introducción• Tipos de datos• Condicionales y ciclos• Arrays• Entrada y Salida• Funciones • Módulos• Programación orientada a objetos• Búsqueda y ordenación• Pilas, Colas

Page 4: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 4

¿Qué es Python?

• Python es un lenguaje de programación de alto nivel multiplataforma (Windows, MacOS, Linux). Creado por Guido van Rossum (1991).

• Es sencillo de aprender y de entender.• Los archivos de python tienen la extensión .py

– Archivos de texto que son interpretados por el compilador. Para ejecutar programas en Python es necesario el intérprete de python, y el código a ejecutar.

• Python dispone de muchas librerías para todo tipo de funciones.

Page 5: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 5

Instalación de Python

• La última versión de Python es la 3. • Sitio oficial de descargas.• Sitio oficial de documentación

Page 6: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 6

Instalación de Python

• La última versión de Python es la 3. • Sitio oficial de descargas.

– Con ello se instala el intérprete Python, IDLE (Integrated Development and Learning Environment), and Tkinter.

– Se recomienda incluir python en la variable de entorno PATH

• Sitio oficial de documentación

Page 7: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 7

Instalación de Librerías

• Para utilizar las librerías del libro de referencia es necesario instalar las siguientes librerías:– NumPy (>python -m pip install numpy)– Pygame (>python -m pip install pygame)

• Descargar la librería introcs-1.0.zip. Descomprimir en un directorio y ejecutar, desde una ventana de Símbolo de Sistema, el comando:>python setup.py install

• Comprobar en un Python prompt, escribiendo>>> import stdio (No debe generarse errores)

Page 8: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 8

Configuración y verificación

• Configuración de IDLE: – Ejecutar IDLE de Python y en Options→Configure IDLE

→ General →Open Edit Window. Click en Ok y cerrar.

• Escribir con IDLE el fichero holamundo.py import stdio# Escribe 'Hola, Mundo' en salida standard stdio.writeln('Hola, Mundo')

• En una ventana de comandos ejecutar con:>python holamundo.py

Page 9: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 9

Descarga de programas de ejemplo

• Descargar con un navegador los programas de ejemplo (introcs-python.zip). – Descomprimir en un directorio y en una ventana de

comando ejecutar >python bouncingball.py

• Descargar los datos de ejemplo (introcs-data.zip) de los programas. Descomprimir en el directorio de los programas.

• Opcionalmente descargar la librería (stdlib-python.zip) para ver el código de los módulos.

Page 10: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 10

Implementaciones alternativas de Python

• Existe implementaciones alternativas de Python:• IronPython (Python running on .NET)• Jython (Python running on the Java Virtual Machine)• PyPy (A fast python implementation with a JIT compiler)• Stackless Python (Branch of CPython with microthreads)• MicroPython (Python running on micro controllers)

Page 11: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 11

Implementaciones alternativas de Python

• Hay paquetes que incluyen librerías especializadas:• ActiveState ActivePython (scientific computing modules)• pythonxy (Scientific-oriented Python Distribution)• winpython (scientific Python distribution for Windows)• Conceptive Python SDK (business, desktop and database)• Enthought Canopy (for scientific computing)• PyIMSL Studio (for numerical analysis)• Anaconda (for data management, analysis and

visualization of large data sets)• eGenix PyRun (portable Python runtime)

• Versión cloud:• PythonAnywhere (run Python in the browser)

Page 12: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 12

Instalación del gestor de paquetes Anaconda

• Descargar anaconda para el SO y versión Python deseado.

• Dispone de varias utilidades que facilitan el trabajo. Por ejemplo, con Jupyter notebook se puede trabajar con Python de forma interactiva.

Page 13: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 13

Tutoriales

• La página de documentación de Python ofrece una serie de tutoriales según la versión.

• Una alternativa que ofrece una visión del lenguaje, algoritmos y estructuras de datos es la página del libro Introduction to Programming in Python de Sedgewick y Wayne.

Page 14: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 14

Tipos de datos

• Un tipo de dato es el conjunto de valores y el conjunto de operaciones definidas en esos valores.

Page 15: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 15

Definiciones

• Objetos. Todos los datos en un programa Python se representan por objetos. Cada objeto se caracteriza por su identidad, tipo y valor.

• Referencias a objetos.• Literales.• Operadores.• Identificadores.• Variables.• Expresiones.

Page 16: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 16

Palabras reservadas

• Las palabras reservadas no se pueden usar como identificadores.

Page 17: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 17

Strings

• Tipo de dato (str) para representar cadenas de caracteres, para uso en procesado de textos.

– Para convertir números en strings se aplica la función str()

– Para convertir strings a números se aplica int() o float()

Page 18: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 18

Integers - Enteros

• Tipo de dato (int) para representar enteros o números naturales.

– Se puede expresar enteros en hexadecimal con el prefijo 0x (o 0X); en octal con el prefijo 0o (o 0O); y en binario con prefijo 0b (o 0B). Ejemplo: 0x1abc, 0X1ABC, 0o1776, 0b11000011.

– A diferencia de otros lenguajes, los enteros en Python son de tamaño ilimitado.

Page 19: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 19

Floating-Point Numbers - Reales

• Tipo de dato (float) para representar números en punto flotantes, para uso en aplicaciones científicas o comerciales

– Para obtener el máximo valor entero usar sys.float_info.max

– Tienen una representación IEEE de 64 bits. Típicamente tienen 15-17 dígitos decimales de precisión

Page 20: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 20

Números complejos

• Tipo de dato (complex) para representar números complejos de la forma a + bj

>>> x = 1 + 2j # Assign var x to a complex number>>> x # Display x (1+2j)>>> x.real # Get the real part 1.0>>> x.imag # Get the imaginary part 2.0>>> type(x) # Get type <class 'complex'>>>> x * (3 + 4j) # Multiply two complex numbers(-5+10j)>>> z = complex(2, -3) # Assign a complex number

Page 21: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 21

Booleans

• Tipo de dato (bool) que tiene dos valores: True y False

Page 22: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 22

Operadores aritméticos

Operador Descripción Ejemplos+ Addition- Subtraction* Multiplication/ Float Division

(returns a float)1 / 2 ⇒ 0.5-1 / 2 ⇒ -0.5

// Integer Division(returns the floor integer)

1 // 2 ⇒ 0-1 // 2 ⇒ -18.9 // 2.5 ⇒ 3.0-8.9 // 2.5 ⇒ -4.0-8.9 // -2.5 ⇒ 3.0

** Exponentiation 2 ** 5 ⇒ 321.2 ** 3.4 ⇒ 1.858729691979481

% Modulus (Remainder) 9 % 2 ⇒ 1-9 % 2 ⇒ 19 % -2 ⇒ -1-9 % -2 ⇒ -19.9 % 2.1 ⇒ 1.5-9.9 % 2.1 ⇒ 0.6000000000000001

Page 23: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 23

Operadores de comparación

• Los operadores de comparación se aplican a enteros y flotantes y producen un resultado booleano

in, not in x in y comprueba si x está contenido en la secuencia yis, is not x is y es True si x y y hacen referencia al mismo objeto

Page 24: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 24

Operadores lógicos

• Se aplican a booleans. No hay exclusive-or (xor)

Operador Descripciónand Logical ANDor Logical ORnot Logical NOT

Page 25: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 25

Operadores de bits

• Permiten operaciones a nivel de bits

Operador Descripción Ejemplox=0b10000001y=0b10001111

& bitwise AND x & y ⇒ 0b10000001| bitwise OR x | y ⇒ 0b10001111~ bitwise NOT (or negate) ~x ⇒ -0b10000010^ bitwise XOR x ^ y ⇒ 0b00001110<< bitwise Left-Shift (padded with zeros) x << 2 ⇒ 0b1000000100>> bitwise Right-Shift (padded with zeros) x >> 2 ⇒ 0b100000

Page 26: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 26

Operadores de asignación

Operador Ejemplo Equivalente a= x = 5 x = 5+= x += 5 x = x + 5-= x -= 5 x = x - 5*= x *= 5 x = x * 5/= x /= 5 x = x / 5%= x %= 5 x = x % 5//= x //= 5 x = x // 5**= x **= 5 x = x ** 5&= x &= 5 x = x & 5|= x |= 5 x = x | 5^= x ^= 5 x = x ^ 5>>= x >>= 5 x = x >> 5<<= x <<= 5 x = x << 5

b, c, d = 123, 4.5, 'Hello' # asignación multiple

Page 27: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 27

Funciones embebidas

• Python contiene varias funciones embebidas para números:– Funciones matemáticas: round(), pow(), abs().– Funciones de conversion de tipos: int(), float(), str(), bool(); y type() para obtener el tipo.

– Funciones de conversión de cambio de base: hex(), bin(), oct().

Page 28: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 28

Cadenas de caracteres - string

• Las cadenas de caracteres pueden estar delimitadas por un par de single quotes ('...'), double quotes ("..."), triple single quotes ('''...'''), or triple double quotes ("""...""").

• Para poner un single quote (') dentro de una cadena single-quoted, se require el uso de escape sequence \'. De forma similar, un double quote (") dentro de una cadena, usar \". No es necesario un escape sequence para poner un single quote dentro de double-quoted string; o un double quote dentro de single-quoted string.

Page 29: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 29

Cadenas de caracteres - string

• Una cadena triple-single-quoted o triple-double-quoted puede ocupar varias líneas. Las cadenas triple-quoted son útiles para colocar comentarios multilínea, HTML y otros códigos.

• Python 3 usa el conjunto de caracteres Unicode.• Hay escape sequences para caracteres no

imprimibles, ejemplo: tab (\t), newline (\n), carriage return (\r).

• Los strings son immutables, es decir, su contenido no se puede modificar.

Page 30: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 30

Funciones y operadores para cadenas de caracteres

Función/Operador Descripción Ejemploss = 'Hello'

len() Length len(s) ⇒ 5in Contain? 'ell' in s ⇒ True

'he' in s ⇒ False+ Concatenation s + '!' ⇒ 'Hello!'* Repetition s * 2 ⇒ 'HelloHello'[i], [-i] Indexing to get a character.

The front index begins at 0; back index begins at -1 (=len()-1).

s[1] ⇒ 'e's[-4] ⇒ 'e'

[m:n], [m:], [:n], [m:n:step] Slicing to get a substring.From index m (included) to n (excluded) with an optional step size.The default m=0, n=-1, step=1.

s[1:3] ⇒ 'el's[1:-2] ⇒ 'el's[3:] ⇒ 'lo's[:-2] ⇒ 'Hel's[:] ⇒ 'Hello's[0:5:2] ⇒ 'Hlo'

Page 31: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 31

Funciones específicas para cadenas de caracteres

• La clase str proporciona varias funciones miembro. Suponiendo que s es un objeto str:– s.strip(), s.rstrip(), s.lstrip(): the strip() strips the leading

and trailing whitespaces. The rstrip() strips the right (trailing) whitespaces; while lstrip() strips the left (leading) whitespaces.

– s.upper(), s.lower(), s.isupper(), s.islower()– s.find(s), s.index(s)– s.startswith(s)– s.endswith(s)– s.split(delimiter-str), delimiter-str.join(list-of-strings)

Page 32: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 32

Conversión de tipos

• Explícita: uso de funciones int(), float(), str(), y round()

• Implícita: Python convierte automáticamente enteros y flotantes convenientemente.

Page 33: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 33

Listas

• Python dispone de una estructura de datos potente incorporada lista (list), que se usa para arrays dinámicos.

• Se especifica encerrada entre corchetes.• Puede contener elementos de diferentes tipos.• Puede crecer y encogerse dinámicamente.• Los elementos se acceden mediante índice,

empezando por cero.• Hay funciones intrínsecas y operadores.

Page 34: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 34

Operadores para listas

• Operador Descripción Ejemploslst = [8, 9, 6, 2]

in Contain? 9 in lst ⇒ True5 in lst ⇒ False

+ Concatenation lst + [5, 2]⇒ [8, 9, 6, 2, 5, 2]

* Repetition lst * 2⇒ [8, 9, 6, 2, 8, 9, 6, 2]

[i], [-i] Indexing to get an item.Front index begins at 0; back index begins at -1 (or len-1).

lst[1] ⇒ 9lst[-2] ⇒ 6lst[1] = 99 ⇒ modify an existing item

[m:n], [m:], [:n], [m:n:step] Slicing to get a sublist.From index m (included) to n (excluded) with an optional step size.The default m is 0, n is len-1.

lst[1:3] ⇒ [9, 6]lst[1:-2] ⇒ [9]lst[3:] ⇒ [2]lst[:-2] ⇒ [8, 9]lst[:] ⇒ [8, 9, 6, 2]lst[0:4:2] ⇒ [8, 6]newlst = lst[:] ⇒ copy the listlst[4:] = [1, 2] ⇒ modify a sub-list

del Delete one or more items(for mutable sequences only)

del lst[1] ⇒ lst is [8, 6, 2]del lst[1:] ⇒ lst is [8]del lst[:] ⇒ lst is [] (clear all items)

Page 35: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 35

Funciones para listas

• Suponiendo que lst es un objeto list:– lst.append(item): append the given item behind the lst and return None; same as lst[len(lst):] = [item].– lst.extend(lst2): append the given list lst2 behind the lst and return None; same as lst[len(lst):] = lst2.– lst.insert(index, item): insert the given item before the index and return None. Hence, lst.insert(0, item) inserts before the first item of the

lst; lst.insert(len(lst), item) inserts at the end of the lst which is the same as lst.append(item).– lst.index(item): return the index of the first occurrence of item; or error.– lst.remove(item): remove the first occurrence of item from the lst and return None; or error.– lst.pop(): remove and return the last item of the lst.– lst.pop(index): remove and return the indexed item of the lst.– lst.clear(): remove all the items from the lst and return None; same as del lst[:].– lst.count(item): return the occurrences of item.– lst.reverse(): reverse the lst in place and return None.– lst.sort(): sort the lst in place and return None.– lst.copy(): return a copy of lst; same as lst[:].

Función Descripción Ejemploslst = [8, 9, 6, 2]

len() Length len(lst) ⇒ 4max(), min() Maximum and minimum value (for list of

numbers only)max(lst) ⇒ 9min(lst) ⇒ 2

sum() Sum (for list of numbers only) sum(lst) ⇒ 16

Page 36: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 36

Tuplas

• Es similar a las listas excepto que es inmutable (como los string).

• Consiste en una serie de elementos separados por comas, encerrados entre paréntesis.

• Se puede convertir a listas mediante list(tupla).

Page 37: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 37

Diccionarios

• Soportan pares llave-valor (también llamados name-value pairs, associative array, o mappings).

• Un diccionario se especifica encerrando entre llaves. La llave y el valor se separa por : con el formato {k1:v1, k2:v2, ...}

• A diferencia de las listas y tuplas que usan un índice entero para acceder a los elementos, los diccionarios se pueden indexar la llave.

Page 38: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 38

Funciones para diccionarios

• Las más comunes son, suponiendo dct es un objeto dict:– dct.has_key()– dct.items(), dct.keys(), dct.values()– dct.clear()– dct.copy()– dct.get()– dct.update(dct2): merge the given dictionary dct2 into dct.

Override the value if key exists, else, add new key-value.– dct.pop()

Page 39: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 39

Conjuntos - set

• Es una colección de objetos sin ordenar no duplicados.

• Un set se especifica encerrando los elementos entre entre llaves.

• Se puede pensar que un set es un dict de llaves sin valor asociado.

• Python tiene operadores set: & (intersection), | (union), - (difference) and ^ (exclusive-or).

Page 40: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 40

Funciones y APIs

• Tipos de funciones: incorporado (int(), float(), str()),standard o librería (math.sqrt()) requiere importar el módulo donde se encuentra.

• API: application programming interface

Page 41: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 41

Condicionales – if - else

• Cuando se requiere diferentes acciones para diferentes entradas

Page 42: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 42

Condicionales – if -elif

• Cuando se tienen if anidados if - elif

Page 43: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 43

Ciclos – while

• Instrucción que permite cálculos repetitivos.

import stdioimport sys# Accept positive integer n as a command-line argument. Write to# standard output a table showing the first n powers of two.n = int(sys.argv[1])power = 1i = 0while i <= n:

# Write the ith power of 2.stdio.writeln(str(i) + ' ' + str(power)) power = 2 * poweri = i + 1

# python powersoftwo.py 1 # 0 1# 1 2

while condition:indentedBlock

Page 44: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 44

Función range

• La función range representa una secuencia de enteros. Tiene 3 argumentos:– Inicio del rango. Se asume 0 si no se especifica.– Final del rango, pero no incluído. Requerido.– Paso del rango. Se asume 1 si no se especifica.

for num in range(1,5):print(num)

1 2 3 4

Page 45: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 45

Ciclos - for

• Es común tener ciclos con el mismo esquema: inicializar una variable índice en un valor, usar un ciclo while para comprobar una condición de salida sobre la variable índice que se modifica dentro del ciclo. La instrucción for es una forma simplificada.

# potencias de dos entre 1 y n leido en la linea de comandosimport stdioimport sys

n = int(sys.argv[1])power = 1for i in range(n+1):

stdio.writeln(str(i) + ' ' + str(power))

power *= 2

Page 46: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 46

Instrucción break

• break termina el ciclo y sigue en la instrucción que sigue al ciclo.

Page 47: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 47

Instrucción continue

• continue se usa para saltar el resto del código del ciclo y continuar con la siguiente iteración.

Page 48: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 48

Ciclos

Page 49: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 49

Arrays

• Es una estructura de datos que almacena una secuencia de objetos, normalmente del mismo tipo.

• El acceso a los elementos del array se basa en índices. En un array bidimensional se realiza con un par de índices.

• Las formas de procesar arrays en Python son:– Tipo de dato implícito Python.– Uso del módulo Python numpy.– Uso del módulo stdarray.

Page 50: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 50

Arrays - ejemplo

x = [0.30, 0.60, 0.10]y = [0.50, 0.10, 0.40]total = 0.0for i in range(len(x)):

total += x[i]*y[i]

Page 51: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 51

Arrays - stdarray

# suma de matricesc = stdarray.create2D(n, n, 0.0) for i in range(n):

for j in range(n):c[i][j] = a[i][j] + b[i][j]

Page 52: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 52

Entrada - Salida

• Python dispone de funciones intrínsecas para lectura y escritura. Las más usadas para la entrada estándar son: input() y print()

• Desde la línea de comando se usa sys.argv.• El módulo stdio contiene varias funciones para

lectura y escritura.• El módulo stddraw permite crear y escribir dibujos.• El módulo stdaudio permite crear y reproducir

sonidos.

Page 53: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 53

Standard Output

• El API de la parte del módulo stdio.py relativa a la salida estándar:

Page 54: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 54

Escritura con formato

• Con stdio.writef() se puede escribir con formato:

Page 55: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 55

Standard Input

• El API de la parte del módulo stdio.py relativa a la entrada estándar:

Page 56: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 56

Standard Input

• Módulo stdio.py relativa a la entrada estándar:

Page 57: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 57

Redirection

• Redirecting standard output to a file

• Redirecting standard input from a file

Page 58: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 58

Piping

• Connecting two programs

> python randomseq.py 1000 > data.txt> python average.py < data.txt

• Filters> python randomseq.py 9 | sort> python randomseq.py 1000 | more

Page 59: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 59

Standard Drawing

• El módulo stddraw.py permite dibujar.

# triangle.pyimport stddrawimport math# Dibuja un triangulo y un punto en el medio.t = math.sqrt(3.0) / 2.0stddraw.line(0.0, 0.0, 1.0, 0.0)stddraw.line(1.0, 0.0, 0.5, t)stddraw.line(0.5, t, 0.0, 0.0)stddraw.point(0.5, t/3.0)stddraw.show()

Page 60: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 60

Standard Drawing – control commands

• Permite ajustar diferentes parámetros del dibujo.

Page 61: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 61

Outline and filled shapes

• Permite dibujar otras formas.

Page 62: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 62

Text and color

• Permite dibujar texto y ajustar el color del lápiz.

– Los colores disponibles son BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, y YELLOW, definidos como constants en stddraw

Page 63: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 63

Ejemplos stddraw

Page 64: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 64

Animation

• stddraw.py dispone de funciones para conseguir efectos de animación.

Page 65: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 65

Standard Audio

• El módulo stdaudio.py permite reproducir, manipular y sintetizar sonido.

Page 66: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 66

Funciones - terminología

Page 67: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 67

Funciones – control de flujo

• import • def • return

Page 68: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 68

Funciones – alcance

• Las variables son locales en el bloque donde se definen

Page 69: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 69

Funciones – código típico

Page 70: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 70

Funciones - Paso de argumentos

• Los argumentos de tipo integer, float, boolean, o string por valor. El resto de objetos se pasan por referencia.

Page 71: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 71

Funciones – código típico con arrays

Page 72: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 72

Funciones - recursión

• Técnica de programación utilizada en muchas aplicaciones. Capacidad de invocar una función desde la misma función.

import sysimport stdio# Return n!def factorial(n):

if n == 1:return 1

return n * factorial(n-1)def main():

n = int(sys.argv[1])fact = factorial(n)stdio.writeln(fact)

if __name__ == '__main__':main()

# python factorial.py 3# 6

Page 73: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 73

Módulos

• Un módulo contiene funciones que están disponibles para su uso en otros programas.

• Un cliente es un programa que hace uso de una función en un módulo.

• Pasos:– En el cliente: import el módulo.– En el cliente: hacer llamada a la función.– En el módulo: colocar una prueba de cliente main().– En el módulo: eliminar código global. Usar

if __name__ == '__main__': main()– Hacer accesible el módulo para el cliente.

Page 74: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 74

Módulos

Page 75: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 75

Programación modular

• Implementaciones.• Clientes.• Application programming interfaces (APIs).

• Funciones privadas: – Funciones que solo se usan en los módulos y que no se

ofrecen a los clientes. Por convención se usa un guión bajo como primer caracter del nombre de la función.

Page 76: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 76

Programación modular

• Librerías: – Colección de módulos relacionados. Ejemplo: NumPy,

Pygame, Matplolib, SciPy, SymPy, Ipython.• Documentación. >>> import stddraw>>> help stddraw

Page 77: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 77

Números random

• Módulo stdrandom.py

Page 78: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 78

Procesado de arrays

• Módulo stdarray.py

Page 79: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 79

Estadística

• Módulo stdstats.py

Page 80: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 80

Beneficios de la programación modular

• Programas de tamaño razonable.• Depuración.• Reusabilidad de código.• Mantenimiento.

Page 81: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 81

Programación orientada a objetos -Métodos

• Un método es una función asociada a un objeto específico.

• Se invoca utilizando el nombre del objeto seguido del operador punto (.) seguido por el nombre del método y los argumentos del mismo.

Page 82: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 82

Programación orientada a objetos –Métodos de la clase str

Page 83: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 83

Tipo de dato definido por el usuario

• Se define un tipo Charge para partículas cargadas.• Se usa la ley de Coulomb para el cálculo del

potencial de un punto debido a una carga V=kq/r , donde q es el valor de la carga, r es la distancia del punto a la carga y k=8.99 × 109 N m2/C2.Constructor

Page 84: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 84

Convenciones sobre ficheros

• El código que define el tipo de dato definido por el usuario Charge se coloca en un fichero del mismo nombre (sin mayúscula) charge.py

• Un programa cliente que usa el tipo de dato Charge se pone en el cabecero del programa:

from charge import Charge

Page 85: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 85

Creación de objetos, llamada de métodos y representación de String

#-----------------# chargeclient.py#-----------------import sysimport stdiofrom charge import Charge# Acepta floats x e y como argumentso en la línea de comandos. Crea dos objetos # Charge con posición y carga. Imprime el potencial en (x, y) en la salida estandardx = float(sys.argv[1])y = float(sys.argv[2])c1 = Charge(.51, .63, 21.3)c2 = Charge(.13, .94, 81.9)v1 = c1.potentialAt(x, y)v2 = c2.potentialAt(x, y)stdio.writef('potential at (%.2f, %.2f) due to\n', x, y)stdio.writeln(' ' + str(c1) + ' and')stdio.writeln(' ' + str(c2))stdio.writef('is %.2e\n', v1+v2)#-----------------------------------------------------------------------# python chargeclient.py .2 .5# potential at (0.20, 0.50) due to# 21.3 at (0.51, 0.63) and# 81.9 at (0.13, 0.94)# is 2.22e+12from charge import Charge

Page 86: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 86

Elementos básicos de un tipo de dato

• API

• Clase. Fichero charge.py. Palabra reservada class• Constructor. Método especial __init__(), self• Variable de instancia. _nombrevar• Métodos. Variable de instancia self • Funciones intrínsecas. __str()__• Privacidad

Page 87: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 87

Implementación de Charge

• En charge.py

Page 88: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 88

Clases Stopwatch, Histogram, Turtle

• En stopwatch.py

• En histogram.py

• En turtle.py

Page 89: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 89

Clase Complex

• Métodos especiales. En Python la expresión a + b se reemplaza con la llamada del método a.__mul__(b)

Page 90: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 90

Métodos especiales

Page 91: Programación en Java - personales.unican.espersonales.unican.es/corcuerp/python/Slides/IntroPython.pdf · Python 2 Objetivos • Revisión de la programación en Python • Funciones

Python 91

Funciones como objetos

• En Python cada elemento es un objeto, incluyendo funciones.

def square(x):return x*x

# Calcula la integral de Riemann de una function fdef integrate(f, a, b, n=1000):

total = 0.0dt = 1.0 * (b - a) / nfor i in range(n):

total += dt * f(a + (i + 0.5) * dt)return total