Sei sulla pagina 1di 45

SEMINARIO DE PYTHON 1

Autómatas y Lenguajes Formales

Última actualización: 10 de septiembre de 2018

Eduardo Martínez Graciá, Mercedes Valdés Vela,


Santiago Paredes Moreno, José Manuel Juárez Herrero
Dpto. de Ingeniería de la Información y las Comunicaciones
Facultad de Informática de la Universidad de Murcia
Indice Introducción Fundamentos de Python Bibliografía

INDICE

1. Introducción

2. Fundamentos de Python

3. Bibliografía

2
INTRODUCCIÓN
Indice Introducción Fundamentos de Python Bibliografía

CREADOR DE PYTHON

Lenguaje creado por Guido Van Rossum en los años 80 para cubrir
un ámbito entre el shell del sistema operativo y el lenguaje C.

4
Indice Introducción Fundamentos de Python Bibliografía

NOMBRE INSPIRADO EN LOS MONTY PYTHON

El nombre del lenguaje es un homenaje a los cómicos ingleses


Monty Python. Otros lenguajes se llaman Pascal, Eiffel, Ada...

5
Indice Introducción Fundamentos de Python Bibliografía

CARACTERÍSTICAS PRINCIPALES

▶ Combina un compilador y un intérprete, como Java.


▶ Ficheros fuente con extensión .py, compilados con .pyc.
▶ Se puede usar de forma interactiva desde un terminal.
▶ Es orientado a objetos.
▶ Es dinámicamente tipado.
▶ Maneja automáticamente la memoria.
▶ Librería estándar muy potente, y cientos de miles de
paquetes disponibles.

En los apuntes puedes encontrar cómo instalarlo e integrarlo con


el entorno de desarrollo Eclipse.

6
FUNDAMENTOS DE PYTHON
Indice Introducción Fundamentos de Python Bibliografía

¡HOLA MUNDO!

Primer ejemplo
Crea un módulo hello.py que imprima ¡Hola Mundo!

1 '''
2 Created on 5 ago. 2018
3

4 @author : jmjuarez
5 '''
6

7 if __ name __ == '__ main __':


8 print (' ¡Hola Mundo !')

¡Atención a la indentación!

8
Indice Introducción Fundamentos de Python Bibliografía

ENTEROS

Existen dos tipos de enteros: int y long. Los primeros tienen una
precisión de 32 bits (si el sistema es de 32 bits) o 64 bits (si es de
64). Los segundos, tienen precisión ilimitada.
1 print (987987987987987987987987987987987+1)

Puedes especificar un signo al comienzo del entero. También la


base: 0b para binaria, 0o para octal y 0x para hexadecimal.
1 print (+34908234)
2 print (0b101)
3 print (0o101)
4 print (0x101)

9
Indice Introducción Fundamentos de Python Bibliografía

REALES

Puedes usar valores reales (flotantes) usando la notación clásica


(parte entera, separador . y parte decimal), o bien la notación
científica con el exponente indicado tras el caracter e:
1 print ( -3.1416)
2 print (44.10 e+3)
3 print (7.5e -4)

La notación científica está definida en el estándar IEEE 754.

10
Indice Introducción Fundamentos de Python Bibliografía

COMPLEJOS

Puedes usar números complejos usando la notación


<parte real>+<parte imaginaria>j
1 print ((1+3j) +(2+5j))

Podemos consultar la parte real y la parte imaginaria de un


número complejo:
1 z = 1+3j
2 print(z.real) # 1
3 print(z.imag) # 3

11
Indice Introducción Fundamentos de Python Bibliografía

CADENAS DE CARACTERES

Múltiples formas de representar las cadenas de caracteres:


1 print (" Esto es 'curioso ', ¿no ?")
2 print('Vaya " rarezas " tiene Python ')
3 print ("\ tCaracteres de \" escape \"\n")
4 print(''' Ahora empezamos por aquí y
5 continuamos hasta aquí ''')
6 print(r '\d\t\d ')

