Logo Studenta

python_base

¡Este material tiene más páginas!

Vista previa del material en texto

Lenguaje python, aspectos básicos
Palabras reservadas en Python
Las 30 palabras reservadas (keywords) de Python son: and,
as, assert, break, class, continue, def, del, elif, 
else, except, finally, for, from, global, if, import, in,
is, lambda, nonlocal, not, or, pass, raise, return, 
try, while, with, yield.
Cadenas crudas: raw
Cualquier cadena que deba interpretarse tal como se
escribe es una cadena raw o cruda. En una cadena raw se
omiten los caracteres especiales expresados con la barra
invertida “\” o escape. Las cadenas raw se escriben
entrecomilladas y con el carácter “r” precediéndolas:
print('\\5', ' es igual que ', r'\5')
Operaciones básicas con variables
Con la función type() podemos conocer el tipo de datos de
una variable y con la sentencia del() (paréntesis 
obcionales) borramos una variable de memoria. Una vez 
borrada si intentamos acceder a su valor se producirá un 
error.
Los métodos upper() y lower() devuelven una cadena en 
mayúsculas y minúsculas, respectivamente.
Por ejemplo:
cadena1 = 'Python' # Declara variable con cadena 'Python'
cadena2 = 'Lenguaje ' + cadena1.upper() # Lenguaje PYTHON
cadena3 = 'Lenguaje ' 'Python' # Lenguaje Python
cadena3 = cadena1.lower() * 3 # pythonpythonpython 
cadena4 = "Python para todos"
print(cadena4.title()) # Python Para Todos
print(type(cadena1)) # type str=""
del cadena1 # Borra la variable de memoria
print(cadena1) # Genera un error porque no existe
La función ord() devuelve el ordinal entero del carácter 
indicado y justo lo contrario hace la función chr() que 
devuelve el carácter (Unicode) que representa al número 
indicado.
ord('$') # 36
ord('@') # 64
ord('A') # 65
ord('ñ') # 241
chr(36) # '$'
chr(64) # '@'
chr(65) # 'A'
chr(241) # 'ñ'
Operadores aritméticos
Tipo Operación
+ Suma
- Resta
* Producto
/ División
** potencia
// Parte entera del cociente
% Resto del cociente
Los operadores admite concatenación como en C/C++, 
ejemplos
contador += 1 # es equivalente a escribir: contador = contador + 1
porc = 5 # asigna número entero a variable
total *= porc / 100 # es equivalente a escribir: total = total * porc / 100
Operadores binarios o de bits
Tipo Operación
& AND
| OR
^ XOR
~ NOT
<< Desplazar bit a la izquierda
>> Desplazar bit a la derecha
Por ejemplo:
operacion1 = 1 | 2 # 01 OR 10 = 11 3 en decimal→
operacion2 = 1 & 2 # 01 AND 10 = 00 0 en decimal→
operacion3 = operacion1 ^ operacion2 # 11 XOR 00 = 11 3 →
Cabe observar que el operador actúa bits por bits 
apareado.
Operadores lógicos
Estos son operadores que evalúan predicados no bits como 
en el caso anterior su resultado es True o False.
Tipo Operación
AND Y
OR O
NOT NO
Operadores de comparación o relacionales
Sólo se usa en comparaciones aritméticas devuelve como 
resultado True o False. 
Tipo Operación
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
== Es igual
!= Es no igual
Control de Flujo
Control del flujo: if
La sentencia de control if se utiliza para controlar el 
flujo en la ejecución de un programa por evaluación de 
predicados. Básicamente, si se cumple una condición puede
hacerse que se ejecute un bloque de código, que estará 
tabulado, y si no se cumple o se dan otras posibilidades 
puede hacerse que se ejecuten otros bloques. Para ello, 
se apoya en las clausulas elif que evalúa otras 
condiciones y en else, que en caso de no cumplirse 
ninguna de las condiciones anteriores ofrece la solución 
final. Varios ejemplos:
if edad <= 12: # se evalúa la primera condición... 
 precio = 2 # y si edad es menor igual que 12, precio = 2
