¿QUÉ ES PYTHON?
Python es un lenguaje de programación interpretado (se ejecuta sin necesidad de ser procesado por el compilador y se detectan errores durante su ejecución) de tipado dinámico (las variables se comprueban durante su ejecución) cuya función es centrarse en una sintaxis que favorezca un código legible. Se trata de un lenguaje multiparadigma; ya que soporta programación funcional, imperativa y orientada a objetos; y está disponible en varias plataformas.
TIPOS BÁSICOS DE DATOS
Los diferentes tipos básicos de datos en Python son diferentes tipos de números.
NÚMEROS ENTEROS
Son aquellos números que no tienen decimales, ya sean positivos o negativos. En Python, se pueden representar mediante el tipo “int” (entero) o el tipo “long” (largo). La única diferencia es que el tipo “long” permite alcanzar números más grandes; aunque no es recomendable utilizarlo a menos que sea para no malgastar memoria. El tipo “int” de Python se implementa a bajo nivel mediante un tipo “long” de C; por lo que, dependiendo de la plataforma, se almacena utilizando 32 bits o 64 bits. El tipo “long” de Python permite almacenar cualquier tipo de número, limitado por la memoria disponible.
-Al asignar un número a una variable, ésta pasará a ser tipo “int”
# type(entero) daría int
entero = 23
-También podemos indicar que se almacene en tipo “long”, añadiendo un “L” al final.
# type(entero) daría long
entero = 23L
-El literal que se asigna a la variable también se puede expresar como octal (poniendo un 0 delante)
# 027 octal = 23 en base 10
entero = 027
-Y también, puede expresarse como hexadecimal (poniendo un 0x delante)
# 0x17 hexadecimal = 23 en base 10
entero = 0x17
NÚMEROS REALES
Son aquellos números que tienen decimales. En Python se expresa mediante el tipo “float”; que se implementa a bajo nivel mediante una variable de tipo “double” de C; es decir, utilizando 64 bits.
-Para representar un número real en Python se escribe primero la parte entera, seguido de un punto, y luego la parte final.
real = 0.2703
-También puede expresarse en notación científica
real = 0.1e-3
NÚMEROS COMPLEJOS
Los números complejos son aquellos que tienen parte imaginaria. Usan un tipo “Complex” en Python, donde se almacenan usando coma flotante, debido a que estos números son una extensión de los números reales. En concreto, se almacenan en una estructura “C” compuesta por dos variables tipo “double”, una para los reales y otra para los imaginarios.
-Se representan de la siguiente forma:
complejo = 2.1 + 7.8j
OPERADORES ARITMÉTICOS
| Operador | Descripción | Ejemplo |
| + | Suma | r = 3 + 2 # r es 5 |
| – | Resta | r = 4 – 7 # r es -3 |
| – | Negación | r = -7 # r es -7 |
| * | Multiplicación | r = 2 * 6 # r es 12 |
| ** | Exponente | r = 2 ** 6 # r es 64 |
| / | División | r = 3.5 / 2 # r es 1.75 |
| // | División entera | r = 3.5 // 2 # r es 1.0 |
| % | Módulo | r = 7 % 2 # r es 1 |
-La división da como resultado un número real, mientras que la división entera da como resultado la parte entera.
-El operador de módulo (%) devuelve el resto de la división entre dos números.
-Si queremos obtener los decimales se podría hacer de dos maneras diferentes:
- Bien indicando los decimales
r = 3.0 / 2
- O bien utilizando la función “float”
r = float(3) / 2
OPERADORES LÓGICOS
Actúan sobre las representaciones en binario de los operandos, es decir, si vemos una operación; por ejemplo, entre 4 y 5, en realidad es como si fuese una operación entre 100 y 101; puesto que sería en código binario.
| Operador | Descripción | Ejemplo |
| & | and | r = 3 & 2 # r es 2 |
| | | or | r = 3 | 2 # r es 3 |
| ^ | xor | r = 3 ^ 2 # r es 1 |
| ~ | not | r = ~3 # r es 0 |
| << | Desplazamiento a la izquierda | r = 3 << 1 # r es 6 |
| >> | Desplazamiento a la derecha | r = 3 >> 1 # r es 1 |
La operación 3&2; en código binario sería 11 y 10. El operador «and» devuelve 1 si el primer bit operando es 1 y el segundo bit operando es 1; es decir, como en 11 y 10; el primer dígito es 1 en ambos; pues el primer dígito del resultado sería 1 y, como en el segundo dígito ambos no tienen el 1, pues el primer dígito del resultado sería 0. Entonces, el resultado sería 10 (en binario), que corresponde al 2 en números en decimales. Por ello, el resultado de 3&2 es igual a 2.
El operador «or» es muy parecido al operador «and»; pero la única diferencia es que no es necesario que ambos dígitos sean 1. En los números 11 y 10, el primer dígito en ambos es 1, por lo que el primer dígito del resultado sería 1. En el segundo dígito de cada número, hay un 1 y un 0; por lo tanto, al haber un 1, el segundo dígito del resultado será 1. Entonces, el resultado será 11 (en binario), que corresponde al 3 en números decimales. Por ello, el resultado de 3|2 es 3.
El operador «xor» es parecido al operador «or» pero con una característica importante, puesto que para que el resultado sea 1, ambos dígitos deben ser distintos.. En los números 11 y 10; el primer dígito de cada uno es 1, por lo que el primer dígito del resultado será 0. En el segundo dígito de cada número, es 1 y 0, por lo que, al ser diferentes, el segundo dígito del resultado sería 1. Entonces, el resultado será 01 (en binario), que corresponde al 1 en números decimales. Por ello, el resultado de 3^2 es 1
El operador «not» sirve para negar uno a uno cada bit, es decir, los 0 cambian a 1 y los 1 cambian a 0. En el número decimal 3, en código binario 11, sería 00, que es números decimales sería 0, por ello, ~ 3 es 0
Los operadores de desplazamiento sirven para trasladar los bits «x» posiciones a la izquierda o a la derecha, por ejemplo, 3<<1. El 3 es 11 en código binario; por lo que desplazamos todos los dígitos hacia la izquierda una vez, por lo que se quedaría 110, que corresponde a 6 en números decimales. Por ello, el resultado de 3<<1 es 6. Lo mismo en el caso de que fuese 3>>1. Se trasladan todos los dígitos hacia la derecha una vez, por lo que se quedaría 01, que corresponde a 1 en números decimales. Por ello, el resultado de 3>>1 es 1
CADENAS
Es un texto encerrado entre comillas simples (‘cadena’) o dobles (“cadena”). Dentro de estas se pueden caracteres especiales escapándolos con ‘\’, como el caracter de nueva línea ‘\n’ o el de tabulación ‘\t’.
Una cadena puede estar precedida por el carácter ‘u’ o el carácter ‘r’ dependiendo si es una cadena que utiliza codificación Unicode y una cadena raw (cruda). Las cadenas raw se distinguen de las normales en que los caracteres escapados mediante ‘\’ no se sustituyen por sus contrapartidas. Esto es bastante útil para las expresiones regulares.
unicode = u»äóè»
raw = r»\n»
-Las cadenas también admiten operadores como la suma y la multiplicación.
a = «uno» y b = «dos»
c = a + b # c es «unodos»
c = a * 3 # c es «unounouno»
BOOLEANOS
Solamente pueden tener dos valores: True y False. En realidad, el tipo “bool” es una subclase del tipo “int”.
Existen diferentes tipos de operadores que trabajan con valores booleanos:
OPERADORES LÓGICOS O CONDICIONALES
| Operador | Descripción | Ejemplo |
| and | ¿se cumple a y b? | r = True and False # r es False |
| or | ¿se cumple a o b? | r = True or False # r es True |
| not | No a | r = not True # r es False |
OPERADORES RACIONALES
| Operador | Descripción | Ejemplo |
| == | ¿son iguales a y b? | r = 5 == 3 # r es False |
| != | ¿son distintos a y b? | r = 5 != 3 # r es True |
| < | ¿es a menor que b? | r = 5 < 3 # r es False |
| > | ¿es a mayor que b? | r = 5 > 3 # r es True |
| <= | ¿es a menor o igual que b? | r = 5 <= 5 # r es True |
| >= | ¿es a mayor o igual que b? | r = 5 >= 3 # r es True |
ESTRUCTURAS DE CONTROL
- Sentencia IF (Si): Si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas.
- Sentencia ELIF (De lo contrario si): De lo contrario si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas
- Sentencia ELSE (De lo contrario): De lo contrario se cumple sin evaluar ninguna expresión condicional y ejecuta el bloque de sentencias seguidas.
numero = int(raw_input(«\nIngresa un número entero, por favor: «))
if numero < 0:
numero = 0
print ‘El número ingresado es negativo cambiado a cero.\n‘
elif numero == 0:
print ‘El número ingresado es 0.\n‘
elif numero == 1:
print ‘El número ingresado es 1.\n‘
else:
print ‘El número ingresado es mayor que uno.\n‘
- Bucle FOR: itera sobre los elementos de cualquier secuencia, en el orden que aparecen en la secuencia.
animales = [‘gato’, ‘perro’, ‘serpiente’]
for animal in animales:
print «El animal es: {0}, tamaño de palabra es: {1}».format(
animal, len(animal))
- Bucle WHILE: permite repetir la ejecución de un grupo de instrucciones mientras se cumpla la condición.
suma, numero = 0, 1
while numero <= 10:
suma = numero + suma
numero = numero + 1
print «La suma es » + str(suma)
- Sentencias TRY EXCEPT: este tipo de sentencias nos permiten “atrapar” excepciones o errores sin que el programa falle o se detenga.
| 12345678910111213 | import math def RaizCuadrada(numero):try: return math.sqrt(numero)except ValueError: return ‘Error: No se puede calcular la raíz cuadrada de ‘ + str(numero) print(RaizCuadrada(4))print(RaizCuadrada(13))print(RaizCuadrada(100))print(RaizCuadrada(-1))print(RaizCuadrada(25)) |
-Nos saltaría un error al intentar calcular la raíz cuadrada de -1; y para ello existen estas estructuras.
- Sentencia BREAK: se puede usar en bucles for y while y simplemente termina el bucle actual y continúa con la ejecución de la siguiente instrucción
# Primer ejemplo
for letra in «Python»:
if letra == «h»:
break
print («Letra actual : » + letra)
- Sentencia CONTINUE : al aparecer, este regresa al comienzo del bucle, ignorando todos los estamentos que quedan en la iteración actual del bucle e inicia la siguiente iteración.
# segundo ejemplo
for letra in «Python»:
if letra == «h»:
continue
print («Letra actual : » + letra)
ESTRUCTURAS DE DATOS
Python es uno de los lenguajes más populares hoy en día gracias a su facilidad y velocidad con la que se desarrolla; y también a su orden y simplicidad.
Este lenguaje de datos posee diferentes estructuras de datos:
LISTAS
Son estructuras de datos muy flexibles en las que podemos mezclar valores de varios tipos. Tienen una declaración sencilla y es dirigido por un formato JSON estándar (JavaScript Object Notation); un formato de texto sencillo para el intercambio de datos.
>>> [1, 2, 3, 4]
[1, 2, 3, 4]
>>> [«hola», «mundo»]
[«hola», «mundo»]
>>> [0, 1.5, «hola»]
[0, 1.5, «hola»]
>>> [0, 1.5, «hola»]
[0, 1.5, «hola»]
-Las dos operaciones básicas en las listas son “Append” y “Extend”; cuya diferencia es que “Append” agrega un elemento al final de la lista, mientras que “Extend” es capaz de agregar otra lista al final de la lista.
- “Append”
>>> lista = [‘a’,’b’]
>>> lista.append(‘c’)
>>> stack
[‘a’, ‘b’, ‘c’]
- “Extend”
>>> lista = [‘a’, ’b’, ‘c’]
>>> lista.extend([‘d’, ‘e’, ‘f’])
>>> lista
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]
–Con las listas podemos hacer un montón de operaciones también:
- “index”: nos devuelve la posición en la lista del elemento indicado.
>>> lista = [‘a’,‘b’,‘c’,’b’, ‘a’]
>>> lista.index(‘b’)
1
- “insert”: inserta un elemento en la lista según el índice deseado.
#[‘b’, ‘c’, ‘b’]
>>> lista.insert(2, ‘a’)
>>> lista
[‘b’, ‘c’, ‘a’, ‘b’]
- “remove”: elimina un elemento de la lista según el índice deseado
#[‘b’, ‘c’, ‘a’, ‘b’]
>>> lista.remove(2, ‘a’)
>>> lista
[‘b’, ‘c’, ‘b’]
- “pop”: devuelve el último elemento de la lista y, posteriormente lo remueve de ella.
#[‘b’, ‘c’, ‘b’]
>>> lista.pop()
‘b’
>>> lista
[‘b’, ‘c’]
- “count”: devuelve la cuenta de elementos actuales de la lista.
#[‘b’, ‘c’, ‘b’]
>>> lista.count(´b’)
2
- “sort”: ordenan un arreglo tal y como se indique. Se pueden ordenar de diferentes maneras:
-Por orden ascendente
>>> mi_lista.sort()
>>> mi_lista
[‘a’, ‘b’, ‘b’, ‘c’]
-Por orden descendente
>>> mi_lista.sort(reverse=True)
>>> mi_lista
[‘c’, ‘b’, ‘b’, ‘a’]
-Invirtiendo el orden de los elementos sin ordenarlos
>>> my_list = [‘a’, ‘c’, ‘b’]
>>> my_list.reverse()
>>> my_list
[‘b’, ‘c’, ‘a’]
TUPLAS
Son parecidas a las listas; pero la diferencia es que las Tuplas son inmutables. Estas consisten en varios valores separados por comas.
>>> a = (1, 2, 3)
>>> a[0]
1
- Función “LEN”
>>> len(a)
3
>>> a[1:]
2, 3
SETS
Son listas sin un orden específico; pero los elementos son únicos, es decir, que no se repiten.
>>> x = set([3, 1, 2, 1]) aunque también se puede poner como >>> x = {3, 1, 2, 1}
set([1, 2, 3])
- Sets con la función “ADD”
>>> x = set([1, 2, 3])
>>> x.add(4)
>>> x
set([1, 2, 3, 4])
- Sets con la función “IN”
>>> x = set([1, 2, 3])
>>> 1 in x
True
>>> 5 in x
False
STRINGS
Podemos manipular “strings” de igual manera en la que se manipulan las listas.
- Strings con la función “LEN”: cuenta los caracteres de cualquier entrada que se añada.
>>> len(“abrakadabra”)
11
- También puede encontrar partes del “string” que le indiquemos.
>>> a = “helloworld”
>>> a[1] #primer caracter
‘e’
>>> a[1:5] #caracteres del uno al cinco
“ello”
>>> a[:5] #caracteres del primero al quinto
“hello”
>>> a[5:] #caracteres del quinto al último
“world”
>>> a[-2:] # los últimos dos caracteres de la cadena
‘ld’
>>> a[:-2] # toda la cadena menos dos caracteres
‘helloworld’
>>> a[::-1] # revertir el orden de la cadena
- Strings con el operador “IN”
>>> ‘hell’ in ‘hello’
True
>>> ‘full’ in ‘hello’
False
>>> ‘el’ in ‘hello’
True
DICCIONARIOS
Actúan de manera similar a una lista, excepto que el índice de este no necesariamente ha de ser un número entero.
>>> a = {‘x’ : 1, ‘y’ : 2, ‘z’ : 3}
>>> a[‘x’]
1
>>> a[‘z’]
3
>>> b = {}
>>> b[‘x’] = 2
>>> b[2] = ‘foo’
>>> b[(1, 2)] = 3
>>> b
{(1, 2): 3, ‘x’ : 2, 2: ‘foo’}
- Diccionarios con comando “DEL”
>>> a = {‘x’ : 1, ‘y’ : 2, ‘z’ : 3}
>>> del a[‘x’]
>>> a
{‘y’ : 2, ‘z’ : 3}
- Diccionarios con el método “KEYS”, “VALUE” e “ITEMS”: El método “Keys” devuelve todas las llaves al diccionario. El método “Value” devuelve todos los valores dentro del diccionario; y el método “Items” devuelve todos los pares “llave-valor” al diccionario.
>>> a.keys()
[‘x’, ‘y’, ‘z’]
>>> a.values()
[1, 2, 3]
>>> a.items()
[(‘x’ , 1), (‘y’ , 2), (‘z’ , 3)]
- Diccionarios con la notación “FOR…IN”
>>> for key in a: print key
…
x
y
>>> for key, value in a.items() : print key, value
…
x 1
y 2
- Diccionarios con la estructura “IN”: buscan dentro del diccionario una palabra.
>>> ‘x’ in a
True
>>> ‘p’ in a
False
>>> a.has_key(‘x’)
True
>>> a.has_key(‘p’)
False
SUBRUTINAS
Un procedimiento o subrutina es una porción de código dentro de un programa más grande que realiza una tarea específica y es, relativamente, independiente del resto del código. Suelen utilizarse para reducir la duplicación de códigos en un programa, permite reusar los códigos, descomponer problemas complejos en piezas simples, mejoran la lectura del código de un programa, oculta o regula parte de un programa…
Estos son ejecutados cuando son llamados por otros procedimientos, funciones o módulos.
-En Python, la definición de funciones se realiza mediante la instrucción “DEF” más un nombre de función descriptivo.
def mi_funcion():
# aquí el algoritmo
-Una función no es ejecutada hasta que no sea invocada. Para invocar una función solamente es necesario llamarla por su nombre.
def mi_funcion():
print «Hola Mundo»
funcion()
-Cuando una función haga un retorno de datos, estos pueden ser asignados a una variable.
def funcion():
return «Hola Mundo»
frase = funcion()
print frase
DEFINIENDO FUNCIONES SOBRE LOS PARÁMETROS
Un parámetro es un valor que la función espera recibir cuando sea invocada; con el fin de ejecutar acciones en base al mismo. Los parámetros van separados por comas.
def mi_funcion(nombre, apellido):
# algoritmo
Existen diferentes tipos de variables:
VARIABLES LIBRES Y NO LOCALES
Si a la variable no se le asigna valor en un función, Python la considera libre y busca su valor en los niveles superiores a esa función. Si a la variable se le asigna un valor en algún nivel intermedio, la variable se considera no local y; si se le asigna en el programa principal, la variable se considera global.
- Variable libre global
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
- Variable libre no local
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
- Variable libre no definida
def subrutina():
print(a)
return
subrutina()
print(a)
VARIABLES DECLARADAS GLOBALES Y NO LOCALES
Si queremos asignar valor a una variable en una subrutina; pero queremos que Python no la considere local, debemos declararla como una función global o no local.
- Variable declarada global
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
- Variable declarada no local
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