12
Indice Introducción Fundamentos de Python Bibliografía

BOOLEAN Y NONE

▶ Python ofrece un tipo básico bool para representar los valores


de verdad: True y False. Hay otros valores, como los enteros
1 y 0, que Python permite que se usen con el mismo sentido
que True y False.
▶ Python permite representar la ausencia de valor con None,
algo parecido al NULL de C.

13
Indice Introducción Fundamentos de Python Bibliografía

CONVERSIONES DE TIPOS

Funciones para convertir una cadena a otro tipo:


1 x = int ("123") # De cadena a entero
2 y = float ("1.2e -3") # De cadena a real
3 z = complex ("1+2j") # De cadena a complejo

Y viceversa:
1 x = str (123) # De entero a cadena
2 y = str (1.2e -3) # De real a cadena
3 z = str (1+2j) # De complejo a cadena

14
Indice Introducción Fundamentos de Python Bibliografía

COMPROBACIONES DE TIPOS

Podemos consultar el tipo de cualquier valor con type():


1 z = 1+2j
2 print(type(z)) # Indica <class 'complex '>

La función isinstance() recibe un valor y un tipo y devuelve


True o False:
1 print( isinstance (34, int))

Tipo Descripción
int Entero
float Reales
complex Complejos
str Cadenas de caracteres
bool Valores lógicos
15
Indice Introducción Fundamentos de Python Bibliografía

VARIABLES (1)

▶ Nombres arbitrariamente largos.


▶ Pueden contener letras, números y el carácter _.
▶ Deben comenzar por letra o _.
▶ Python distingue si usas mayúsculas o minúsculas.
▶ Puedes emplear acentos y ñ (ojo, usa utf-8 en Windows).
▶ No podrás usar las palabras reservadas.
▶ Usa una variable sólo después de asignarle un valor.

1 n = 10
2 print(n)

16
Indice Introducción Fundamentos de Python Bibliografía

VARIABLES (2)

Asignaciones encadenadas:
1 a = b = c = 10

Asignaciones múltiples con distinto valor:


1 a, b, c = 2, 4, 16

Python permite tipos dinámicos:


1 a = 23.5
2 print(a)
3 a = "Y ahora soy una 'cadena de caracteres '"
4 print(a)

17
Indice Introducción Fundamentos de Python Bibliografía

OPERADORES ARITMÉTICOS (1)

Operador Descripción
Ordenados de menor a
x+y suma mayor precedencia.
x−y resta
x∗y multiplicación Para cada operador
x/y división binario existe la versión
x // y división entera compacta con la igualdad:
x%y módulo
+x más unario 1 x = 1
−x menos unario 2 x += 1 # x = x+1
x ∗∗ y potencia

1 print (10+2**3) # Equivale a 10+(2**3)

18
Indice Introducción Fundamentos de Python Bibliografía

OPERADORES ARITMÉTICOS (2)

Atención a la división de enteros


El resultado es siempre un número real, incluso si son divisibles.
Si el resultado es positivo, se trunca la porción decimal. Si el re-
sultado es negativo, se redondea al siguiente entero menor.

1 print (10/2) # El resultado es 5.0