elif 13 <= edad <= 18: # en caso contrario se evalúa...
 precio = 3 # y si edad está entre 13 y 18, precio = 3
else: # en cualquier otro caso...
 precio = 4 # precio = 4
print('par' if edad % 2 == 0 else 'impar') # if condicional en una sola línea
tecla = 'S'
if tecla in('s', 'S', 'y', 'Y'): # Evalúa si un valor está entre varios posibles
 print('Ha seleccionado: Sí')
 
 
if True: # Siempre es True
 print('Sí, es verdad')
else:
 print('Es falso')
Control del flujo con bucles: while
El bucle más elemental suele emplearse cuando un programa
necesita repetir un número de veces un proceso hasta que 
una variable alcanza un valor o hasta que se verifique 
algún predicado. La sentencia while incluye la condición que 
debe cumplirse para que se ejecute el bloque de código que 
contiene, aunque en cualquier momento podemos salir de un bucle 
con break o cancelar el ciclo actual y continuar con continue la 
ejecución del ciclo siguiente.
Ejemplos:
x=0
y=0
while True:
 print(x,y)
 y+=1
 if y<5:
 continue
 else:
 x+=1
 
 if x==5:
 break
 
print(x,y)
Control del flujo con bucles: for...in
Otra forma de construir un bucle consiste en recorrer los
elementos de un lista con la sentencia for...in. La 
construcción utiliza una variable que en cada ciclo toma 
el valor de un nuevo elemento de la lista de la clausula 
in. El bucle terminará cuando se alcance el último 
elemento de la lista o cuando se fuerce su fin con 
break.Con for también puede usarse la clausula in range que, en 
su uso más elemental, recoge un valor que expresa el número de 
ciclos del bucle, partiendo del valor 0. 
Ejemplo:
for num in range(10): print(num) # recorre del 0 al 9
Manejo de Excepciones 
Las excepciones o errores que se pueden producir durante la 
ejecución de un programa se gestionan con una construcción try-
except. Una excepción puede ocurrir al intentar operar con datos 
de distinto tipo, dividir un número por cero, teclear un tipo de dato 
no esperado, acceder a un archivo que no existe y en otras 
situaciones previsibles. Para cuando sucedan es importante decidir 
qué respuesta dar a cada caso y evitar que el programa suspenda 
su ejecución de manera inesperada.
En el bloque try se incluye el código que puede producir la
excepción y en except el código que la tratará convenientemente.
En un bloque except TipoError se capturará un tipo de error
concreto que habrá que indicarlo. Por ejemplo, si intentamos
convertir una cadena de texto a número entero el tipo será
ValueError o si operamos con una variable no declarada el tipo será
NameError.
try: # contiene el código que puede producir la excepción
except: # contiene el código que gestionará cualquier error
except TipoError: # contiene el código que gestionará un tipo de 
error concreto
else: # contiene el código que se ejecutará en caso de no haber 
error
finally: # contiene el código que se ejecutará en cualquier caso.
Ejemplos:
try:
 numero = int(input('Introducir un número: '))
 factorial = 1
 for num in range(1, numero+1):
 factorial *= num
 
 print(factorial) 
 
except:
 print('Debe introducir un número entero') 
try: # Bloque de código a “vigilar”
 texto = input('Teclear :') # introducir un dato
 
except KeyboardInterrupt: # captura excepción de interrupción 
 print('\nSe ha pulsado ctrl+c') # Interrupción al presionar 
Ctrl+c
 
else: # se ejecuta si no hay error
 print('Ha tecleado {}'.format(texto)) # muestra la cadena 
introducida
 
finally: # se ejecuta tanto si hay error como si no
 print('fin de programa') # muestra mensaje final
