"Hello World!"
El primer programa al que se enfrentará el desarrollador más avanzado cuando
empieza con un nuevo lenguaje, será sin ninguna duda el famoso ¡ Hola Mundo !
Un apunte final, la sentencia print junto con el operador de formateo de cadenas (%) se comporta exactamente igual a la sentencia printf() de C.
Entrada de Usuario. raw_input()
La forma más fácil de obtener la entrada de datos de un usuario por
pantalla, es utilizando la sentencia raw_input().
Operadores
Variables
Las reglas que rigen el comportamiento de las variables en Python son muy
parecidas a las de otros lenguajes. Las variables son simples identificadores
que deben empezar siembre por un carácter alfabético, en mayúsculas o
minúsculas o el símbolo _ (guión bajo), seguidos de cualquier carácter
alfanumérico.
Hay que recalcar que Python distingue entre mayúsculas y minúsculas.
Python es un lenguaje de tipos dinámicos, lo cual significa que no hay necesidad de declarar el tipo de una variable. El tipo se definirá en el momento de la asignación de la variable.
Números
Python soporta cuatro tipos numéricos:
El tipo long es superior al archiconocido long de C, ya que en Python no tiene límite de capacidad, solamente el que le imponga la memoria virtual del sistema. Sería más parecido a los números definidos en Java con la clase BigInteger.
En cuanto al soporte de números complejos, Python es el único lenguaje que nativamente soporta este tipo de datos.
Secuencias (strings, listas y tuplas)
Las secuencias son un tipo de datos cuyos elementos están ordenados y pueden
ser accedidos vía un índice.
Todos los tipos de secuencias comparten el mismo modelo de acceso a sus elementos. Para acceder a un elemento en concreto se utiliza la siguiente nomenclatura seq[i]. Dada una variable de tipo secuencia denominada seq, accedemos al elemento que ocupa la posicion i. El esquema de numeración utilizado empieza en el 0 y finaliza en el valor que defina la longitud de la secuencia menos 1.
Varios elementos (substrings) pueden ser obtenidos a la vez utilizando el operador slice (trozo). La sintaxis para obtener un grupo de elementos es la siguiente:
La siguiente tabla muestra algunas de las funciones predefinidas que se
pueden aplicar a las secuencias.
Los diferentes tipos de secuencias se exponen a continuación.
Strings
Para Python, las cadenas (strings) son un conjunto contiguo de caracteres
encerrados entre simples o dobles comillas.
Los métodos y funciones aplicables al tipo de objeto string se encuentran definidos en el módulo string
La siguiente tabla muestra algunos de los métodos disponibles en el módulo string:
Listas y Tuplas
Python posee varios tipos de datos para agrupar de una forma fácil
diferentes valores. El tipo de dato más versátil es la lista. Una lista es una
colección de elementos separados por comas y encerrados entre paréntesis. Los
elementos de una lista no tienen porque ser del mismo tipo.
Diccionarios
El tipo de dato diccionario de Python es parecido al que se puede
encontrar en otros lenguajes bajo el nombre de Arrays Asociativos. A
diferencia de las secuencias donde los índices son números, los diccionarios
están indexados por claves. Las claves solo podrán ser de algún tipo de dato
inmutable (números y strings).
Un diccionario consiste por tanto en un conjunto de pares clave-valor, donde las claves son inmutables, mientras que los valores pueden ser de cualquier tipo.
Un diccionario se crea encerrando entre llaves ({}) una lista de pares clave-valor.
A la hora de recorrer un diccionario será importante tener una lista de sus claves para poder acceder a los valores. El método keys() aplicado a un objeto de tipo diccionario, devolverá dicha lista.
Bloques de código
Una de las primeras cosas que sorprende cuando se empieza a utilizar Python
es la forma en que este lenguaje delimita los bloques de código. No existen las
llaves ({}) ni sentencias begin-end para encerrar el código, en su lugar un
bloque de código viene delimitado por la identación.
Sentencia if
La sintaxis de la sentencia if es la siguiente:
Otra cosa que también puede sorprender es que no existe una sentencia case, pero vista la sintaxis de la sentencia if, anidando diferentes elif podemos conseguir el mismo resultado.
Bucle while
La sintaxis y funcionamiento del bucle while es similar a la de la sentencia
if:
Bucle for
La sentencia for de Python es diferente a la de otros lenguajes.
Solamente itera sobre una lista de elementos de una secuencia. En otros
lenguajes (c o Perl) se puede iterar sobre una progresion aritmetica también.
La sintaxis es la siguiente:
Definición de funciones
La palabra clave def es utilizada para la
definición de una función. Debe de ir seguida del nombre de la función y la
lista de parámetros entre paréntesis. Python no distingue entre procedimientos
y funciones. Si es una función, esta devolverá algún tipo de valor con la
sentencia return.
Módulos
Los módulos son el mecanismo que utiliza Python para organizar trozos de
código que luego puedan ser reutilizables. Los módulos pueden contener código
ejecutable, clases o funciones.
Cuando se crea un fichero fuente de Python, el nombre del módulo será el nombre del fichero pero sin la extensión .py. Una vez que el módulo ha sido creado, la forma de utilizar sus componentes es invocando la orden import nombre_módulo. Y para hacer uso de las funciones o clases definidas en el módulo una vez que este ha sido importado, se utiliza la sintaxis típica de modulo.funcion()
A continuación se presenta el programa inicial Hola Mundo! pero utilizando las funciones de salida del módulo sys.
Ficheros
El soporte de acceso a ficheros es uno de los componentes más importantes de
cualquier lenguaje. En Python existe una función pre-definida denominada open
que permite abrir un fichero.
Para leer los contenidos del fichero tenemos varios métodos. readline() leerá una línea en cada invocación del método, mientras que readlines() leerá todo el fichero generando una lista de líneas.
Errores y excepciones
Los errores de sintaxis se detectan en el proceso de compilación, pero
Python puede detectar errores durante la ejecución del programa. Cuando se
produce un error de ejecución, Python genera (raises) una excepción.
Para añadir este tipo de detección de errores, denominado manejo de excepciones, hay que encerrar nuestro código entre las clausulas try-except. El bloque que define la sentencia try será el código de nuestro programa en si. El código que viene detrás de la clausula except será el código que se ejecuta si se produjo alguna excepción. La sintaxis es la siguiente.
>>> print 'Hello World!'
Hello World!
La sentencia print se utiliza en python para mostrar la salida por la
pantalla. Aquellos que estén familiarizados con C, deben saber que funciona de
forma parecida a la sentencia printf().Un apunte final, la sentencia print junto con el operador de formateo de cadenas (%) se comporta exactamente igual a la sentencia printf() de C.
>>> print "%s es el número %d!" % ("Python", 1)
Python es el número 1!
Entrada de Usuario. raw_input()
La forma más fácil de obtener la entrada de datos de un usuario por
pantalla, es utilizando la sentencia raw_input().>>> user = raw_input('Introduce tu login: ')
Introduce tu login: root
>>> print 'Tu login es:', user
Tu login es: rootEl ejemplo anterior espera que la entrada sea una cadena, pero si queremos introducir un valor numérico y que sea tratado como tal, habrá que convertirlo previamente.
>>> num = raw_input('Introduce un número: ')
Introduce un número: 1024
>>> print 'El doble del número es: %d' % (int(num) * 2)
El doble del número es: 2048La función int() convierte la variable de tipo string en un entero.
Operadores
·
Operadores matemáticos:
+ - * / % **
·
Operadores de comparación:
< <= > >= == != <>
·
Operadores lógicos:
and or not
Variables
Las reglas que rigen el comportamiento de las variables en Python son muy
parecidas a las de otros lenguajes. Las variables son simples identificadores
que deben empezar siembre por un carácter alfabético, en mayúsculas o
minúsculas o el símbolo _ (guión bajo), seguidos de cualquier carácter
alfanumérico.Hay que recalcar que Python distingue entre mayúsculas y minúsculas.
Python es un lenguaje de tipos dinámicos, lo cual significa que no hay necesidad de declarar el tipo de una variable. El tipo se definirá en el momento de la asignación de la variable.
>>> contador = 0
>>> millas = 1000.0
>>> nombre = 'Fernando'
>>> contador = contador + 1
>>> kms = 1.609 * millas
>>> print '%f millas es lo mismo que %f km' % (millas, kms)
1000.000000 millas es lo mismo que 1609.000000 km
Números
Python soporta cuatro tipos numéricos:
1. Enteros
con signo (int).
2. Enteros
largos (long) que pueden ser representados también en octal o
hexadecimal.
3. Reales
en coma flotante (float)
4. Números
complejos (complex)
Los tipos realmente interesantes en Python por las particularidades que
comportan son el tipo long y el tipo complex.El tipo long es superior al archiconocido long de C, ya que en Python no tiene límite de capacidad, solamente el que le imponga la memoria virtual del sistema. Sería más parecido a los números definidos en Java con la clase BigInteger.
En cuanto al soporte de números complejos, Python es el único lenguaje que nativamente soporta este tipo de datos.
Secuencias (strings, listas y tuplas)
Las secuencias son un tipo de datos cuyos elementos están ordenados y pueden
ser accedidos vía un índice.Todos los tipos de secuencias comparten el mismo modelo de acceso a sus elementos. Para acceder a un elemento en concreto se utiliza la siguiente nomenclatura seq[i]. Dada una variable de tipo secuencia denominada seq, accedemos al elemento que ocupa la posicion i. El esquema de numeración utilizado empieza en el 0 y finaliza en el valor que defina la longitud de la secuencia menos 1.
Varios elementos (substrings) pueden ser obtenidos a la vez utilizando el operador slice (trozo). La sintaxis para obtener un grupo de elementos es la siguiente:
secuencia[indice_inicial : indice_final]Con esta sintaxis podemos obtener un trozo (slice) empezando en el elemento definido por el indice_inicial y terminando en el elemento anterior al definido por el indice_final.
>>> cadena='Hola Mundo!'
>>> print cadena[0:4]
HolaParece algo confuso pero la mejor forma de recordar como funciona el operador slice es pensar que los indices apuntan realmente entre los caracteres.
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1En la siguiente tabla se muestra una lista de operadores que se pueden utilizar con todos los tipos de secuencias:
secuencia[index]
|
elemento situado en el índice index de la
secuencia
|
secuencia[ind1:ind2]
|
elementos desde el índice ind1 hasta el
índice ind2
|
secuencia * n
|
la secuencia se repite n veces
|
secuencia1 + secuencia2
|
concatena las secuencias secuencia1 y
secuencia2
|
objeto in secuencia
|
comprueba si objeto es un miembro de
secuencia
|
objeto not in secuencia
|
comprueba si objeto no es un miembro de
secuencia
|
list (secuencia)
|
convierte la secuencia a un tipo lista
|
str (objeto)
|
convierte el objeto a un tipo string
|
tuple (secuencia)
|
convierte la secuencia a un tipo tupla
|
len (secuencia)
|
devuelve la longitud (numero de
elementos) de la secuencia
|
max (secuencia)
|
devuelve el elemento mas grande de la
secuencia
|
min (secuencia)
|
devuelve el elemento menor de la
secuencia
|
Strings
Para Python, las cadenas (strings) son un conjunto contiguo de caracteres
encerrados entre simples o dobles comillas.>>> cadena='Hola Mundo!'
>>> print cadena
Hola Mundo!Los strings son inmutables, no se puede alterar su valor a no ser que sean copiados a otro objeto string.
Los métodos y funciones aplicables al tipo de objeto string se encuentran definidos en el módulo string
>>> import string
>>> cadena.upper()
'HOLA MUNDO!'La línea import string permite acceder a todos los métodos y atributos disponibles para un tipo de dato string, siendo la línea cadena.upper() la forma de invocar al método upper sobre el objeto string denominado cadena. Como resultado obtenemos el string en mayúsculas.
La siguiente tabla muestra algunos de los métodos disponibles en el módulo string:
find( sub[, start[, end]])
|
devuelve el índice menor donde se
encuentra el substring sub dentro del string
|
isalnum()
|
devuelve verdadero si todos los
caracteres en el string son alfanuméricos y existe al menos uno.
|
isdigit()
|
devuelve verdadero si todos los
caracteres en el string son dígitos y existe al menos uno.
|
lower()
|
devuelve una copia del string convertido
a minúsculas.
|
split([sep [,maxsplit]])
|
devuelve una lista de elementos del
string utilizando como separador sep.
|
Listas y Tuplas
Python posee varios tipos de datos para agrupar de una forma fácil
diferentes valores. El tipo de dato más versátil es la lista. Una lista es una
colección de elementos separados por comas y encerrados entre paréntesis. Los
elementos de una lista no tienen porque ser del mismo tipo.>>> lista = [ 1,'dos',3,'cuatro']
>>> print lista
[1, 'dos', 3, 'cuatro']Como ocurría con el tipo de datos string, los índices de una lista empiezan en el 0, y pueden ser troceadas (sliced), concatenadas ...
>>> lista [0]
1
>>> lista [3]
'cuatro'
>>> lista [1:-1]
['dos', 3]
>>> lista + [5,'seis']
[1, 'dos', 3, 'cuatro', 5, 'seis']A diferencia de los strings, que por definición eran inmutables, en una lista podemos cambiar el valor de un elemento individual.
>>> lista
[1, 'dos', 3, 'cuatro']
>>> lista [2] = 'tres'
>>> lista
[1, 'dos', 'tres', 'cuatro']Es posible también crear listas anidadas (listas cuyos elementos pueden ser otras listas)
>>> lista1 = [2, 3]
>>> lista2 = [1, lista1, 4]
>>> len(lista2)
3
>>> lista2
[1, [2, 3], 4]
Diccionarios
El tipo de dato diccionario de Python es parecido al que se puede
encontrar en otros lenguajes bajo el nombre de Arrays Asociativos. A
diferencia de las secuencias donde los índices son números, los diccionarios
están indexados por claves. Las claves solo podrán ser de algún tipo de dato
inmutable (números y strings).Un diccionario consiste por tanto en un conjunto de pares clave-valor, donde las claves son inmutables, mientras que los valores pueden ser de cualquier tipo.
Un diccionario se crea encerrando entre llaves ({}) una lista de pares clave-valor.
>>> usuario = {'login': 'fferrer', 'uid': 501 }
>>> usuario
{'login': 'fferrer', 'uid': 501}
>>> usuario ['login']
'fferrer'
>>> usuario ['uid']
501Las operaciones habituales con diccionarios son la de almacenar y extraer algún valor con su correspondiente clave, pero también es posible eliminar algún elemento con la función del().
A la hora de recorrer un diccionario será importante tener una lista de sus claves para poder acceder a los valores. El método keys() aplicado a un objeto de tipo diccionario, devolverá dicha lista.
>>> usuario
{'login': 'fferrer', 'uid': 501}
>>> usuario.keys()
['login', 'uid']
>>> del usuario ['uid']
>>> usuario
{'login': 'fferrer'}En la siguiente tabla se exponen algunos de los principales métodos que se pueden usar con objetos del tipo diccionario.
dict.clear()
|
elimina todos los elementos del
diccionario dict
|
dict.get(clave,[default])
|
devuelve el valor de la clave o lo que
definamos por defecto si la clave no se encuentra en el diccionario
|
dict.has_key(clave)
|
devuelve 1 si la clave se encuentra en el
diccionario. En cualquier otro caso devuelve 0.
|
dict.items()
|
devuelve una lista de pares de tuplas
clave-valor.
|
dict.keys()
|
devuelve una lista de claves
|
dict.values()
|
devuelve la lista de valores
|
dict.update(dict2)
|
añade los pares clave-valor del
diccionario dict2 al diccionario dict
|
Bloques de código
Una de las primeras cosas que sorprende cuando se empieza a utilizar Python
es la forma en que este lenguaje delimita los bloques de código. No existen las
llaves ({}) ni sentencias begin-end para encerrar el código, en su lugar un
bloque de código viene delimitado por la identación.>>> def f1 (a):
... print a
...
>>> f1('Hola')
HolaA parte de sorprender, lo que deja claro esta alternativa es que los programas en Python son legibles por cualquiera, lo cual a la larga es muy cómodo.
Sentencia if
La sintaxis de la sentencia if es la siguiente: if expression1:
if_bloque
elif expression2:
elif_bloque
else:
else_bloqueLa expresión debe devolver un valor distinto de cero o verdadero para que se ejecute el if.
Otra cosa que también puede sorprender es que no existe una sentencia case, pero vista la sintaxis de la sentencia if, anidando diferentes elif podemos conseguir el mismo resultado.
Bucle while
La sintaxis y funcionamiento del bucle while es similar a la de la sentencia
if:while expression:
while_bloqueEl bloque while se ejecutará indefinidamente hasta que la expresión sea 0 o falso. De nuevo resaltar la identación para definir el bloque de código.
Bucle for
La sentencia for de Python es diferente a la de otros lenguajes.
Solamente itera sobre una lista de elementos de una secuencia. En otros
lenguajes (c o Perl) se puede iterar sobre una progresion aritmetica también.La sintaxis es la siguiente:
for elemento in secuencia:
bloque_forUn ejemplo concreto de utilización:
>>> for i in [1,2,3,4]:
... print i
...
1
2
3
4si queremos tener un bucle for que itere sobre una progresión aritmética, podemos utilizar la función range() que devuelve una lista de números:
>>> for i in range(1,5):
... print i
...
1
2
3
4
Definición de funciones
La palabra clave def es utilizada para la
definición de una función. Debe de ir seguida del nombre de la función y la
lista de parámetros entre paréntesis. Python no distingue entre procedimientos
y funciones. Si es una función, esta devolverá algún tipo de valor con la
sentencia return.def nombre_funcion (param1, param2 ...):
bloque_funcionLos parámetros de una función pueden tener valores por defecto, de forma que cuando se invoque a la función no tengamos que especificarlos todos. En este último caso habrá que nominar los parámetros, para saber cuales toman un valor y cuales su defecto.
>>> def tabla_mult(p1=1):
... for i in range(11):
... print i * p1
...
Módulos
Los módulos son el mecanismo que utiliza Python para organizar trozos de
código que luego puedan ser reutilizables. Los módulos pueden contener código
ejecutable, clases o funciones.Cuando se crea un fichero fuente de Python, el nombre del módulo será el nombre del fichero pero sin la extensión .py. Una vez que el módulo ha sido creado, la forma de utilizar sus componentes es invocando la orden import nombre_módulo. Y para hacer uso de las funciones o clases definidas en el módulo una vez que este ha sido importado, se utiliza la sintaxis típica de modulo.funcion()
A continuación se presenta el programa inicial Hola Mundo! pero utilizando las funciones de salida del módulo sys.
>>> import sys
>>> sys.stdout.write('Hello World!\n')
Hello World!
Ficheros
El soporte de acceso a ficheros es uno de los componentes más importantes de
cualquier lenguaje. En Python existe una función pre-definida denominada open
que permite abrir un fichero.handle = open( file_name, access_mode='r')
La variable file_name
contiene el nombre del fichero que deseamos abrir, mientras que el parámetro acces_mode
define el modo en que queremos abrir el fichero. Estos modos pueden ser r(lectura), w(escritura),
a(añadir), b(binario),
r+(lectura/escritura)Para leer los contenidos del fichero tenemos varios métodos. readline() leerá una línea en cada invocación del método, mientras que readlines() leerá todo el fichero generando una lista de líneas.
file = open(filename, 'r')
allLines = file.readlines()
file.close()
for eachLine in allLines:
print eachLine,
A continuación se presenta una tabla con los métodos más utilizados sobre
ficheros:
file.close()
|
cierra el fichero
|
file.fileno()
|
devuelve un entero representando el
descriptor de fichero
|
file.flush()
|
descarga el buffer interno al fichero
|
file.read (size=-1)
|
lee todos los bytes del fichero o los
especificados en el parámetro size
|
file.readline()
|
lee una línea del fichero incluyendo un
salto de línea \n
|
file.readlines()
|
lee todas las líneas del fichero en un
lista
|
file.seek(off, whence)
|
se mueve a una posición dentro del
fichero off bytes desde lo que marque la variable whence (0= principio de
fichero, 1=posición actual, 2=final de fichero)
|
file.write(str)
|
escribe la cadena str al fichero
|
file.writelines(list)
|
escribe la lista de cadenas al fichero
|
Errores y excepciones
Los errores de sintaxis se detectan en el proceso de compilación, pero
Python puede detectar errores durante la ejecución del programa. Cuando se
produce un error de ejecución, Python genera (raises) una excepción.Para añadir este tipo de detección de errores, denominado manejo de excepciones, hay que encerrar nuestro código entre las clausulas try-except. El bloque que define la sentencia try será el código de nuestro programa en si. El código que viene detrás de la clausula except será el código que se ejecuta si se produjo alguna excepción. La sintaxis es la siguiente.
try:
bloque_de_código
except Error:
acción_contra_el_errorVimos al principio de este capítulo como solicitar del usuario que introduzca un número y convertirlo a entero, ya que la entrada estandar siempre era un string. ¿ Pero que pasa si el usuario introduce una cadena ? Una pequeña modificación a nuestro ejemplo manejando la excepcion nos ayudará.
>>> while True:
... try:
... x = int(raw_input("Introduce un número: "))
... break
... except ValueError:
... print "Oops! No es un número válido. Intentalo de nuevo..."
...Si hubieramos ejecutado simplemente la sentencia que nos pide introducir el número y este no es correcto, esta hubiera fallado abortando el programa.
>>> x = int(raw_input("Introduce un número: "))
Introduce un número: aaaa
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: invalid literal for int(): aaaa
Por tanto se ve claramente las posibilidades que tiene el manejo de
excepciones para acotar firmemente nuestro programa.
No hay comentarios:
Publicar un comentario