2 print (10/4) # El resultado es 2.5
3 print (10//4) # El resultado es 2
4 print ( -10//4) # El resultado es -3

19
Indice Introducción Fundamentos de Python Bibliografía

OPERADORES RELACIONALES (1)

Operador Descripción
a == b igualdad
Todos estos operadores
a != b desigualdad
dan como resultado True
a<b menor que
o False. Comparten la
a <= b menor o igual que
misma precedencia.
a>b mayor que
a >= b mayor o igual que

Podemos hacer comparaciones encadenadas:


1 a = 1
2 b = 2
3 c = 2
4 print(a < b <= c) # True porque a<b y b <=c

20
Indice Introducción Fundamentos de Python Bibliografía

OPERADORES RELACIONALES (2)

Atención a la comparación de reales


La representación interna en Python de los números reales pue-
de dar lugar a resultados inesperados

1 x = 1.1 + 2.2 # x == 3.3000000000000003


2 print(x == 3.3) # False

Es mejor hacer una comprobación de lo próximos que están los


números comparados, mediante el valor absoluto que se obtiene
con abs():
1 tolerancia = 1e -10
2 x = 1.1 + 2.2
3 print(abs(x - 3.3) < tolerancia ) # True

21
Indice Introducción Fundamentos de Python Bibliografía

OPERADORES LÓGICOS (1)

Operador Descripción
x or y Disyunción Operadores ordenados de menor a
x and y Conjunción mayor precedencia.
not x Negación

Podemos considerar que es falsy (falso sin ser False):


▶ Valor numérico cero: 0, 0.0, 0+0j
▶ Cadena vacía con una, dos o tres comillas
▶ None

Es truthy cualquier otro valor verdadero distinto de True.

22
Indice Introducción Fundamentos de Python Bibliografía

OPERADORES LÓGICOS (2)

Si se usan los operadores and y or con operandos que no son


booleanos, el resultado no es True o False, sino:
x x or y x and y
si x es truthy x y
si x es falsy y x

1 a = 0
2 b = 1
3 c = 2
4 print(b or c) # 1
5 print(a or c) # 2
6 print(b and c) # 2
7 print(a and c) # 0

23
Indice Introducción Fundamentos de Python Bibliografía

PRECEDENCIA ENTRE OPERADORES

Tipo de operadores Orden de evaluación


Operadores lógicos menor precedencia
Operadores relacionales ↓
Operadores aritméticos mayor precedencia
En caso de duda, siempre podemos recurrir a los paréntesis para
ordenar la evaluación.
1 x = 1
2 y = False
3 z = True
4 print(x+2*4 < 0 or y and -z %1)
5 # (((x +(2*4) ) > 0) or (y and ((-z) %1)))

24
Indice Introducción Fundamentos de Python Bibliografía

SENTENCIA IF

Una primera forma de if:


1 if <condición >:
2 <sentencias _ condición _verdadera >

donde:

▶ <condición> es una expresión cuyo valor puede ser False,


falsy, True o truthy.
▶ las sentencias que se ejecutan cuando se cumple la condición
(True o truthy) tienen todas ellas un nivel de indentación
adicional al del if.

25
Indice Introducción Fundamentos de Python Bibliografía

SENTENCIA IF-ELSE

La segunda variante de if:


1 if <condición >:
2 <sentencias _ condición _verdadera >
3 else:
4 <sentencias _ condición _falsa >

No hay ambigüedad sobre el if asociado al else por la


indentación.

26
Indice Introducción Fundamentos de Python Bibliografía

SENTENCIA IF-ELIF-ELSE

La tercera variante de if:


1 if <cond 1>:
2 <sent_cond 1_ verdadera >
3 elif <cond 2>:
4 <sent_cond 1_ falsa _y_cond 2_ verdadera >
5 ...
6 else:
7 <sentencias _todos_ condiciones _falsas >

Curiosidad de Python
No existe la sentencia switch-case. Python procura no ofrecer
dos formas de hacer lo mismo. Se implementa con if-elif.

27
Indice Introducción Fundamentos de Python Bibliografía

SENTENCIA WHILE

No hay ninguna diferencia notable con respecto a C:


1 while <condición >:
2 <sentencias _ mientras _ condicion _verdadera >

Curiosidad de Python
No existe la sentencia do-while. Se implementa con while.

1 while True:
2 <sentencias _ mientras _ condicion _verdadera >
3 if not <condición >:
4 break # Call the Spanish Inquisition !

28
Indice Introducción Fundamentos de Python Bibliografía

SENTENCIA FOR-IN (1)

Sirve para realizar iteraciones entre elementos de secuencias:


1 for <variable > in <secuencia >:
2 <sentencias _que_usan_variable >

En Python, se definen listas de valores con corchetes:


1 for x in [5 ,'7 ' ,11,'13']:
2 print (x,'es un número primo ')

Una cadena de caracteres es una secuencia también:


1 a = 0
2 for c in 'supercalifragilisticoespialidoso ':
3 print (a,c)
4 a += 1

29
Indice Introducción Fundamentos de Python Bibliografía

SENTENCIA FOR-IN (2)

Una función útil para generar secuencias de enteros es range():


▶ range(stop): genera una lista desde 0 hasta stop-1.
▶ range(start,stop,step=1): genera una lista desde start
hasta stop-1 saltando con intervalos dados por step.
▶ Si step no se indica, se entiende que el intervalo es 1.
▶ Podemos usar un valor negativo en step para generar listas
de enteros decrecientes.

1 for c in range (0,-10,-1):


2 print ('c=',c)

30
Indice Introducción Fundamentos de Python Bibliografía

EJERCICIO 1

Generador de números primos


Crea un módulo primos.py que imprima la lista de números pri-
mos menores que 10000. Emplea los fundamentos de Python
vistos hasta ahora. Procura que el código sea tal que, si se qui-
siera establecer otro valor máximo, requiera cambios mínimos.

31
Indice Introducción Fundamentos de Python Bibliografía

FUNCIONES (1)

Definición de funciones en Python:


▶ Cabecera: def <nombre>(<argumentos>):
▶ Cuerpo: tras la cabecera, usando indentación.

1 def f_suma _3(a,b,c):


2 print ('suma=',a+b+c)

La llamada a una función no tiene nada particular:


1 f_suma _3(5 ,43 ,2)

32
Indice Introducción Fundamentos de Python Bibliografía

FUNCIONES (2)

Los argumentos y las variables definidas dentro de la función


pueden ocultar variables con igual nombre definidas fuera:
1 a = 0
2

3 def f():
4 a = 5
5 print ('a',a)
6

7 if __ name __ == '__ main __':


8 f()
9 print ('a',a)

33
Indice Introducción Fundamentos de Python Bibliografía

FUNCIONES (3)

Hay que indicar con global y la lista de variables globales a las


que se quiere acceder dentro de la función, separadas por comas:
1 a = 0
2

3 def f():
4 global a
5 a = 5
6

7 if __ name __ == '__ main __':


8 f()
9 print ('a',a)

34
Indice Introducción Fundamentos de Python Bibliografía

FUNCIONES (4)

El valor de retorno de la función es None si no se llama a return.


Se pueden devolver tipos de datos distintos.
1 def f(a):
2 if a == 1:
3 return 42
4 elif a == 2:
5 return 1-1j
6 elif a == 3:
7 return +1e -12
8 else:
9 return 'Something different !'
10

11 if __ name __ == '__ main __':


12 print (f(1) ,f(2) ,f(3) ,f(4))

35
Indice Introducción Fundamentos de Python Bibliografía

FUNCIONES (5)

Algunos argumentos puede tomar un valor por defecto, indicado


en la cabecera de la función. Tienen que estar situados en la parte
final de la lista de argumentos.
1 def f(a,b,c=0):
2 return a+b+c
3

4 if __ name __ == '__ main __':


5 print (f(1 ,2)) # El resultado es 3
6 print (f(1 ,2 ,3)) # El resultado es 6

36
Indice Introducción Fundamentos de Python Bibliografía

FUNCIONES (6)

Python permite que los argumentos de una función no tengan que


ser indicados en la llamada en el orden de su definición, poniendo
en la llamada el nombre del argumento correspondiente seguido
de un igual y el valor:
1 def f(a,b,c):
2 return a*b+c
3

4 if __ name __ == '__ main __':


5 print (f(c=2,a=1,b=3)) # El resultado es 5
6 print (f(2,c=0,b=5)) # El resultado es 10

37
Indice Introducción Fundamentos de Python Bibliografía

EJERCICIO 2

Función generadora de números primos


Modifica el módulo primos.py para que el código que imprime la
lista de números primos esté encapsulado en una función.
▶ Denomina a la función imprimir_primos() y emplea un
argumento máximo que recibe el valor máximo de los
números que tiene que generar. Haz que su valor por defecto
sea 10000.
▶ Invoca a la función sin argumento y con distintos valores del
argumento máximo para comprobar que funciona bien.

38
Indice Introducción Fundamentos de Python Bibliografía

EXCEPCIONES

En Python, si algo falla se produce una excepción que detiene la


ejecución del programa.
1 def operación (x,y,z):
2 return x/y + z
3

4 if __ name __ == '__ main __':


5 res = operación (5 ,0 ,3)
6 print (' Resultado =',res)
7 print (' Finalizando ')

En consola aparece ZeroDivisionError: division by zero.

39
Indice Introducción Fundamentos de Python Bibliografía

BLOQUE TRY-EXCEPT

La forma más sencilla de evitar la interrupción del programa es


rodear el código que puede fallar con un bloque try-except:
1 if __ name __ == '__ main __':
2 try:
3 res = operación (5 ,0 ,3)
4 print(' Resultado =',res)
5 except ZeroDivisionError :
6 print(' División por cero !')
7 print (' Finalizando ')

40
Indice Introducción Fundamentos de Python Bibliografía

BLOQUE TRY-EXCEPT-ELSE-FINALLY

Esquema de tratamiento de excepciones más completo:


1 try:
2 /* Bloque que puede lanzar excepciones */
3 except Excepción 1:
4 /* Tratamiento Excepción 1 */
5 except ( Excepción 2, Excepción 3):
6 /* Tratamiento Excepción 2 y Excepción 3 */
7 ...
8 except :
9 /* Tratamiento otras excepciones */
10 else:
11 /* Bloque que se ejecuta si todo ok */
12 finally :
13 /* Bloque que se ejecuta al final */

41
Indice Introducción Fundamentos de Python Bibliografía

ASERCIONES

Para depurar programas en Python, se puede usar assert


1 def operación (x,y,z):
2 assert y!=0,' Parámetro y es 0'
3 return x/y + z
4

5 if __ name __ == '__ main __':


6 try:
7 res = operación (5 ,0 ,3)
8 print(' Resultado =',res)
9 except AssertionError as error:
10 print ('Salta aserción :', error )
11 print(' Finalizando ')

42
Indice Introducción Fundamentos de Python Bibliografía

EJERCICIO 3

Comprobación de valores de entrada


La función input() permite recibir por teclado una entrada escri-
ta por el usuario. Se le puede pasar como argumento un mensaje
que aparece por consola para solicitar la entrada del usuario.
▶ Escribe un módulo check.py que pida una entrada e imprima
si es un entero, un real, un número complejo u otra cosa.
▶ Usa las funciones de conversión, pero ten en cuenta que
generan la excepción ValueError si no se puede hacer la
conversión.
▶ Intenta que el código esté estructurado usando funciones

43
BIBLIOGRAFÍA
Indice Introducción Fundamentos de Python Bibliografía

REFERENCIAS

Mª Ángeles Fernández de Sevilla Vellón


»Introducción práctica a la programación con Python«
Textos Universitarios Tecnología, 2016
Sébastien Chazallet
»Python 3. Los fundamentos del lenguaje«
Ediciones ENI, 2016
Mark Lutz
»Learning Python«
O’Reilly, 2013
Allen Downey
»Think Python«
Green Tea Press, 2012
https://docs.python.org/3/
»Python 3.7.0 documentation« 45

Potrebbero piacerti anche