La clausula assert
Con assert se fijan las condiciones que debe cumplir un objeto y si 
éstas no se cumplen en un momento determinado, producirá una 
excepción que hay que interceptar y tratar convenientemente. En el
siguiente ejemplo se define una lista con seis elementos. A 
continuación, mediante un bucle se irán eliminando elementos, uno 
a uno, desde el final de la lista. La condición establecida para que 
no se produzca la excepción es que la lista tenga al menos dos 
elementos. Cuando haya dos y se intente borrar de nuevo se 
producirá la excepción AssertionError.
try: # bloque de código a vigilar
 lista = [1, 2, 3, 4, 5, 6] # define lista
 print(lista) # muestra lista
 while True: # bucle infinito hasta error
 print('Elementoa borrar',lista[-1]) # muestra elemento a 
borrar
 lista.pop() # borra elemento
 assert len(lista) > 1 # la lista debe tener al menos 2 
 print(lista) # muestra lista después de borrado
 
except AssertionError: # excepción para assert
 print('Error al intentar borrar elemento ') # muestra mensaje 
de assert
 print('La lista debe contener al menos 2')
Entrada Estándar: input()/raw_input()
La función input()/raw_input() permite a los usuarios introducir 
datos de distintos tipos desde la entrada estándar que 
normalmente se corresponde con un teclado.
Ejemplo
try: # bloque de código a comprobar
 articulos = int(input('Artículos:')) # entrada de un número 
 precio = int(input('Precio:')) # entrada de un número
 print('Pagar: ' + str(articulos*precio) + '$') # muestra 
resultado
 
except: # bloque para captura de error
 print('error, deben ser números') # muestra mensaje informativo
Salida Estándar: print() 
La función print() se utiliza para mostrar información en la salida 
estándar que, normalmente, se corresponde con la salida estandar 
que puede ser la pantalla de la computadora.
Ejemplo:
correos = {'SJ' : 300, 'LR': 309, 'B': 310} # declara 
diccionarios
for loc, cp in correos.items(): # recorre diccionario
 print('{0:5}:{1:4d}'.format(loc, cp)) # muestra lista de pares 
con formato
Operaciones con archivos 
Un archivo es información identificada con un nombre que puede 
ser almacenada de manera permanente en el directorio de un 
dispositivo. 
Abrir archivo
Antes de poder realizar cualquier operación de lectura/escritura hay
que abrir el archivo con open() indicando su ubicación y nombre 
seguido, opcionalmente, por el modo o tipo de operación a realizar 
y la codificación que tendrá el archivo. Si no se indica el tipo de 
operación el archivo se abrirá en modo de lectura y si se omite la 
codificación se utilizará la codificación actual del sistema. Si no 
existe la ruta del archivo o se intenta abrir para lectura un archivo 
inexistente se producirá una excepción del tipo Ioerror.
Ejemplos
ObjArchivo = open('/home/archivo.txt')
ObjArchivo = open('/home/archivo.txt', 'r'')
ObjArchivo = open('/home/archivo.txt', mode='r', encoding='utf-8')
Las operaciones de modo permitidas son:
Modo Significado
r Sólo lectura
r+ Lectura/escritura
w Sobre escribe, si no 
existe lo crea
a Añadir al final del archivo
b Binario
+ Permite lectura/escritura 
simultáneas
U Salto de línea universal al
sistema
rb Sólo lectura binaria
wb Sobre escritura binaria
r+b Lectura/escritura binaria
Cerrar archivo
Después de terminar de trabajar con un archivo lo cerraremos con 
el método close.
ObjArchivo.close
Leer archivo: read, readline, readlines, with-as
Con el método read() es posible leer un número de bytes 
determinados. Si no se indica número se leerá todo lo que reste o si
se alcanzó el final de fichero devolverá una cadena vacía.
archivo = open('archivo.txt','r') # abre archivo en modo lectura
cadena1 = archivo.read(9) # lee los 9 primeros bytes
cadena2 = archivo.read() # lee la información restaste
print(cadena1) # muestra la primera lectura
print(cadena2) # muestra la segunda lectura
archivo.close # cierra archivo 
El método readline() lee de un archivo una línea completa
archivo = open('archivo.txt','r') # abre archivo en modo lectura
while True: # inicia bucle infinito para...
 linea = archivo.readline() # … leer línea a línea
 if not linea: break # … hasta que no haya más que leer
 print(linea) # muestra la línea leída
archivo.close # cierra archivo
El método readlines() lee todas las líneas de un archivo como una 
lista. Si se indica el parámetro de tamaño leerá esa cantidad de 
bytes del archivo y lo necesario hasta completar la última linea.
archivo = open('archivo.txt','r') # abre archivo en modo lectura
lista = archivo.readlines() # lee todas la líneas a una lista
numlin = 0 # inicializa un contador
for linea in lista: # recorre todas los elementos de la lista
 numlin += 1 # incrementa en 1 el contador
 print(numlin, linea) # muestra contador y elemento de lista (línea)
archivo.close # cierra archivo
with-as permite usar los archivos de forma óptima cerrándolos y 
liberando la memoria al concluir el proceso de lectura.
with open("indice.txt") as fichero: # abre archivo (y cierra cuando termine 
lectura)
 for linea in fichero: # recorre línea a línea el archivo
 print(linea) # muestra línea última leída
