introducción a python...

60
1 Introducción a Python (3.x) Introducción a la programación I semestre, 2016

Upload: others

Post on 29-Jan-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

1

Introducción a Python (3.x)

Introducción a la programación

I semestre, 2016

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

● Conjuntos

● Diccionarios

● Enteros

– Enteros (int)

– Boolean (bool)

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

● Diccionarios

Representan conjuntos finitos de objetos, únicos y sin orden.

● 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)

+ - (suma, resta)En la figura de la derecha, precedencia de arriba a Abajo.

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 Descripció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 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étodosSintá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)

>>> import math

>>> math.sqrt(2)

>>> import math as m

>>> m.sqrt(2)

>>> from math import sqrt as raiz

>>> raiz(2)

>>> from math import sqrt

>>> sqrt(2)

>>> from math import *

>>> sqrt(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:

Otros huevos de pascua...

$ apt-get moo

(__)

(oo)

/------\/

/ | ||

* /\---/\

~~ ~~

...."Have you mooed today?"...

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.

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.

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-and-types

● Precedencia de operadores: http://docs.python.org/release/3.1.3/reference/expressions.html#summary

● En general: http://docs.python.org/3/

31

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una

Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica.

http://creativecommons.org/licenses/by-sa/3.0/cr/http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*

1

Introducción a Python (3.x)

Introducción a la programación

I semestre, 2016

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.

Python: está escrito en CJython: está escrito en JavaPypy: está escrito en Python

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).

Sitio web del ninja-ide: http://ninja-ide.org/

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

Python entendido como un programa de software que ejecuta expresiones válidas para ese mismo lenguaje de programación

Shell:$python3#idle3

También se pueden ejecutar directamente invocando el programa python3 con un archivo de python como parámetro.

$python3 archivo.py

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.

Hacer mucho énfasis. (por ejemplo en el ejercicio del cálculo del área del círculo, tenemos estos identificadores:* radio es una variable

* pi es una contante * area_circulo es una función.

Ejemplos:

>>> aguacate = "viva la liga">>> aguacate'viva la liga'>>> aGuacate= "viva el carmen">>> aGuacate'viva el carmen'>>> aguacate == aGuacateFalse>>> aguacate == aguacateTrue

Identificadores significativos:* en el ejercicio del círculo: → si en vez de “radio” decíamos “a”, funciona pero

luego no se entiende. (recordar matemática del colegio y las variables)

Extra: Funciones:#Calcular area de un circulo# A = Pi * r **2def area_circulo(radio): area = 3.141516 * radio ** 2 return area

Identificadores

Palabras reservadas (Keywords)

● No pueden ser utilizadas como identificadores ordinarios

Las iremos conociendo poco a poco.

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)

Reforzar la diferencia entre datos e instrucciones/código

Implementación: una variable es un espacio de memoria, que se utiliza para almacenar un valor

Semánticamente: el valor se va cambiando y se borra el valor anterior.

>>> nombre = “Jaime Gutiérrez”>>> type(nombre)<type 'str'>

>>> numeros = [2, 4, 6, 8, 10]>>> numeros[2, 4, 6, 8, 10]

En cualquiera de estos ejemplos, el identificador queda definido dentro del ambiente de ejecución y puede ser utilizado en una expresión o en una función.

Tipos de Datos

● Numéricos

● Secuencias

● Conjuntos

● Diccionarios

● Enteros

– Enteros (int)

– Boolean (bool)

True = 1 y False = 0● Reales (float)

● Complejos (complex)

Los números enteros funcionan para representar los números naturales y los enteros.

Los flotantes para los reales

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

● Diccionarios

Representan conjuntos finitos de objetos, únicos y sin orden.

● 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

El punto rojo corresponde con el valor -1.5 y se puede ver que los dos enteros más cercanos son -1 o -2, siendo el menor -2.

El punto naranja corresponde con el valor 2.33 y se puede ver que los dos enteros más cercanos son 3 y 2, siendo el menor 2.

El punto verde corresponde con el valor -2.33 y se puede ver que los dos enteros más cercanos son -2 o -3, siendo el menor -3.

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)

+ - (suma, resta)En la figura de la derecha, precedencia de arriba a Abajo.

>>> 1 – 2 + 3-1 + 32→ tienen la misma precedencia, se evalúan de izquierda a derecha.

