Download 01c-intro Python - Instituto Tecnológico de Costa Rica

Document related concepts
no text concepts found
Transcript
Introducción a Python (3.x)
Introducción a la programación
I semestre, 2016
1
Lenguaje de Programación Python
Python: lenguaje de alto nivel
→ Muy utilizado para aprender a
programar.
Breve Historia:
●
●
1990. En Holanda, Guido van
Rossum crea un lenguaje de
programación.
2001. Se crea la Python Software
Foundation (PSF) para promover la
protección de la libertad y su avance
como lenguaje de programación.
CC BY-SA Doc Searls @Wikipedia
Características
Existen muchas implementaciones (Cpython, Jython, PyPy)
Es Multiplataforma: *NIX, MacOs, Symbian (Nokia), Pocket PC, iPod, Palm, Windows,
Android...
Multiparadigma: Orientado a Objetos, Imperativo, Funcional.
●
En Python todo es un objeto (orientación a objetos)
Este concepto se trabajará más adelante en el curso,
Pero es importante ser consciente que todas las representaciones de elementos
usadas en el lenguaje son objetos.
Características
Muchas bibliotecas disponibles para ser usadas.
●
Programación con interfaces gráficas, aplicaciones cliente-servidor, visores de html,
bases de datos...
●
Es mayor la cantidad de recursos reutilizables en la versión 2 que en la 3.
Es un lenguaje de scripting de manera natural (transferencia de datos entre aplicaciones
y el sistema operativo)
Muchos ambientes de programación y ejecución
●
IDLE ( Integrated DeveLopment Environment), …
●
Geany ( Editor genérico )
●
Para interfaces gráficas: PyGame, Tkinter, Qt, ...
●
Interprete de comandos (consola).
Ejecución de Expresiones
Se pueden ejecutar en el shell, donde si están correctas devuelven un valor o
resultado de lo contrario un mensaje de error.
●
Terminal: $python3
●
Idle: $idle3
Error de Sintaxis
●
expresión mal formada
●
Identación inesperada
Error Semántico
no está definida
la división por cero
Identificadores
Identificadores: usados para variable o nombres de función
●
Puede tener tantos caracteres como desee mientras sean letras, números o “guión
bajo” [ _ ]
●
Su “nombre”/valor no puede iniciar con un número
●
Es “Case sensitive” (sensible a mayúsculas y minúsculas)
●
Aguacate
●
aguAcate
●
AGUACATE
→ Buena Práctica: usar identificadores significativos.
●
Facilita la legibilidad y mantenimiento del software escrito.
Identificadores
Palabras reservadas (Keywords)
●
No pueden ser utilizadas como identificadores ordinarios
Variables
Representaciones simbólicas de los datos del programa
¿Cómo funcionan las variables en términos de implementación y semánticamente?
Sintaxis de la asignación de valores:
variable = expresión
Cada variable tiene asociado un “tipo de dato”
(En Python son dinámicas)
Tipos de Datos
●
Numéricos
●
Secuencias
–
Enteros (int)
●
Conjuntos
–
Boolean (bool)
●
Diccionarios
●
●
●
Enteros
True = 1 y False = 0
Reales (float)
Complejos (complex)
Tipos de Datos
●
Numéricos
●
Secuencias
●
Conjuntos
●
Diccionarios
Conjuntos de datos indexados,
comienzan en cero y van hasta n-1,
donde n es el largo de la secuencia.
●
Mutables:
●
●
Listas (list), Arreglos (array),
Arreglos de Bytes (bytearray)
Inmutables: (no se modifican)
●
String (str), tupla (tuple), Bytes
(bytes)
Tipos de Datos
●
Numéricos
●
Secuencias
●
Conjuntos
Representan conjuntos finitos de objetos,
únicos y sin orden.
●
●
Diccionarios
●
Mutables (set)
Inmutables: Frozen sets
(frozenset)
Tipos de Datos
●
Nativos:
●
Numéricos
●
Secuencias
●
Conjuntos
●
Diccionarios
●
Una manera de manejar estructuras de
datos índice-valor (key-value).
Expresiones y Operadores Aritméticos
Pueden contener variables, literales, constantes y operadores. Se puede evaluar y
retornar algún resultado. Las aritméticas son un subtipo en las cuales solo se opera
con números.
Operadores Aritméticos
Operación
Descripción
Ejemplo
a + b
Suma
4+6
a – b
Resta
10 - 3
a * b
Producto
3.64 * 6
a / b División
240 / 10 / 2
a // b
División entera
3 // 2 # =1
a % b
Residuo de división entera
7%3=1
­a
a negativo
-7
+a
a positivo
+10
a ** b
Potencia
2 ** 4 = 16
División Entera (con negativos)
Python: a // b = c (con a o b negativo)
En los casos que c no sea un número entero entonces Python redondeará el
resultado al número entero menor más próximo a c.
●
En la matemática: -3 / 2 = -1,5, en python: -3 // 2 = -2
El resultado de la división entera según Python es -2 pues es el número (entero)
menor más cercano al resultado. (Ver punto rojo)
●
En la matemática: 7 / 3 = 2,333..., en python: 7 // 3 = 2 (ver punto naranja)
●
En la matemática: 7 / -3 = -2,333..., en python: 7 // -3 = -3 (ver punto verde)
mayores…
5
4
3
2
1
0
-1
-2
-3
-4
… menores
Precedencia
Las operaciones de mayor precedencia se evalúan primero.
Si uno hay algún operador de mayor precedencia se evalúan de izquierda a derecha.
El paréntesis funciona para establecer precedencia forzada
Ejercicio: (resuelva)
●
>>> 1 – 2 + 3
●
>>> 2 + 4 * 3
●
>>> (2 + 4 ) * 3
●
>>> 5 + 10 * 0 + 10 + 12 * 0 + 7
Expresiones entre Paréntesis
** (potencia)
-x + x (negativo, positivo)
* / // % (multiplicación, división, residuo)
En la figura de la derecha,
precedencia de arriba a Abajo.
+ - (suma, resta)
Conversión Explicita de Tipos
●
●
Normalmente el tipo de las expresiones aritméticas está dado por los tipos de sus
operadores.
Para obtener un resultado en un tipo particular se pueden utilizar constructores
(P.O.O.): int(), float(), complex()
4 / 3 da como resultado un
número real: 1.33333
Si yo lo quiero como un entero es
necesario hacer una conversión
explícita de tipo.
Conversión Explicita de Tipos
Otras consideraciones:
●
Truncamiento:
●
Números flotantes:
●
Not a number = 'nan'
●
Infinity = 'inf'
Expresiones Lógicas
●
Operadores para formas expresiones de lógica booleana
Operación
a or b
Si a es falso, retorna b, sino retorna a
a and b
Si a es falso, retorna a, sino retorna b
not a
●
Descripción
Si a es falso, retorna True, sino retorna False
Valores Falsos:
●
None (NoneType)
●
False (bool)
●
Cero de tipos numéricos (int, float, …)
●
Secuencias vacías: ' ', (), [] (str, tuple, list)
Tablas de Verdad (Lógica Booleana)
A
B
A AND B
A OR B
NOT A
True
True
True
True
False
True
False
False
True
False
False
True
False
True
True
False
False
False
False
True
Expresiones con Operadores Relacionales
●
Permiten realizar comparaciones entre expresiones. Operaciones tienen la misma
prioridad.
Operación
Descripción
Ejemplo
< y <=
Menor que y Menor o igual que
>>> 4 < 10
>>> True
> y >=
Mayor que y Mayor o igual que
>>> 7 <= 7
>>> True
==
Igual que
>>> 13.0 == 13
>>> True
>>> 7 == '7'
>>> ???
!=
Diferente de
>>> 'jaime' != 'Jaime'
>>> True
is – is not
Identidad de objeto y su negación
(son el mismo objeto?)
>>> x = 'j' | >>> y = 'J'
>>> x is y
>>> False
in – not in
Pertenencia y su negación.
>>> x = jaime'
>>> 'a' in x
>>>True
Asignación con Operador
Operaciones aritméticas simples (binarias: dos operados) combinadas con una
asignación de una variables.
Variable operadorBinario= valor
variable += valor
Variable ­=valor
●
Estas dos asignaciones son equivalentes (funcionalmente):
x = x + 1
X += 1
¿Cuál es la diferencia?
¿Cuál será más recomendable?
Elementos predefinidos: Funciones
Código que realiza una tarea de acuerdo a los argumentos brindados. (da una salida a
partir de ciertas entradas)
Disponibles: http://docs.python.org/3/library/functions.html
file:///usr/share/doc/python3-doc/html/library/functions.html (python3-doc **)
Elementos predefinidos: Funciones
Sintáxis
>>> nombre_función (arg0, arg1, …, argN )
Respuesta
Donde:
●
Nombre_función: corresponde con un identificador válido
●
Respuesta es la salida que se espera para la función.
Función (método)
Retorna
Ejemplo
abs(arg0)
Valor absoluto de arg0
>>>abs(-8)
8
divmod( a, b)
El par ( a // b, a % b)
>>> divmod(7,3)
(2, 1)
pow( a, b )
a elevado a la potencia b
>>> pow(2, 3)
8
round(a, [, n])
A redondeado n digitos decimales, si n
se omite se asume como cero. Aplica
para float o int.
>>> round(14.499,1)
14,5
Elementos predefinidos: Métodos
Con estos se definen tareas específicas, relacionadas con el concepto de clase
(Orientación a Objetos). Métodos son “funciones específicas de algunas clases”.
●
Deben importarse las clases para usar los métodos.
●
Clase Math: http://docs.python.org/3/library/math.html
file:///usr/share/doc/python3-doc/html/library/math.html (python3-doc **)
Elementos predefinidos: Métodos
Sintáxis
>>> clase.metodo (arg0, arg1, …, argN )
Respuesta
Donde:
●
Clase y método: corresponden con identificadores válidos
●
Respuesta es la salida que se espera para el método.
Método
Retorna
Ejemplo (import math)
math.floor(arg0)
El menor entero >= arg0
>>>math.floor(14.3)
14
math.ceil(arg0)
El mayor entero, <= arg0
>>>math.ceil(14.33)
15
math.sqrt(arg0)
Raíz cuadrada de arg0
>>>math.sqrt(2)
1.4142135623730951
math.log(a, [, base])
Logaritmo de a en la base
dada. Si no hay base se
asume logaritmo natural.
>>> math.log(7,39)
0.5311525605447533
Importación de Librerías
Librería: conjunto de códigos con funciones y datos, que pueden ser utilizados en
programas independientes. Se deben importar para ser utilizadas.
5 ejemplos para: obtener 1.4142... el resultado de √2 (raíz cuadrada de 2):
>>> modulo_mate = __import__('math')
>>> modulo_mate.sqrt(2)
>>> from math import sqrt
>>> import math
>>> sqrt(2)
>>> math.sqrt(2)
>>> from math import *
>>> import math as m
>>> sqrt(2)
>>> m.sqrt(2)
>>> from math import sqrt as raiz
>>> raiz(2)
>>> 1.4142135623730951
Ayuda
>>> help()
Welcome to Python 3.2!
This is the online help utility.
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.2/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.
To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, or topics, type "modules",
"keywords", or "topics".
Each module also comes with a one-line summary
of what it does; to list the modules whose summaries contain a given word
such as "spam", type "modules spam".
Zen de Python
>>> import this
→ El zen de python:
1. Bello es mejor que feo.
2. Explícito es mejor que implícito.
3. Simple es mejor que complejo.
4. Complejo es mejor que complicado.
Otros huevos de pascua...
$ apt-get moo
5. Plano es mejor que anidado.
6. Ralo es mejor que denso.
7. La legibilidad cuenta.
8. Los casos especiales no son tan especiales como para quebrantar las reglas.
Aunque lo práctico gana a la pureza.
(__)
(oo)
/------\/
/|
||
* /\---/\
~~ ~~
...."Have you mooed today?"...
9. Los errores nunca deberían dejarse pasar silenciosamente. A menos que
hayan sido silenciados explícitamente.
10. Frente a la ambigüedad, rechaza la tentación de adivinar.
11. Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
Aunque esa manera puede no ser obvia al principio a menos que usted sea
Holandés.
12. Ahora es mejor que nunca. Aunque nunca es a veces mejor que ya.
13. Si la implementación es difícil de explicar, es una mala idea.
14. Si la implementación es fácil de explicar, puede que sea una buena idea.
15. Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más
de esas cosas!
Referencias y Lecturas Complementarias
●
●
●
●
●
Material suministrado por el profesor Jeff Schmidt, Instituto Tecnológico de Costa
Rica. I semestre 2011.
Identificadores y palabras reservadas:
http://docs.python.org/release/3.1.3/reference/lexical_analysis.html#identifiers
Objetos, valores y tipos:
http://docs.python.org/release/3.1.3/reference/datamodel.html#objects-values-andtypes
Precedencia de operadores:
http://docs.python.org/release/3.1.3/reference/expressions.html#summary
En general: http://docs.python.org/3/
http://creativecommons.org/licenses/by-sa/3.0/cr/
*La licencia de la presentación no cubre las imágenes utilizadas*