Escribir en archivo: write, writelines
El método write() escribe una cadena y el método writelines() 
escribe una lista a un archivo. Si en el momento de escribir el 
archivo no existe se creará uno nuevo.
cadena1 = 'Datos' # declara cadena1
cadena2 = 'Secretos' # declara cadena2
archivo = open('datos1.txt','w') # abre archivo para escribir
archivo.write(cadena1 + '\n') # escribe cadena1 añadiendo salto de línea
archivo.write(cadena2) # escribe cadena2 en archivo
archivo.close # cierra archivo
 
lista = ['lunes', 'martes', 'miercoles', 'jueves', 'viernes'] # declara lists
archivo = open('datos2.txt','w') # abre archivo en modo escritura
archivo.writelines(lista) # escribe toda la lista en el archivo
archivo.close # cierra archivo
Mover el puntero: seek(), tell()
El método seek() desplaza el puntero a una posición del archivo y 
el método tell() devuelve la posición del puntero en un momento 
dado (en bytes).
archivo = open('datos2.txt','r') # abre archivo en modo lectura
archivo.seek(5) # mueve puntero al quinto byte
cadena1 = archivo.read(5) # lee los siguientes 5 bytes
print(cadena1) # muestra cadena
print(archivo.tell()) # muestra posición del puntero
archivo.close # cierra archivo
Leer y escribir cualquier objeto a un archivo: pickle
Para leer y escribir cualquier tipo de objeto Python podemos 
importar el modulo pickle y usar sus métodos dump() y load() 
para leer y escribir los datos.
import pickle # importa módulo pickle
lista = ['Perl', 'Python', 'Ruby'] # declara lista
archivo = open('lenguajes.dat', 'wb') # abre archivo binario para escribir 
pickle.dump(lista, archivo) # escribe lista en archivo
archivo.close # cierra archivo
del lista # borra de memoria la lista
 
archivo = open('lenguajes.dat', 'rb') # abre archivo binario para leer
lista = pickle.load(archivo) # carga lista desde archivo
print(lista) # muestra lista
archivo.close # cierra archivo
Funciones 
Una función es como una caja negra: una vez creada no 
debemos preocuparnos por lo que tiene en su interior, 
simplemente, tenemos que recordar su nombre y los datos 
que necesita para resolver un proceso. Generalmente, 
devuelven un resultado. La principal virtud de una 
función está en la reutilización del código, es decir, 
una vez creada puede ser llamada cada vez que se 
necesite. Para mejor aprovechamiento debemos procurar que
las funciones ofrezcan soluciones a necesidades muy 
concretas.
Funciones con un número fijo de parámetros
Para definir la función escribiremos def seguido del nombre de la 
función y entre paréntesis los dos parámetros que son necesarios 
para calcular el área del triángulo: base y altura. Con return la 
función devolverá el resultado de la fórmula matemática expresada.
Los dos parámetros son obligatorios. Si alguno falta habrá una 
excepción.
def area_triangulo(base, altura): # define función con dos parámetros
 ''' Calcular el área de un triangulo''' # cadena de documentación
 return base * altura / 2 # devuelve el resultado de la expresión
 