>>> 2 + 4 * 32 + 1214→ la precedencia la tiene el operador de multiplicación *, sobre la suma y resta.

>>> (2 + 4 ) * 36 * 318→ el paréntesis obliga a evaluar distinto.

● >>> >>> 5 + 10 * 0 + 10 + 12 * 0 + 7● 5 + 0 + 10 + 0 + 7

● → 22.

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'

Los operadores: num1 y num2 son de tipo float (ojo con los decimales)

Pero si yo quiero el resultado “truncado” lo puedo pasar a int con la conversión explícita de tipos (casting), también se le llama promoción de tipos.

Expresiones Lógicas

● Operadores para formas expresiones de lógica booleana

Operación Descripció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 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

Estas operaciones retornan uno de los operandos.

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?

La diferencia es sintáctica, pues semánticamente hacen lo mismo.

Se recomienda mejor utilizar la forma explícita porque es más legible.

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 **)

Los dos elementos predefinidos principales son: funciones y métodos...

Sugerencia instalar el paquete: python3-doc para tener la documentación de python en la computadora

En la siguiente diapo: abs, divmod, pow, round... .help

Mostrar detalles de sintaxis:* argumentos opcionales (denotados con [])* argumentos obligatorios

Revisar acá (detenerme en la sitáxis): * print

>>> print("hola")hola>>> print("hola","mundo")hola mundo>>> print("hola","mundo", sep="*")hola*mundo>>> print("hola","mundo", sep="*", end="\t")hola*mundo >>>

* input

>>> entrada = input("¿cual equipo es el mejor?")¿cual equipo es el mejor?liga liga>>> entrada'liga liga'>>> entrada = input("¿cual equipo es el mejor?\n")¿cual equipo es el mejor?liga liga>>> entrada'liga liga'

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

Funciones: el concepto de función en los lenguajes de programación se asocia con código que realiza una tarea específica de acuerdo a los argumentos que se le brinden

Buscar funciones en el ejemplo anterior.

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 **)

Métodos: sirven para definir tareas específicas, están relacionados con el concepto de clase y que se desarrollan en detalle en el Capítulo 8, "Programación orientada a objetos".

Los constructores que vimos antes para convertir un número a entero, son ejemplos de funciones.

Importar: cuando los programas están ejecutándose, cargan en memoria “el código” corespondiente para saber interpretar los comandos que ponemos. A veces se usa un diseño modular y no se carga todo para ahorrar memoria, cuando importamos un módulo es para tener en memoria el código que “sabe” interpretar nuevos comandos.

(Este enfoque denota Eficiencia ¿en tiempo o en recursos? R/ en ambos, recursos porque se ocupa menos memoria y tiempo porque hay que buscar cosas en menos espacio de memoria, o sea es mś rápido).

Metáfora: ponga las cosas sobre un pupitre, tenga sus apuntes en la mochilla. Si ocupa algo sáquelo de la mochila y póngalo en el pupitre.

Elementos predefinidos: MétodosSintá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

>>> math.sqrt(-7)

Traceback (most recent call last): File "<stdin>", line 1, in <module>ValueError: math domain error

Solución: (dado la función está definida para enteros)

>>> math.log(2,10)0.30102999566398114

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)

>>> import math

>>> math.sqrt(2)

>>> import math as m

>>> m.sqrt(2)

>>> from math import sqrt as raiz

>>> raiz(2)

>>> from math import sqrt

>>> sqrt(2)

>>> from math import *

>>> sqrt(2)

>>> 1.4142135623730951

Esta forma:

>>> modulo_mate = __import__('math')

>>> modulo_mate.sqrt(2)

Va a ser útil para las pruebas unitarias, si por ejemplo el nombre del archivo es el número de carné.

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".

>>> help(abs)

>>>

Zen de Python

>>> import this

→ El zen de python:

Otros huevos de pascua...

$ apt-get moo

(__)

(oo)

/------\/

/ | ||

* /\---/\

~~ ~~

...."Have you mooed today?"...

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.

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.

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!

james@jupiter:~$ apt-get moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ...."Have you mooed today?"...

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-and-types

● Precedencia de operadores: http://docs.python.org/release/3.1.3/reference/expressions.html#summary

● En general: http://docs.python.org/3/

31

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una

Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica.

http://creativecommons.org/licenses/by-sa/3.0/cr/http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*