print(area_triangulo(6, 4)) # la función retornará el valor 12
Funciones con un número variable de parámetros
def distancia(*tramos): # define función con nº variable de parámetros
 ''' Suma distancia de tramos ''' # cadena de documentación
 total = 0 # inicializa variable numérica 
 for distancia in tramos: # recorre, uno a uno, todos los tramos...
 total = total + distancia # … y acumula la distancia
 return total # devuelve la suma de todos los parámetros
 
tramo1 = 10
print(distancia(tramo1, 20, 30, 40)) # la función retornará el valor 100print(distancia()) # la función retornará el valor 0
Funciones con parámetros con valores por defecto
La función pagar tiene el parámetro dto_aplicado con el valor 5 
asignado por omisión. Dicho valor se utilizará en la solución en el 
caso de omitirse este dato cuando sea llamada la función. 
def pagar(importe, dto_aplicado = 5):
 ''' La función aplica descuentos '''
 return importe - (importe * dto_aplicado / 100)
 
print(pagar(1000)) # 950
print(pagar(1000, 10)) # 900
Funciones con parámetros que contienen diccionarios
La función porc_aprobados tiene el parámetro **aulas que es un 
diccionario que contendrá las aulas de una escuela con el número 
alumnos de cada una. Cuando es llamada la función se pasa 
también el número de alumnos que aprobaron el curso. La función 
suma los alumnos de todas las aulas y calcula el porcentaje de 
aprobados. 
def porc_aprobados(aprobados, **aulas):
 ''' Calcula el % de aprobados '''
 
 total=0
 for alumnos in aulas.values():
 total += alumnos
 
 return aprobados * 100 / total
 
porcentaje_aprobados = porc_aprobados(48, A = 22, B = 25, C = 21)
print(porcentaje_aprobados)
Funciones que devuelven más de un valor
La función elemento_quimico recibe un símbolo químico y 
devuelve el número atómico del elemento correspondiente y su 
denominación. Para ello, utiliza un diccionario en el que las claves 
son los símbolos químicos y los valores son cadenas que contienen 
para cada elemento su número atómico y denominación, unidos por
un guión. Mediante el símbolo se accede a la cadena que luego es 
dividida con split en dos partes (utilizando como separador el 
propio guión '-'). split devuelve una lista con las dos partes. En 
lista[0] queda el número atómico y en lista[1] la denominación, los 
dos valores que devuelve esta función. 
def elemento_quimico(simbolo):
 ''' Devuelve número atómico y denominación del elemento '''
 
 elementos = {'H':'1-Hidrógeno', 'He':'2-Helio', 'Li':'3-Litio'}
 elemento = elementos[simbolo]
 lista = elemento.split('-')
 return (lista[0], lista[1])
 
num_atomico, denomina = elemento_quimico('He')
print('Núm. Atómico:', num_atomico)
print('Denominación:', denomina)
Funciones sin return
Una función sin return devuelve None si es asignada a una 
variable o llamada desde un print(). Por lo demás, funcionan igual 
que cualquier otra función. 
def repite(caracter='-', repite=3):
 print(caracter * repite)
 
repite('=', 20)
Variables locales y variables globales 
Las funciones locals() y globals() devuelven diccionarios con las 
variables locales y globales que pueden utilizarse en un programa. 
Cada diccionario equivale a un espacio de nombre (namespace) 
donde Python gestiona las variables propias de un ámbito 
determinado. Si el diccionario es local el ámbito se refiere al espacio
de nombre de una función o una clase; y si el diccionario es global 
el ámbito se corresponde con el módulo. 
Ejemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
http://python-para-impacientes.blogspot.com.es/2014/01/cadenas-listas-tuplas-diccionarios-y.html#diccionarios
 
from math import pi
global1 = 1
 
def funcion1(x, y):
 global global1
 total = x + y + global1
 global1 = 2
 print("funcion1. Dicc. locales.:", locals())
 print("funcion1. Dicc. globales:", globals())
 return total 
 
class clase1:
 z = 3
 print("clase1. Dicc. locales.:", locals())
 print("clase1. Dicc. Globales:", globals())
 def __init__(self):
 print("clase1: método __init__")
 
 def __call__(self):
 print("clase1: método __call__")
 
def main():
 a = 5
 b = 10
 
 if "funcion1" in globals():
 if callable(globals()["funcion1"]):
 print("Rtdo funcion1: ", globals()["funcion1"](a, b))
 
 objeto = clase1()
 if "objeto" in locals():
 if callable(locals()["objeto"]):
 locals()["objeto"]
 
 locals()["a"] = 20
 globals()["b"] = 20
 print("main(). Dicc. locales.:", locals())
 print("main(). Dicc. globales:", globals()) 
 print("a: ", a, "b:", b) 
 return 0
 
if __name__ == '__main__':
 main()
Evaluar, ejecutar y compilar cadenas 
Las funciones eval(), exec() y compile() son del grupo de 
funciones integradas o built-in functions de Python.
eval()
La función eval() se utiliza para evaluar cadenas de texto que 
pueden contener expresiones o distintos tipos de estructuras de 
datos que pueden utilizarse con Python, tales como listas, tuplas, 
diccionarios y otros objetos que admiten asignación. 
precio = 5
cadenas = ['(4+5)**2',
 '(1, 2, 3)',
 '["I", "II", "III"]',
 '{"a":1, "b":2, "c":3}',
 'len("Python")',
 '20 * precio',
 '__import__("platform").python_version()']
 
for cadena in cadenas:
 print(cadena, "=>", eval(cadena), "Tipo:",type(eval(cadena)))
En el siguiente ejemplo la cadena de la variable entrada contiene 
una lista a la que le falta el corchete de cierre y este hecho provoca 
un error de sintaxis:
try:
 entrada = '["castaño","encina","roble"'
 print(entrada, "=>", eval(entrada))
except SyntaxError:
 print('Se ha producido un error de sintaxis')
exec()
La función exec() permite ejecutar código Python contenido en una
cadena o en un archivo. Si el código no cumple con las reglas del 
lenguaje producirá una excepción.
exec('secreto = input("Introducir clave secreta: ")')
exec('if secreto == "1234": print("¡Eureka!")')
exec('print("Clave secreta:", secreto)')
	Palabras reservadas en Python
	Cadenas crudas: raw
	Operaciones básicas con variables
	Operadores aritméticos
	Operadores binarios o de bits
	Operadores lógicos
	Operadores de comparación o relacionales
	Control de Flujo
	Control del flujo: if
	Control del flujo con bucles: while
	Control del flujo con bucles: for...in
	Manejo de Excepciones
	La clausula assert
	Entrada Estándar: input()/raw_input()
	Salida Estándar: print()
	Operaciones con archivos
	Abrir archivo
	Cerrar archivo
	Leer archivo: read, readline, readlines, with-as
	Escribir en archivo: write, writelines
	Mover el puntero: seek(), tell()
	Leer y escribir cualquier objeto a un archivo: pickle
	Funciones
	Funciones con un número fijo de parámetros
	Funciones con un número variable de parámetros
	Funciones con parámetros con valores por defecto
	Funciones con parámetros que contienen diccionarios
	Funciones que devuelven más de un valor
	Funciones sin return
	Variables locales y variables globales
	Evaluar, ejecutar y compilar cadenas
	eval()
	exec()