You are on page 1of 70

Variables, Entrada y Salida y

Operaciones aritmticas elementales -


Ejercicios

Operaciones aritmticas
Estos ejercicios corresponden a lo explicado en las lecciones Operaciones aritmticas
elementales, Variables, Salida por pantalla y Entrada por teclado.

Se pueden consultar unas posibles soluciones.

Operaciones aritmticas - 1

Escriba un programa que pida dos nmeros y que escriba su media aritmtica.

Se recuerda que la media aritmtica de dos nmeros es la suma de ambos nmeros


dividida por 2.

Clculo de la media de dos nmeros


Escriba un nmero: 100
Escriba otro nmero: 5
La media aritmtica de 100.0 y 5.0 es 52.5

Operaciones aritmticas - 2

Escriba un programa que pida el peso (en kilogramos) y la altura (en metros) de una
persona y que calcule su ndice de masa corporal (imc).

Se recuerda que el imc se calcula con la frmula imc = peso / altura 2

Clculo del ndice de masa corporal (imc)


Cunto pesa? 78
Cunto mide en metros? 1.73
Su imc es 26.1
Un mc muy alto indica obesidad. Los valores "normales" de imc estn
entre 20 y 25,
pero esos lmites dependen de la edad, del sexo, de la constitucin
fsica, etc.

Operaciones aritmticas - 3

Si el apartado 1 le resulta demasiado difcil, resuelva primero los apartados

2 y 3 e intente de nuevo resolver el apartado 1. Si resuelve sin problemas el apartado 1,


no es necesario que haga los apartados 2 y 3.

1. Escriba un programa que pida una distancia en pies y pulgadas y que escriba esa
distancia en centmetros.

Se recuerda que un pie son doce pulgadas y una pulgada son 2,54 cm.

Convertidor de pies y pulgadas a centmetros


Escriba una cantidad de pies: 4
Escriba una cantidad de pulgadas: 9
4.0 pies y 9.0 pulgadas son 144.78 cm

2. Escriba un programa que pida una distancia en pulgadas y que escriba esa
distancia en centmetros.

Se recuerda que una pulgada son 2,54 cm.

Convertidor de pulgadas a centmetros


Escriba una cantidad de pulgadas: 9
9.0 pulgadas son 22.86 cm

3. Escriba un programa que pida una distancia en pies y que escriba esa distancia
en centmetros.

Se recuerda que un pie son doce pulgadas y una pulgada son 2,54 cm.

Convertidor de pies a centmetros


Escriba una cantidad de pies: 4
4.0 pies son121.92 cm

Operaciones aritmticas - 4
Escriba un programa que pida una temperatura en grados Celsius y que escriba esa
temperatura en grados Fahrenheit.

Se recuerda que la relacin entre grados Celsius (C) y grados Fahrenheit (F) es la
siguiente: F = 1,8 * C + 32

Convertidor de grados Celsius a grados Fahrenheit


Escriba una temperatura en grados Celsius: 35
35.0 C son 95.0 F

Operaciones aritmticas - 5

Escriba un programa que pida una temperatura en grados Fahrenheit y que escriba esa
temperatura en grados Celsius.

Se recuerda que la relacin entre grados Celsius (C) y grados Fahrenheit (F) es la
siguiente: C = (F - 32) / 1,8

Convertidor de grados Fahrenheit a grados Celsius


Escriba una temperatura en grados Fahrenheit: 451
451.0 F son 232.8 C

Operaciones aritmticas - 6

Escriba un programa que pida una cantidad de segundos y que escriba cuntos minutos
y segundos son.

Convertidor de segundos a minutos


Escriba una cantidad de segundos: 1234
1234 segundos son 20 minutos y 34 segundos
Convertidor de segundos a minutos
Escriba una cantidad de segundos: 120
120 segundos son 2 minutos y 0 segundos

Operaciones aritmticas - 7

Escriba un programa que pida una cantidad de segundos y que escriba cuntas horas,
minutos y segundos son.

Convertidor de segundos a horas y minutos


Escriba una cantidad de segundos: 12345
12345 segundos son 3 horas, 25 minutos y 45 segundos

Operaciones aritmticas - 8

Escriba un programa que pida una cantidad y que escriba cuntas gruesas, docenas y
unidades son.

Se recuerda que una gruesa son doce docenas.

Convertidor a gruesas y docenas


Escriba una cantidad (entera): 12345
12345 unidades son 85 gruesas, 8 docenas y 9 unidades
Variables

Variables

Qu es una variable

o Variables en Matemticas

o Variables en Programacin

o Variables en Python

Definir una variable

Tipos de variables

Mostrar en IDLE

Utilizar variables

Asignaciones aumentadas

Varias variables a la vez

En esta leccin se tratan aspectos generales de las variables.

Qu es una variable

Variables en Matemticas
El concepto de "variable" proviene de las Matemticas. En Matemticas, una variable es
un smbolo que forma parte de una expresin o de una frmula. Normalmente las
variables se representan mediante letras del alfabeto latino (x, y, z, n, i, j, etc.).
Dependiendo del contexto, las variables significan cosas distintas. Por ejemplo:

En el caso del lgebra, una variable representa una cantidad


desconocida que se relaciona con otras y que en algunos casos
podemos averiguar.

Consideremos por ejemplo la ecuacin:

x + 3 = 5
En este caso, la variable x representa una cantidad desconocida pero de la que se
sabe que si se le suma 3 se obtiene 5. Resolviendo la ecuacin, obtenemos
inmediatamente que la variable x estaba representando realmente el nmero 2.

En el caso del Anlisis matemtico, una variable no representa una


cantidad determinada, sino que representa todo un conjunto de
valores:

Consideremos por ejemplo la ecuacin de la recta:

y = x + 1
En este caso, la variable x no representa ningn valor concreto, sino que puede
tomar cualquier valor numrico positivo o negativo. Para cada valor de x
podemos calcular el valor correspondiente de la variable y. Si interpretamos x e
y como las coordenadas de puntos en un plano y dibujamos varios puntos,
podramos ver que todos los puntos se encuentran situados en una misma recta.

Variables en Programacin
En Programacin tambin existe el concepto de "variable", parecido pero no idntico al
concepto matemtico.

En Programacin, las variables estn asociadas a variables concretos. Adems, cada


lenguaje de programacin tiene su forma de implementar el concepto de variable, por lo
que lo que se explica a continuacin es vlido para muchos lenguajes de programacin,
aunque otros lenguajes de programacin permiten otras posibilidades.

En muchos lenguajes de programacin, una variable se puede


entender como una especie de caja en la que se puede guardar un
valor (por ejemplo, un valor numrico). Esa caja suele corresponder a
una posicin de memoria en la memoria del ordenador.

Las variables se representan tambin mediante letras o palabras


completas: x, y, a, b, nombre, apellidos, edad, etc.

Cuando en esos lenguajes de programacin escribimos la


instruccin ...

a = 2
... lo que estamos pidiendo al programa es que guarde el valor 2 en una "caja" y
que a la caja le llame a.

En esos lenguajes, el smbolo igualdad (=) hay que entenderlo como una
asignacin, no como una igualdad matemtica. Al escribir una igualdad, le
estamos pidiendo al programa que calcule lo que hay a la derecha de la igualdad
y que lo guarde en la variable que hay a la izquierda de la igualdad.

En esos lenguajes, no estara permitido escribir ...

2 = a
... porque 2 no es un nombre vlido de variable. Tampoco estara permitido
escribir ...

x + 3 = 5
... porque en el lado izquierdo no pueden aparecer operadores.

Una vez hemos guardado un valor en una variable, podemos hacer


referencia a l a lo largo del programa. Por ejemplo, el siguiente
programa ...

a = 2
b = 3
c = a + b

o guarda el valor 2 en la variable a

o guarda el valor 3 en la variable b

o coge los valores guardados en las variables a y b (2 y 3), los


suma (2+3) y el resultado (5) lo guarda en la variable c.

La informacin que se guarda en una variable puede ser de muchos


tipos:

o nmeros (enteros, decimales, imaginarios, en notacin


cientfica, con precisin arbitraria, en base decimal o en otras
bases, etc.),

o cadenas de texto (una sola letra o ms letras, del juego de


caracteres ASCII occidental o del juego de caracteres Unicode,
etc),

o conjuntos de nmeros o texto (matrices, listas, tuplas, etc.)

o estructuras ms complicadas (punteros, diccionarios, etc.)

Cada tipo de informacin se almacena de forma distinta, por lo que existen


diferentes tipos de variables para cada tipo de informacin.
Algunos lenguajes de programacin (C, C++, Java, etc) exigen que
antes de utilizar una variable se defina el tipo de informacin que se
va a guardar en esa variable. Otros lenguajes de programacin
(Python, PHP, etc.) no lo exigen y es el intrprete del lenguaje el que
decide el tipo de variable a utilizar en el momento que se guarda la
informacin. Los lenguajes que requieren definir los tipos de las
variables se denominan lenguajes tipificados y los que no se
denominan lenguajes no tipificados. Python es un lenguaje no
tipificado, aunque en Python 3.5 se ha introducido la posibilidad de
indicar los tipos de datos de los argumentos de las funciones y de los
valores devueltos.

Variables en Python
En algunos lenguajes de programacin, las variables se pueden entender como "cajas"
en las que se guardan los datos, pero en Python las variables son "etiquetas" que
permiten hacer referencia a los datos (que se guardan en unas "cajas" llamadas objetos).

Python es un lenguaje de programacin orientado a objetos y su modelo de datos


tambin est basado en objetos.

Para cada dato que aparece en un programa, Python crea un objeto que lo contiene.
Cada objeto tiene:

un identificador nico (un nmero entero, distinto para cada objeto).


El identificador permite a Python referirse al objeto sin
ambigedades.

un tipo de datos (entero, decimal, cadena de caracteres, etc.). El tipo


de datos permite saber a Python qu operaciones pueden hacerse
con el dato.

un valor (el propio dato).

As, las variables en Python no guardan los datos, sino que son simples nombres para
poder hacer referencia a esos objetos. Si escribimos la instruccin ...

a = 2
... Python:

crea el objeto "2". Ese objeto tendr un identificador nico que se


asigna en el momento de la creacin y se conserva a lo largo del
programa. En este caso, el objeto creado ser de tipo nmero entero
y guardar el valor 2.

asocia el nombre a al objeto nmero entero 2 creado.

As, al describir la instruccin anterior no habra que decir 'la variable a almacena el
nmero entero 2', sino que habra que decir 'podemos llamar a al objeto nmero entero
2'. La variable a es como una etiqueta que nos permite hacer referencia al objeto "2",
ms cmoda de recordar y utilizar que el identificador del objeto.
Por otro lado, en Python se distingue entre objetos mutables y objetos inmutables:

Los objetos inmutables son objetos que no se pueden modificar. Por


ejemplo, los nmeros, las cadenas y las tuplas son objetos inmutables

Los objetos mutables son objetos que se pueden modificar. Por


ejemplo, las listas y los diccionarios son objetos mutables.

En el caso de los objetos inmutables (como los nmeros) no hay mucha diferencia entre
considerar la variable como una caja o como una etiqueta, pero en el caso de los objetos
mutables (como las listas) pensar en las variables como cajas puede llevar a error.

Por economa del lenguaje, en estos apuntes se utilizan expresiones como "guardar un
valor en una variable" en vez de "guardar el valor en un objeto y asociar una variable al
objeto", pero el alumno debe tener presente lo que ocurre en realidad en Python.

Ms adelante en este curso, en las lecciones Variables 2 y Variables 3, se profundiza en


la idea de variable de Python.

Definir una variable

Las variables en Python se crean cuando se definen por primera vez, es decir, cuando se
les asigna un valor por primera vez. Para asignar un valor a una variable se utiliza el
operador de igualdad (=). A la izquierda de la igualdad se escribe el nombre de la
variable y a la derecha el valor que se quiere dar a la variable.

En el ejemplo siguiente se almacena el nmero decimal 2,5 en una variable de nombre x


(como se ha comentado en el apartado anterior, realmente habra que decir que se crea
la etiqueta x para hacer referencia al objeto nmero decimal 2.5). Fjese en que los
nmeros decimales se escriben con punto (.) y no con coma (,).

>>> x = 2.5
La variable se escribe siempre a la izquierda de la igualdad. Si se escribe al revs,
Python genera un mensaje de error:

>>> 2.5 = x
SyntaxError: can't assign to literal

Para que IDLE muestre el valor de una variable, basta con escribir su nombre:

>>> x = 2.5
>>> x
2.5
Si una variable no se ha definido previamente, escribir su nombre genera un mensaje de
error:

>>> x = -10
>>> y
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
y
NameError: name 'y' is not defined

Una variable puede almacenar nmeros, texto o estructuras ms complicadas (que se


vern ms adelante). Si se va a almacenar texto, el texto debe escribirse entre comillas
simples (') o dobles ("), que son equivalentes. A las variables que almacenan texto se les
suele llamar cadenas (de texto).

>>> nombre = "Pepito Conejo"


>>> nombre
'Pepito Conejo'
Si no se escriben comillas, Python supone que estamos haciendo referencia a otra
variable (que, si no est definida, genera un mensaje de error):

>>> nombre = Pepe


Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
nombre = Pepe
NameError: name 'Pepe' is not defined
>>> nombre = Pepito Conejo
SyntaxError: invalid syntax

El nombre de una variable debe empezar por una letra o por un guin bajo (_) y puede
seguir con ms letras, nmeros o guiones bajos.

>>> _x = 3.8
>>> _x
3.8
>>> x1 = 100
>>> x
1100
>>> fecha_de_nacimiento = "27 de octubre de 1997"
>>> fecha_de_nacimiento
'27 de octubre de 1997'

Los nombres de variables pueden contener cualquier carcter alfabtico (las del alfabeto
ingls, pero tambin , o vocales acentuadas) y guones bajos. Lo que no pueden
incluir es espacios en blanco

>>> fecha de nacimiento = "27 de octubre de 1997"


SyntaxError: invalid syntax
Nota: En Python 2 los nombres de variables no podan contener caracteres no ingleses.
Las palabras reservadas del lenguaje (las que IDLE escribe en naranja) tambin estn
prohibidas como nombres de variables:

>>> lambda = 3
SyntaxError: invalid syntax

Los nombres de las variables pueden contener maysculas, pero tenga en cuenta que
Python distingue entre maysculas y minsculas (en ingls se dice que Python es "case-
sensitive").

>>> nombre = "Pepito Conejo"


>>> Nombre = "Numa Nigerio"
>>> nomBre = "Fulanito Mengnez"
>>> nombre
'Pepito Conejo'
>>> Nombre
'Numa Nigerio'
>>> nomBre
'Fulanito Mengnez'

Aunque no es obligatorio, se recomienda que el nombre de la variable est relacionado


con la informacin que se almacena en ella, para que sea ms fcil entender el
programa. Si el programa es trivial o mientras se est escribiendo un programa, esto no
parece muy importante, pero si se consulta un programa escrito por otra persona o
escrito por uno mismo pero hace tiempo, resultar mucho ms fcil entender el
programa si los nombres estn bien elegidos.

Tambin se acostumbra a utilizar determinados nombres de variables en algunas


ocasiones, como se ver ms adelante, pero esto tampoco es obligatorio.

Tipos de variables

En el apartado anterior hay definiciones de algunos de los tipos de variables que hay en
Python: nmeros decimales, nmeros enteros y cadenas (una o ms letras).

Aunque se definan de forma similar, para Python no es lo mismo un nmero entero, un


nmero decimal o una cadena ya que, por ejemplo, dos nmeros se pueden multiplicar
pero dos cadenas no (curiosamente, una cadena s que se puede multiplicar por un
nmero).

Por tanto, estas tres definiciones de variables no son equivalentes:

>>> fecha = 1997


>>> fecha = 1997.0
>>> fecha = "1997"
>>> fecha = [27, "octubre", 1997]
En el primer caso la variable fecha est almacenando un nmero entero, en el segundo
fecha est almacenando un nmero decimal y en el tercero fecha est almacenando una
cadena de cuatro letras. En el cuarto, fecha est almacenando una lista (un tipo de
variable que puede contener varios elementos ordenados).

Este ejemplo demuestra tambin que se puede volver a definir una variable. Python
modifica el tipo de la variable automticamente.

Mostrar el valor de las variables en IDLE

Para que IDLE muestre el valor de una variable, basta con escribir su nombre.

>>> a = 2
>>> a
2
Tambin se puede conocer el valor de varias variables a la vez escribindolas entre
comas (IDLE las mostrar entre parntesis porque Python las considera como un
conjunto ordenado llamado tupla), como muestra el siguiente ejemplo:

>>> a = b = 2
>>> c = "pepe"
>>> a
2
>>> c, b
('pepe', 2)
Utilizar o modificar variables ya definidas

Una vez se ha definido una variable, se puede utilizar para hacer clculos o para definir
nuevas variables, como muestran los siguientes ejemplos:

>>> a = 2
>>> a + 3
5
>>> horas = 5
>>> minutos = 60 * horas
>>> segundos = 60 * minutos
>>> segundos
18000
>>> horas = 1
>>> minutos = 2
>>> segundos = 3
>>> segundos + 60 * minutos + 3600 * horas
3723
En caso de utilizar una variable no definida anteriormente, Python genera un mensaje de
error.

>>> dias = 7 * semanas


Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
dias = 7 * semanas
NameError: name 'semanas' is not defined

Se puede redefinir una variable a partir de su propio valor. Por ejemplo

>>> a = 10
>>> a = a + 5
>>> a
15
Esto es posible porque el smbolo de igualdad significa siempre asignacin. Lo que hace
Python es calcular la expresin situada a la derecha de la igualdad y despus guardar el
resultado en la variable situada a la izquiereda de la igualdad. En el ejemplo, Python
coge el valor almacenado en la variable a (10), le suma 5, y el resultado (15) lo guarda
en la misma variable a.

Es importante tener presente que las igualdades son siempre asignaciones, nunca
ecuaciones. En el ejemplo, la expresin a = a + 5 no tendra mucho sentido como
ecuacin (no tendra solucin), pero como asignacin lo que hace es aumentar en 5 el
valor de la variable a.

Es importante tambin tener presente que los nombres de las variables no tienen sentido
real para Python, son simples etiquetas para referirse al contenido.

Por ejemplo, en el siguiente ejemplo se crean dos variables y se suman, aunque en el


mundo real hay gente que opina que se pueden sumar peras y manzanas ;-):

>>> peras = 7
>>> manzanas = 22
>>> peras + manzanas
29
O el siguiente ejemplo en el que Python permite realizar cualquier operacin con las
variables distancia y tiempo, aunque no tengan sentido fsico (de hecho, slo la divisin
lo tiene, es la velocidad).

>>> distancia = 100


>>> tiempo = 4
>>> distancia + tiempo
104
>>> distancia * tiempo
400
>>> distancia / tiempo
25.0

Cuando se modifica una variable, el valor anterior se pierde y no se puede recuperar


(salvo si se realiza la operacin contraria o hay otra variable que conserva el valor
anterior).

Hay que tener cuidado al modificar una variable que se ha utilizado para definir otras
variables, porque esto puede afectar al resto de variables:

Nota: Este punto se trata con ms detalle en la leccin Variables 2.


Si se trata objetos inmutables, el resto de variables no resultan
afectadas, como muestra el siguiente ejemplo:

>>> a = 10
>>> b = a
>>> a, b
(10, 10)
>>> a = 20
>>> a, b
(20, 10)

Pero si se trata de objetos mutables y al modificar la variable se


modifica el objeto, el resto de variables s resultan afectadas, como
muestra el siguiente ejemplo:

>>> a = [10]
>>> b = a
>>> a, b
([10], [10])
>>> a[0] = 20
>>> a, b
([20], [20])
Asignaciones aumentadas

Cuando una variabe se modifica a partir de su propio valor, se puede utilizar la


denominada "asignacin aumentada", una notacin compacta que existe tambin en
otros lenguajes de programacin.

Nota:

Por ejemplo:

>>> a = 10
>>> a += 5
>>> a
15
es equivalente a:

>>> a = 10
>>> a = a + 5
>>> a
15
En general:

Asigna
cin
a += b a -= b a *= b a /= b a **= b a //= b a %= b
aumen
tada:

es a a a a a a a
equivalente = = =
a: = = = =
a a a a a
a a
* / %
+ * * /
- /
b b b
b b
b b

Nota: Las dos notaciones son completamente equivalentes en el caso de los objetos
inmutables (nmeros, cadenas, tuplas), pero en el caso de los objetos mutables (listas,
diccionarios, etc.) hay una pequea diferencia que se comenta en la leccin Variables 2

Lo que no se permite en Python son los operadores incremento (++) o decremento (--)
que s existen en otros lenguajes de programacin:

>>> a = 5
>>> a++
SyntaxError: invalid syntax
Definir y modificar varias variables a la vez

En una misma lnea se pueden definir simultneamente varias variables, con el mismo
valor o con valores distintos, como muestra el siguiente ejemplo:

>>> a = b = 99
>>> c, d, e = "Mediterrneo", 10, ["pan", "queso"]
En el primer caso las dos variables tendrn el mismo valor. En el segundo caso la
primera variable tomar el primer valor y as sucesivamente.

Si el nmero de variables no coincide con el de valores, Python genera un mensaje de


error.

>>> a, b, c = 1, 2
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a, b, c = 1, 2
ValueError: need more than 2 values to unpack
>>> a, b, c = 1, 2, 3, 4
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a, b, c = 1, 2, 3, 4
ValueError: too many values to unpack

Se pueden modificar varias variables en una sola instruccin y la modificacin se


realiza en un solo paso.

>>> a, b = 5, 10
>>> a, b
(5, 10)
>>> a, b = b, a
>>> a, b
(10, 5)
Obsrvese que si este procedimiento lo hubiramos hecho paso a paso, el resultado
hubiera sido distinto:

>>> a, b = 5, 10
>>> a, b
(5, 10)
>>> a = b
>>> b = a
>>> a, b
(10, 10)
El motivo de este resultado se entiende fcilmente mostrando los valores tras cada
operacin:

>>> a, b = 5, 10
>>> a, b
(5, 10)
>>> a = b
>>> a, b
(10, 10)
>>> b = a
>>> a, b
(10, 10)
Funciones (1)

Funciones (1)

Crear funciones

Variables en funciones

o Conflictos de nombres

o Conflictos en Python

o Variables locales

o Variables libres

o Variables global o nonlocal

En esta leccin se trata la creacin de funciones en Python y el uso de variables en las


funciones. Otros conceptos relativos a las funciones se tratan en la leccin Funciones
(2):

Definir funciones en Python

Las funciones se pueden crear en cualquier punto de un programa, escribiendo su


definicin.
La primera lnea de la definicin de una funcin contiene:

la palabra reservada def

el nombre de la funcin (la gua de estilo de Python recomienda


escribir todos los caracteres en minsculas separando las plabras por
guiones bajos)

parntesis (que pueden incluir los argumentos de la funcin, como se


explica ms adelante)

Las instrucciones que forman la funcin se escriben con sangra con respecto a la
primera lnea.

Por comodidad, se puede indicar el final de la funcin con la palabra reservada return
(ms adelante se explica el uso de esta palabra reservada), aunque no es obligatorio.

Para poder utilizar una funcin en un programa se tiene que haber definido antes. Por
ello, normalmente las definiciones de las funciones se suelen escribir al principio de los
programas

El ejemplo siguiente muestra un programa que contiene una funcin y el resultado de la


ejecucin de ese programa.

Ejemplo de funcin

def licencia():
print("Copyright 2013 Bartolom
Sintes Marco")
Este programa no hace nada
print("Licencia CC-BY-SA 4.0")
interesante.
return
Copyright 2013 Bartolom
Sintes Marco
print("Este programa no hace nada
Licencia CC-BY-SA 4.0
interesante.")
Programa terminado.
licencia()
print("Programa terminado.")

Puede ver la ejecucin paso a paso de este programa utilizando los iconos de avance y
retroceso situados abajo a la derecha.

Ejemplo de funcin - Paso 1

def licencia():
print("Copyright 2013 Bartolom Sintes Marco")
print("Licencia CC-BY-SA 4.0")
return
print("Este programa no hace nada interesante.")
licencia()
print("Programa terminado.")
La definicin de la funcin no provoca ninguna salida del programa. Las instrucciones
que forman parte de la funcin se ejecutan nicamente cuando se llama a la funcin en
el programa.

Ejemplo de funcin - Paso 2

def licencia():
print("Copyright 2013 Bartolom
Sintes Marco")
print("Licencia CC-BY-SA 4.0")
return Este programa no hace nada
interesante.
print("Este programa no hace nada
interesante.")
licencia()
print("Programa terminado.")
La primera instruccin que se ejecuta es la que est despus de la definicin de la
funcin.

Ejemplo de funcin - Paso 3

def licencia():
print("Copyright 2013 Bartolom
Sintes Marco")
print("Licencia CC-BY-SA 4.0")
return Este programa no hace nada
interesante.
print("Este programa no hace nada
interesante.")
licencia()
print("Programa terminado.")
A continuacin se encuentra la llamada a la funcin. Como tal, la llamada no produce
ninguna salida del programa, pero hace que a continuacin se ejecuten las instrucciones
incluidas en la funcin.

Ejemplo de funcin - Paso 4

def licencia(): Este programa no hace nada


print("Copyright 2013 Bartolom
Sintes Marco")
print("Licencia CC-BY-SA 4.0")
return interesante.
Copyright 2013 Bartolom
print("Este programa no hace nada Sintes Marco
interesante.")
licencia()
print("Programa terminado.")
Se ejecuta la primera instruccin de la funcin.

Ejemplo de funcin - Paso 5

def licencia():
print("Copyright 2013 Bartolom
Sintes Marco")
Este programa no hace nada
print("Licencia CC-BY-SA 4.0")
interesante.
return
Copyright 2013 Bartolom
Sintes Marco
print("Este programa no hace nada
Licencia CC-BY-SA 4.0
interesante.")
licencia()
print("Programa terminado.")
Se ejecuta la segunda instruccin de la funcin.

Ejemplo de funcin - Paso 6

def licencia():
print("Copyright 2013 Bartolom
Sintes Marco")
Este programa no hace nada
print("Licencia CC-BY-SA 4.0")
interesante.
return
Copyright 2013 Bartolom
Sintes Marco
print("Este programa no hace nada
Licencia CC-BY-SA 4.0
interesante.")
licencia()
print("Programa terminado.")
La instruccin return indica el final de la funcin y contina la ejecucin del programa
tras la llamada a la funcin.

Ejemplo de funcin - Paso 7

def licencia(): Este programa no hace nada


print("Copyright 2013 Bartolom
Sintes Marco")
print("Licencia CC-BY-SA 4.0") interesante.
return Copyright 2013 Bartolom
Sintes Marco
print("Este programa no hace nada Licencia CC-BY-SA 4.0
interesante.") Programa terminado.
licencia()
print("Programa terminado.")
Se ejecuta la ltima instruccin del programa y el programa termina.

El ejemplo siguiente muestra un programa incorrecto que intenta utilizar una funcin
antes de haberla definido.

Ejemplo de funcin incorrecta

print("Este programa no hace nada


interesante.") Este programa no hace nada
licencia() interesante.
print("Programa terminado.") Traceback (most recent call
last):
def licencia(): File "ejemplo.py", line 2, in
print("Copyright 2013 Bartolom <module>
Sintes Marco") licencia()
print("Licencia CC-BY-SA 4.0") NameError: name 'licencia' is
return not defined

Puede ver la ejecucin paso a paso de este programa utilizando los iconos de avance y
retroceso situados abajo a la derecha.

Ejemplo de funcin incorrecta - Paso 1

print("Este programa no hace nada


interesante.")
licencia()
print("Programa terminado.")
Este programa no hace nada
def licencia():
interesante.
print("Copyright 2013 Bartolom
Sintes Marco")
print("Licencia CC-BY-SA 4.0")
return

La primera instruccin escribe una frase en la pantalla.


Ejemplo de funcin incorrecta - Paso 2

print("Este programa no hace nada


interesante.") Este programa no hace nada
licencia() interesante.
print("Programa terminado.") Traceback (most recent call
last):
def licencia(): File "ejemplo.py", line 2, in
print("Copyright 2013 Bartolom <module>
Sintes Marco") licencia()
print("Licencia CC-BY-SA 4.0") NameError: name 'licencia' is
return not defined

A continuacin se encuentra la llamada a la funcin. Pero como esta funcin no se ha


definido todava, se produce un mensaje de error y se detiene la ejecucin del programa.

Variables en funciones

Conflictos de nombres de variables


Como se ha comentado antes, una de las principales ventajas de las subrutinas es que
permiten reutilizar el cdigo. Pero copiar y pegar subrutinas de un programa a otro
puede producir lo que se llama un conflicto de nombres de variables. En efecto, si la
subrutina que pegamos en un programa utiliza alguna variable auxiliar para algn
clculo intermedio y resulta que el programa ya utilizaba una variable con el mismo
nombre que esa variable auxiliar, los cambios en la variable que se hagan en la
subrutina podran afectar al resto del programa de forma imprevista.

Para resolver el problema de los conflictos de nombres, los lenguajes de programacin


limitan lo que se llama el alcance o el mbito de las variables. Es decir, que los
lenguajes de programacin permiten que una variable exista nicamente en el interior de
una subrutina y no afecte a otras variables de mismo nombre situadas fuera de esa
subrutina. Como las subrutinas pueden contener a su vez subrutinas, se suele hablar de
niveles: el nivel ms alto sera el programa principal, el siguiente nivel seran las
subrutinas incluidas en el programa principal y cada vez que hay una subrutina incluida
dentro de otra estaramos bajando un nivel.

El problema es ms complicado de lo que parece a primera vista, porque a menudo


tambin nos interesar que una subrutina pueda modificar variables que estn definidas
en otros puntos del programa. As que los lenguajes de programacin tienen que
establecer mecanismos para aislar las variables y evitar los conflictos de nombres, pero
al mismo tiempo deben permitir el acceso a las variables en los casos que as lo quiera
el programador.

Aunque cada lenguaje tiene sus particularidades, el mecanismo ms habitual se basa en


los siguientes principios:

cada variable pertenece a un mbito determinado: al programa


principal o a una subrutina.

las variables son completamente inaccesibles en los mbitos


superiores al mbito al que pertenecen

las variables pueden ser accesibles o no en mbitos inferiores al


mbito al que pertenecen (el lenguaje puede permitir al programador
elegir o no esa accesibilidad)

en cada subrutina, las variables que se utilizan pueden ser entonces:

o variables locales: las que pertenecen al mbito de la subrutina


(y que pueden ser accesibles a niveles inferiores)

o variables libres: las que pertenecen a mbitos superiores pero


son accesibles en la subrutina

Conflictos de nombres de variables en Python


Python sigue estos principios generales, pero con algunas particularidades:

En los lenguajes tipificados, como se debe declarar las variables que


se utilizan, la declaracin se aprovecha para indicar si la variable
pertenece a la subrutina o procede de un mbito superior. Pero como
Python no es un lenguaje tipificado, el mbito de pertenencia de la
variable debe deducirse del programa siguiendo unas reglas que se
detallan ms adelante (aunque Python tambin permite declarar
explcitamente el mbito en los casos en que se quiera un mbito
distinto al determinado por las reglas).

Python distingue tres tipos de variables: las variables locales y dos


tipos de variables libres (globales y no locales):

o variables locales: las que pertenecen al mbito de la subrutina


(y que pueden ser accesibles a niveles inferiores)

o variables globales: las que pertenecen al mbito del programa


principal.

o variables no locales: las que pertenecen a un mbito superior


al de la subrutina, pero que no son globales.

Si el programa contiene solamente funciones que no contienen a su vez


funciones, todas las variables libres son variables globales. Pero si el programa
contiene una funcin que a su vez contiene una funcin, las variables libres de
esas "subfunciones" pueden ser globales (si pertenecen al programa principal) o
no locales (si pertenecen a la funcin).

Para identificar explcitamente las variables globales y no locales se


utilizan las palabras reservadas global y nonlocal. Las variables
locales no necesitan identificacin. La palabra reservada nonlocal se
introdujo en Python 3 (PEP 3104).

A continuacin, se detallan las reglas y situaciones posibles, acompaadas de ejemplos.

Variables locales

Si no se han declarado como globales o no locales, las variables a las


que se asigna valor en una funcin se consideran variables
locales, es decir, slo existen en la propia funcin, incluso cuando en
el programa exista una variable con el mismo nombre, como muestra
el siguiente ejemplo:

Ejemplo de variable local 1

def subrutina():
a = 2
print(a)
return 2
5
a = 5
subrutina()
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los iconos de
avance y retroceso situados abajo a la derecha.

Ejemplo de variable local 1 - Paso 1

def subrutina():
a = 2
print(a)
return

a = 5
subrutina()
print(a)
La primera instruccin del programa asigna el valor 5 a la variable "a".

Ejemplo de variable local 1 - Paso 2


def subrutina():
a = 2
print(a)
return

a = 5
subrutina()
print(a)
A continuacin se llama a la funcin subrutina().

Ejemplo de variable local 1 - Paso 3

def subrutina():
a = 2
print(a)
return

a = 5
subrutina()
print(a)
La primera instruccin de la funcin asigna el valor 2 a la variable "a".

Ejemplo de variable local 1 - Paso 4

def subrutina():
a = 2
print(a)
return 2
a = 5
subrutina()
print(a)
La segunda instruccin escribe el valor de la variable "a", es decir, 2.

Ejemplo de variable local 1 - Paso 5

def subrutina(): 2
a = 2
print(a)
return

a = 5
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin del
programa tras la llamada a la funcin.

Ejemplo de variable local 1 - Paso 6

def subrutina():
a = 2
print(a)
return 2
5
a = 5
subrutina()
print(a)
La ltima instruccin del programa escribe de nuevo el valor de "a", pero el
valor que se escribe no es 2, sino 5, ya que la variable "a" del programa es
distinta de la variable "a" de la funcin, aunque se llamen igual.

Las variables locales slo existen en la propia funcin y no son


accesibles desde niveles superiores, como puede verse en el
siguiente ejemplo:

Ejemplo de variable local 2

def subrutina():
a = 2 2
print(a) Traceback (most recent call last):
return File "ejemplo.py", line 7, in <module>
print(a)
subrutina() NameError: name 'a' is not defined
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los iconos de
avance y retroceso situados abajo a la derecha.

Ejemplo de variable local 2 - Paso 1

def subrutina():
a = 2
print(a)
return
subrutina()
print(a)
La primera instruccin del programa llama a la funcin subrutina().

Ejemplo de variable local 2 - Paso 2

def subrutina():
a = 2
print(a)
return

subrutina()
print(a)
La primera instruccin de la funcin asigna el valor 2 a la variable "a".

Ejemplo de variable local 2 - Paso 3

def subrutina():
a = 2
print(a)
return 2

subrutina()
print(a)
La segunda instruccin escribe el valor de la variable "a", es decir, 2.

Ejemplo de variable local 2 - Paso 4

def subrutina():
a = 2
print(a)
return 2

subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin del
programa tras la llamada a la funcin.
Ejemplo de variable local 2 - Paso 5

def subrutina():
a = 2 2
print(a) Traceback (most recent call last):
return File "ejemplo.py", line 7, in <module>
print(a)
subrutina() NameError: name 'a' is not defined
print(a)
La ltima instruccin del programa da error porque la variable "a" no existe para
el programa, ya que se cre en la funcin.

Si en el interior de una funcin se asigna valor a una variable que


no se ha declarado como global o no local, esa variable es local a
todos los efectos. Por ello el siguiente programa da error:

Ejemplo de variable local 3

def subrutina():
print(a) Traceback (most recent call last):
a = 2 File "ejemplo.py", line 8, in <module>
print(a) subrutina()
return File "ejemplo.py", line 2, in subrutina
print(a)
a = 5 UnboundLocalError: local variable 'a' referenced
subrutina() before assignment
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los iconos de
avance y retroceso situados abajo a la derecha.

Ejemplo de variable local 3 - Paso 1

def subrutina():
print(a)
a = 2
print(a)
return

a = 5
subrutina()
print(a)
La primera instruccin del programa asigna el valor 5 a la variable "a".
Ejemplo de variable local 3 - Paso 2

def subrutina():
print(a)
a = 2
print(a)
return

a = 5
subrutina()
print(a)
A continuacin se llama a la funcin subrutina().

Ejemplo de variable local 3 - Paso 3

def subrutina():
print(a) Traceback (most recent call last):
a = 2 File "ejemplo.py", line 8, in <module>
print(a) subrutina()
return File "ejemplo.py", line 2, in subrutina
print(a)
a = 5 UnboundLocalError: local variable 'a' referenced
subrutina() before assignment
print(a)
La primera instruccin de la funcin produce un mensaje de error. El motivo es
que en la funcin se asigna valor a la variable "a" (concretamente en la segunda
instruccin) y por tanto Python la considera variable local. Como la primera
instruccin quiere imprimir el valor de "a", pero a esa variable todava no se le
ha dado valor en la funcin (el valor de la variable "a" del programa principal no
cuenta pues se trata de variables distintas, aunque se llamen igual), se produce el
mensaje de error.

Variables libres globales o no locales

Si a una variable no se le asigna valor en una funcin, Python la


considera libre y busca su valor en los niveles superiores de esa
funcin, empezando por el inmediatamente superior y continuando
hasta el programa principal. Si a la variable se le asigna valor en
algn nivel intermedio la variable se considera no local y si se le
asigna en el programa principal la variable se considera global, como
muestran los siguientes ejemplos:

o En el ejemplo siguiente, la variable libre "a" de la funcin


subrutina() se considera global porque obtiene su valor del
programa principal:
Ejemplo de variable libre global

def subrutina():
print(a)
return
5
5
a = 5
subrutina()
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los
iconos de avance y retroceso situados abajo a la derecha.

Ejemplo de variable libre global - Paso 1

def subrutina():
print(a)
return

a = 5
subrutina()
print(a)
La primera instruccin del programa asigna el valor 5 a la variable "a".

Ejemplo de variable libre global - Paso 2

def subrutina():
print(a)
return

a = 5
subrutina()
print(a)
A continuacin se llama a la funcin subrutina().

Ejemplo de variable libre global - Paso 3

def subrutina(): 5
print(a)
return

a = 5
subrutina()
print(a)
En la funcin subrutina(), la variable "a" es libre puesto que no se le
asigna valor. Su valor se busca en los niveles superiores, por orden. En
este caso, el nivel inmediatamente superior es el programa principal.
Como en l hay una variable que tambin se llama "a", Python coge de
ella el valor (en este caso, 5) y lo imprime. Para la funcin subrutina(), la
variable "a" es una variable global, porque su valor proviene del
programa principal.

Ejemplo de variable libre global - Paso 4

def subrutina():
print(a)
return
5
a = 5
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin
del programa tras la llamada a la funcin.

Ejemplo de variable libre global - Paso 5

def subrutina():
print(a)
return
5
5
a = 5
subrutina()
print(a)
La ltima instruccin del programa escribe de nuevo el valor de "a", que
sigue siendo 5 pues la funcin no ha modificado el valor de la variable.

o En el ejemplo siguiente, la variable libre "a" de la funcin


sub_subrutina() se considera no local porque obtiene su valor
de una funcin intermedia:

Ejemplo de variable libre no local


def subrutina():
def sub_subrutina():
print(a)
return

a = 3 3
sub_subrutina() 3
print(a) 4
return

a = 4
subrutina()
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los
iconos de avance y retroceso situados abajo a la derecha.

Ejemplo de variable libre no local - Paso 1

def subrutina():
def sub_subrutina():
print(a)
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La primera instruccin del programa asigna el valor 4 a la variable "a".

Ejemplo de variable libre no local - Paso 2

def subrutina():
def sub_subrutina():
print(a)
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
A continuacin se llama a la funcin subrutina().

Ejemplo de variable libre no local - Paso 3

def subrutina():
def sub_subrutina():
print(a)
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La primera instruccin de la funcin subrutina() asigna el valor 3 a la
variable "a", as que esta variable "a" ser una variable local.

Ejemplo de variable libre no local - Paso 4

def subrutina():
def sub_subrutina():
print(a)
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
A continuacin se llama a la funcin sub_subrutina().

Ejemplo de variable libre no local - Paso 5

def subrutina(): 3
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
En la funcin sub_subrutina(), la variable "a" es libre puesto que no se le
asigna valor. Su valor se busca en los niveles superiores, por orden. En
este caso, el nivel inmediatamente superior es la funcin subrutina().
Como en ella hay una variable local que tambin se llama "a", Python
coge de ella el valor (en este caso, 3) y lo imprime. Para la funcin
sub_subrutina(), la variable "a" es una variable no local, porque su valor
proviene de una funcin intermedia.

Ejemplo de variable libre no local - Paso 6

def subrutina():
def sub_subrutina():
print(a)
return

a = 3
sub_subrutina() 3
print(a)
return

a = 4
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin
del programa tras la llamada a la funcin.

Ejemplo de variable libre no local - Paso 7

def subrutina(): 3
def sub_subrutina(): 3
print(a)
return

a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
La tercera instruccin de la funcin subrutina() escribe el valor de la
variable local "a", es decir, 3.

Ejemplo de variable libre no local - Paso 8

def subrutina():
def sub_subrutina():
print(a)
return

a = 3
3
sub_subrutina()
3
print(a)
return

a = 4
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin
del programa tras la llamada a la funcin.

Ejemplo de variable libre no local - Paso 9

def subrutina():
def sub_subrutina():
print(a)
return

a = 3 3
sub_subrutina() 3
print(a) 4
return

a = 4
subrutina()
print(a)
La ltima instruccin del programa escribe el valor de la variable global
"a", 4.
o Si a una variable que Python considera libre (porque no se le
asigna valor en la funcin) tampoco se le asigna valor en
niveles superiores, Python dar un mensaje de error, como
muestra el programa siguiente:

Ejemplo de variable libre no definida

def subrutina(): Traceback (most recent call last):


print(a) File "ejemplo.py", line 5, in <module>
return subrutina()
File "ejemplo.py", line 2, in subrutina
subrutina() print(a)
print(a) NameError: global name 'a' is not defined
Puede ver la ejecucin paso a paso de este programa utilizando los
iconos de avance y retroceso situados abajo a la derecha.

Ejemplo de variable libre no definida - Paso 1

def subrutina():
print(a)
return

subrutina()
print(a)
La primera instruccin del programa llama a la funcin subrutina().

Ejemplo de variable libre no definida - Paso 2

def subrutina(): Traceback (most recent call last):


print(a) File "ejemplo.py", line 5, in <module>
return subrutina()
File "ejemplo.py", line 2, in subrutina
subrutina() print(a)
print(a) NameError: global name 'a' is not defined
Como la funcin no asigna valor a la variable "a", Python la considera
variable libre y busca su valor en niveles superiores, en este caso el
programa principal. Pero como en el programa principal tampoco se
asigna valor a la variable "a", se produce un error.

Nota: El programa hubiera dado error de todas formas en la ltima


instruccin del programa, que tambin imprima el valor de la variable
"a" no definida.
Variables declaradas global o nonlocal

Si queremos asignar valor a una variable en una subrutina, pero no


queremos que Python la considere local, debemos declararla en la
funcin como global o nonlocal, como muestran los ejemplos
siguientes:

o En el ejemplo siguiente la variable se declara como global,


para que su valor sea el del programa principal:

Ejemplo de variable declarada global

def subrutina():
global a
print(a)
a = 1
5
return
1
a = 5
subrutina()
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los
iconos de avance y retroceso situados abajo a la derecha.

Ejemplo de variable declarada global - Paso 1

def subrutina():
global a
print(a)
a = 1
return

a = 5
subrutina()
print(a)
La primera instruccin del programa asigna el valor 5 a la variable "a".

Ejemplo de variable declarada global- Paso 2

def subrutina():
global a
print(a)
a = 1
return

a = 5
subrutina()
print(a)
A continuacin se llama a la funcin subrutina().

Ejemplo de variable declarada global - Paso 3

def subrutina():
global a
print(a)
a = 1
return

a = 5
subrutina()
print(a)
Al declarar global la variable "a", la variable "a" de la funcin y la
variable "a" del programa principal son la misma variable.

Ejemplo de variable declarada global - Paso 4

def subrutina():
global a
print(a)
a = 1
return 5

a = 5
subrutina()
print(a)
La segunda instruccin de la funcin escribe el valor de la variable "a",
es decir, 5, puesto que se trata de la misma variable "a" del programa
principal.

Ejemplo de variable declarada global - Paso 5

def subrutina(): 5
global a
print(a)
a = 1
return

a = 5
subrutina()
print(a)
La siguiente instruccin cambia el valor de la variable "a" a 1.

Ejemplo de variable declarada global - Paso 6

def subrutina():
global a
print(a)
a = 1
return 5

a = 5
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin
del programa tras la llamada a la funcin.

Ejemplo de variable declarada global - Paso 7

def subrutina():
global a
print(a)
a = 1
5
return
1
a = 5
subrutina()
print(a)
La ltima instruccin del programa escribe el valor de la variable global
"a", que es ahora 1, puesto que la funcin ha modificado el valor de la
variable.

o En el ejemplo siguiente la variable se declara como nonlocal,


para que su valor sea el de la funcin intermedia:

Ejemplo de variable declarada nonlocal


def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
3
a = 3 1
sub_subrutina() 4
print(a)
return

a = 4
subrutina()
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los
iconos de avance y retroceso situados abajo a la derecha.

Ejemplo de variable declarada nonlocal - Paso 1

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La primera instruccin del programa asigna el valor 4 a la variable "a".

Ejemplo de variable declarada nonlocal - Paso 2

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
A continuacin se llama a la funcin subrutina().

Ejemplo de variable declarada nonlocal - Paso 3

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La primera instruccin de la funcin subrutina() asigna el valor 3 a la
variable "a", as que esta variable "a" ser una variable local.

Ejemplo de variable declarada nonlocal - Paso 4

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
A continuacin se llama a la funcin sub_subrutina().
Ejemplo de variable declarada nonlocal - Paso 5

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
Al declarar nonlocal la variable "a", Python busca en los niveles
superiores, por orden, una variable que tambin se llame "a", que en este
caso se encuentra en la funcin subrutina(). Python toma el valor de esa
variable, es decir, 3.

Ejemplo de variable declarada nonlocal - Paso 6

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La primera instruccin de la funcin sub_subrutina() escribe el valor de
la variable no local "a", es decir, 3.

Ejemplo de variable declarada nonlocal - Paso 7


def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La segunda instruccin de la funcin sub_subrutina() cambia el valor de
la variable "a" a 1.

Ejemplo de variable declarada nonlocal - Paso 8

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

a = 3 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin
del programa tras la llamada a la funcin.

Ejemplo de variable declarada nonlocal - Paso 9

def subrutina(): 3
def sub_subrutina(): 1
nonlocal a
print(a)
a = 1
return

a = 3
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La tercera instruccin de la funcin subrutina() escribe el valor de la
variable local "a", es decir, 1.

Ejemplo de variable declarada nonlocal - Paso 10

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
3
a = 3
1
sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
La instruccin return indica el final de la funcin y contina la ejecucin
del programa tras la llamada a la funcin.

Ejemplo de variable declarada nonlocal - Paso 11

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
3
a = 3 1
sub_subrutina() 4
print(a)
return

a = 4
subrutina()
print(a)
La ltima instruccin del programa escribe el valor de la variable global
"a", que sigue siendo 4, puesto que ninguna funcin la ha modificado.

o Si a una variable declarada global o nonlocal en una funcin no


se le asigna valor en el nivel superior correspondiente, Python
dar un error de sintaxis, como muestra el programa siguiente:

Ejemplo de variable declarada nonlocal no definida

def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return

sub_subrutina()
print(a)
return

a = 4
subrutina()
print(a)
Puede ver la ejecucin paso a paso de este programa utilizando los
iconos de avance y retroceso situados abajo a la derecha.

Elementos de un programa de Python

Elementos

Elementos de un programa

Lneas y espacios

keywords

Literales

Operadores

Delimitadores

Identificadores

o built-in functions
o Funciones

Por completar con ejemplos

En esta leccin se tratan los elementos que componen un programa de Python

Elementos de un programa

Un programa de Python es un fichero de texto (normalmente guardado con el juego de


caracteres UTF-8) que contiene expresiones y sentencias del lenguaje Python. Esas
expresiones y sentencias se consiguen combinando los elementos bsicos del lenguaje.

El lenguaje Python est formado por elementos (tokens) de diferentes tipos:

palabras reservadas (keywords)

funciones integradas (built-in functions)

literales

operadores

delimitadores

identificadores

En esta leccin se comentan los principales elementos del lenguaje. En la


documentacin de Python se puede consultar una descripcin mucho ms detallada y
completa.

Para que un programa se pueda ejecutar, el programa debe ser sintcticamente correcto,
es decir, utilizar los elementos del lenguaje Python respetando su reglas de
"ensamblaje". Esas reglas se comentan en otras lecciones de este curso. Obviamente,
que un programa se pueda ejecutar no significa que un programa vaya a realizar la tarea
deseada, ni que lo vaya a hacer en todos los casos.

Lneas y espacios

Un programa de Python est formado por lneas de texto.

radio = 5
area = 3.14159242 * radio ** 2
print(area)
Se recomienda que cada lnea contenga una nica instruccin, aunque puede haber
varias instrucciones en una lnea, separadas por un punto y coma (;).
radio = 5; area = 3.14159242 * radio ** 2
print(area)

Por motivos de legibilidad, se recomienda que las lneas no superen los 79 caracteres. Si
una instruccin supera esa longitud, se puede dividir en varias lneas usando el caracter
contrabarra (\):

radio = 5
area = 3.14159265358979323846 \
* radio ** 2
print(area)

Los elementos del lenguaje se separan por espacios en blanco (normalmente, uno),
aunque en algunos casos no se escriben espacios:

entre los nombres de las funciones y el parntesis

antes de una coma (,)

entre los delimitadores y su contenido (parntesis, llaves, corchetes o


comillas)

Los espacios no son significativos, es decir, da lo mismo un espacio que varios, excepto
al principio de una lnea.

Los espacios al principio de una lnea (el sangrado) indican un nivel de agrupamiento.
El sangrado inicial es una de las caractersticas de Python que lo distinguen de otros
lenguajes, que utilizan un caracter para delimitar agrupamientos (en muchos lenguajes
se utilizan las llaves { }). Por ello, una lnea no puede contener espacios iniciales, a
menos que forme parte de un bloque de instrucciones o de una instruccin dividida en
varias lneas.

Al ejecutar en IDLE una instruccin con espacios iniciales, se mostrara un aviso de


error de sintaxis:

>>> x = 42
SyntaxError: unexpected indent
Al ejecutar un programa, se mostrara una ventana con el mensaje de error de sintaxis:

x = 42
El carcter almohadilla (#) marca el inicio de un comentario. Python ignora el resto de
la lnea (desde la almohadilla hasta el final de la lnea).

area = 3.14159242 * radio ** 2 # Frmula del rea de un crculo


Palabras reservadas (keywords)

Las palabras reservadas de Python son las que forman el ncleo del lenguaje Python.
Son las siguientes:

False class finally is return


None continue for lambda try
True def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise
Estas palabras no pueden utilizarse para nombrar otros elementos (variables, funciones,
etc.), aunque pueden aparecer en cadenas de texto.

Literales

Los literales son los datos simples que Python es capaz de manejar:

nmeros: valores lgicos, enteros, decimales y complejos, en


notacin decimal, octal o hexadecimal

cadenas de texto

Operadores

Los operadores son los caracteres que definen operaciones matemticas (lgicas y
aritmticas). Son los siguientes:

+ - * ** / // % @
<< >> & | ^ ~
< > <= >= == !=
Delimitadores

Los delimitadores son los caracteres que permiten delimitar, separar o representar
expresiones. Son los siguientes:

' " # \
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=
Identificadores

Los identificadores son las palabras que se utilizan para nombrar elementos creados por
el usuario u otros usuarios. Esos elementos pueden ser variables u objetos que
almacenan informacin, funciones que agrupan instrucciones, clases que combinan
ambos, mdulos que agrupan los elementos anteriores, etc.

Los identificadores estn formados por letras (maysculas y minsculas), nmeros y el


carcter guin bajo (_). Pueden ser caracteres Unicode, aunque normalmente se
recomienda utilizar caracteres ASCII para evitar complicaciones a usuarios de oros
pases que utilizan juegos de caracteres diferentes.

El primer caracter del identificador debe ser una letra.

Funciones integradas (built-in functions)


Una funcin es un bloque de instrucciones agrupadas, que permiten reutilizar partes de
un programa.

Python incluye las siguientes funciones de forma predeterminada (es decir, estas
funciones siempre estn disponibles):

abs() dict() help() min() setattr()


all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()
delattr() hash() memoryview() set()
Estas palabras pueden utilizarse para nombrar variables, pero entonces las funciones ya
no estn disponibles en el programa. Si se eliminan las variables, las funciones vuelven
a estar disponibles.

Funciones adicionales
Un programa puede definir nuevas funciones o redefinir las funciones integradas. Los
nombres de las funciones no pueden coincidir con las palabras reservadas.

Un programa puede tambin importar nuevas funciones que se encuentran definidas en


otros ficheros llamados mdulos.

Python incluye una biblioteca de mdulos (llamada Biblioteca estndar) especializados


en todo tipo de tareas.

Adems de la biblioteca estndar, existen miles de mdulos escritos por diferentes


programadores y accesibles en Internet. El principal repositorio de mdulos es el Python
Package Index (ndice de paquetes de Python), ms conocido por PyPI.
Versiones de Python

Guido van Rossum ide el lenguaje Python a finales de los 80 y comenz a


implementarlo en diciembre de 1989. En febrero de 1991 public la primera versin
pblica, la versin 0.9.0. La versin 1.0 se public en enero de 1994, la versin 2.0 se
public en octubre de 2000 y la versin 3.0 se public en diciembre de 2008. El
desarrollo de Python lo lleva a cabo un colectivo de programadores que trabaja bajo el
paraguas de la fundacin Python Software Foundation, pero Guido van Rossum sigue
dirigiendo el desarrollo de Python.

Las versiones de Python se identifican por tres nmeros X.Y.Z, en la que:

X corresponde a las grandes versiones de Python (1, 2 y 3),


incompatibles entre s:

Los principales cambios introducidos en Python 2 fueron las cadenas Unicode,


las comprensiones de listas, las asignaciones aumentadas, los nuevos mtodos de
cadenas y el recolector de basura para referencias cclicas.

Los principales cambios introducidos en Python 3 fueron la separacin entre


cadenas Unicode y datos binarios, la funcin print(), cambios en la sintaxis,
tipos de datos, comparadores, etc.

Por el momento, no hay planes de crear una nueva versin Python 4,


incompatible con las anteriores.

Y corresponde a versiones importantes en las que se introducen


novedades en el lenguaje pero manteniendo la compatibilidad (salvo
excepciones).

Desde hace unos aos, las versiones X.Y se publican aproximadamente cada ao
y medio y se mantienen durante cinco aos, excepto la versin 2.7, que se
mantendr por lo menos durante diez aos, hasta 2020.

Z corresponde a versiones menores que se publican durante el


perodo de mantenimiento, en las que slo se corrigen errores y fallos
de seguridad.

Normalmente, se publica una ltima versin X.Y.Z justo antes de que una
versin X.Y deje de mantenerse. Algunas empresas comerciales ofrecen el
mantenimiento de versiones antiguas una vez acabado el mantenimiento oficial.

La imagen siguiente muestra la fecha de publicacin de las versiones importantes de


Python, en cada una de las tres grandes versiones, Python 1, Python 2 y Python 3. Las
versiones indicadas con punto rojo se consideran obsoletas, las versiones indicadas con
punto negro siguen publicando actualizaciones, las versiones indicadas con punto
blanco corresponden a versiones futuras con fechas ya previstas.
Python 1 Python 2 Python 3 94 94 95 95 96 96 97 97 98 98 99 99 00 00 01 01 02 02 03
03 04 04 05 05 06 06 07 07 08 08 09 09 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17
17 18 18 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3 3.4 3.5
3.6 3.7

La imagen siguiente muestra la fecha de publicacin de las ltimas versiones menores


de Python. Las versiones indicadas en rojo se consideran obsoletas, las versiones
indicadas con punto blanco corresponden a versiones futuras con fechas ya previstas.

Python 2010 2010 2011 2011 2012 2012 2013 2013 2014 2014 2015 2015 2016 2016
2017 2017 2018 2018 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.7.10 2.7.11
2.7.12 2.7.13 2.7 3.2 3.3 3.4 3.5 3.6 3.7 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.1 3.3.2
3.3.3 3.3.4 3.3.5 3.3.6 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.5.1 3.5.2 3.5.3 3.6.1

Es posible tener instalados en el ordenador varias versiones de Python pero, salvo que
sea necesario para la ejecucin de programas o paquetes incompatibles, se recomienda
instalar siempre la ltima versin disponible.

Referencias

Principales novedades en Python:

o Python 2.X: 2.0 - 2.1 - 2.2 - 2.3 - 2.4 - 2.5 - 2.6 - 2.7

o Python 3.X: 3.0 - 3.1 - 3.2 - 3.3 - 3.4 - 3.5 - 3.6 - 3.7

Sobre los cambios en Python 3 (Nick Coghlan)

Planificacin de la publicacin de cada versin (release schedules):

o Python 2.X: 2.6 - 2.7 - 2.8

o Python 3.X: 3.0 - 3.1 - 3.2 - 3.3 - 3.4 - 3.5 - 3.6 - 3.7

Transicin de Python 2 a Python 3

La transicin de Python 2 a Python 3 ha resultado mucho ms costosa de lo esperado,


debido a que Python 3 introdujo muchos cambios en el lenguaje y obligaba a reescribir
prcticamente todos los programas (aunque se han creado herramientas para ayudar en
ese proceso).

La intencin inicial era haber terminado Python 2 con la versin 2.6, pero en 2010 se
tuvo que publicar la versin 2.7, incorporando parte de las novedades de Python 3.
Adems, el perodo de mantenimiento de Python 2.7 se tuvo que duplicar de los cinco
aos habituales a diez, hasta 2020.
Un primer obstculo en el proceso de transicin de Python 2 a Python 3 ha sido la
propia disponibilidad de Python 3 en las distribuciones GNU/Linux. Muchas
herramientas internas de las distribuciones estn escritas en Python y su conversin de
Python 2 a Python 3 no era fcil, por lo que las distribuciones no podan pasar
simplemente de incluir una versin a otra.

Hasta 2015, Python 2 sigui siendo la versin predeterminada de Python en la mayora


de distribuciones GNU/Linux (aunque se poda instalar Python 3 sin problemas en
ellas). Felizmente, esta situacin est en vas de solucin:

Fedora hizo la transicin a Python 3.4 en Fedora 23 (publicada en


noviembre de 2015) [wiki de Fedora]. Eso quiere decir que
seguramente RedHat Linux 8 (sin fecha de publicacin prevista) usar
Python 3.

Ubuntu hizo la transicin a Python 3.5 en Ubuntu 16.04 (publicada en


abril de 2016) [wiki de Ubuntu.

En abril de 2015 Debian empez a discutir los planes de transicin a


Python 3. En principio, se plantea resolver las dependencias de
Python 2 en Debian 9 (que se espera publicar en 2017) y pasar
completamente a Python 3 en Debian 10 (que se espera publicar en
2019) [artculo de Linux Week News del 29/04/15].

La mayora de componentes de OpenStack, una importante


plataforma de virtualizacin, son compatibles con Python 3, pero no
parece que Python 3 vaya a ser la versin predeterminada por lo
menos hasta la versin Pike, que seguramente se publicar en
octubre de 2017

Aunque las nuevas versiones de las distribuciones ya incluyan Python 3, las


distribuciones que incluyen Python 2 seguirn instaladas en servidores durante bastantes
aos. Ese es el motivo por el que se vayan a seguir publicando actualizaciones de
seguridad de Python 2.7 hasta 2020, como mnimo.

Un segundo obstculo en el proceso de transicin de Python 2 a Python 3 (y que ha


afectado adems a todos los sistemas operativos) ha sido la disponibilidad de las
bibliotecas.

Python cuenta con un gran nmero de bibliotecas, cuyo repositorio oficial es PyPI
(Python Package Index), que facilitan la programacin de aplicaciones complejas.
Cuando se public Python 3, la inmensa mayora de bibliotecas slo estaban disponibles
para Python 2 y, lgicamente, si un programa necesitaba alguna biblioteca que slo
estaba disponible para Python 2, el programa no se poda pasar tampoco a Python 3.
Poco a poco, la mayora de bibliotecas de Python han ido publicando versiones para
Python 3, por lo que este problema tambin est en vas de solucin.

En marzo de 2016, un estudio de empleados de Microsoft sealaba que por aquel


entonces algo ms del 50% de las bibliotecas estaban disponibles tanto para Python 2
como para Python 3, un 25% estaban disponibles slo para Python 2 y un poco menos
del 25% estaban disponibles slo para Python 3, pero la tendencia pareca indicar que a
mediados de 2016 Python 3 pasara a ser la versin ms popular.

Varias pginas web hacen un seguimiento de la compatibilidad con Python 3 de las


bibliotecas ms populares

Python 3 Wall of Superpowers y Python 3 Readiness muestran cmo


la inmensa mayora de las bibliotecas ms populares ya estn
disponibles en Python 3

la distribucin GNU/Linux Fedora lleva el seguimiento de los paquetes


de Python que forman parte de la distribucin: paquetes y evolucin.

Versiones de Python

Guido van Rossum ide el lenguaje Python a finales de los 80 y comenz a


implementarlo en diciembre de 1989. En febrero de 1991 public la primera versin
pblica, la versin 0.9.0. La versin 1.0 se public en enero de 1994, la versin 2.0 se
public en octubre de 2000 y la versin 3.0 se public en diciembre de 2008. El
desarrollo de Python lo lleva a cabo un colectivo de programadores que trabaja bajo el
paraguas de la fundacin Python Software Foundation, pero Guido van Rossum sigue
dirigiendo el desarrollo de Python.

Las versiones de Python se identifican por tres nmeros X.Y.Z, en la que:

X corresponde a las grandes versiones de Python (1, 2 y 3),


incompatibles entre s:

Los principales cambios introducidos en Python 2 fueron las cadenas Unicode,


las comprensiones de listas, las asignaciones aumentadas, los nuevos mtodos de
cadenas y el recolector de basura para referencias cclicas.

Los principales cambios introducidos en Python 3 fueron la separacin entre


cadenas Unicode y datos binarios, la funcin print(), cambios en la sintaxis,
tipos de datos, comparadores, etc.

Por el momento, no hay planes de crear una nueva versin Python 4,


incompatible con las anteriores.
Y corresponde a versiones importantes en las que se introducen
novedades en el lenguaje pero manteniendo la compatibilidad (salvo
excepciones).

Desde hace unos aos, las versiones X.Y se publican aproximadamente cada ao
y medio y se mantienen durante cinco aos, excepto la versin 2.7, que se
mantendr por lo menos durante diez aos, hasta 2020.

Z corresponde a versiones menores que se publican durante el


perodo de mantenimiento, en las que slo se corrigen errores y fallos
de seguridad.

Normalmente, se publica una ltima versin X.Y.Z justo antes de que una
versin X.Y deje de mantenerse. Algunas empresas comerciales ofrecen el
mantenimiento de versiones antiguas una vez acabado el mantenimiento oficial.

La imagen siguiente muestra la fecha de publicacin de las versiones importantes de


Python, en cada una de las tres grandes versiones, Python 1, Python 2 y Python 3. Las
versiones indicadas con punto rojo se consideran obsoletas, las versiones indicadas con
punto negro siguen publicando actualizaciones, las versiones indicadas con punto
blanco corresponden a versiones futuras con fechas ya previstas.

Python 1 Python 2 Python 3 94 94 95 95 96 96 97 97 98 98 99 99 00 00 01 01 02 02 03


03 04 04 05 05 06 06 07 07 08 08 09 09 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17
17 18 18 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3 3.4 3.5
3.6 3.7

La imagen siguiente muestra la fecha de publicacin de las ltimas versiones menores


de Python. Las versiones indicadas en rojo se consideran obsoletas, las versiones
indicadas con punto blanco corresponden a versiones futuras con fechas ya previstas.

Python 2010 2010 2011 2011 2012 2012 2013 2013 2014 2014 2015 2015 2016 2016
2017 2017 2018 2018 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.7.10 2.7.11
2.7.12 2.7.13 2.7 3.2 3.3 3.4 3.5 3.6 3.7 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.1 3.3.2
3.3.3 3.3.4 3.3.5 3.3.6 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.5.1 3.5.2 3.5.3 3.6.1

Es posible tener instalados en el ordenador varias versiones de Python pero, salvo que
sea necesario para la ejecucin de programas o paquetes incompatibles, se recomienda
instalar siempre la ltima versin disponible.

Referencias

Principales novedades en Python:

o Python 2.X: 2.0 - 2.1 - 2.2 - 2.3 - 2.4 - 2.5 - 2.6 - 2.7

o Python 3.X: 3.0 - 3.1 - 3.2 - 3.3 - 3.4 - 3.5 - 3.6 - 3.7
Sobre los cambios en Python 3 (Nick Coghlan)

Planificacin de la publicacin de cada versin (release schedules):

o Python 2.X: 2.6 - 2.7 - 2.8

o Python 3.X: 3.0 - 3.1 - 3.2 - 3.3 - 3.4 - 3.5 - 3.6 - 3.7

Transicin de Python 2 a Python 3

La transicin de Python 2 a Python 3 ha resultado mucho ms costosa de lo esperado,


debido a que Python 3 introdujo muchos cambios en el lenguaje y obligaba a reescribir
prcticamente todos los programas (aunque se han creado herramientas para ayudar en
ese proceso).

La intencin inicial era haber terminado Python 2 con la versin 2.6, pero en 2010 se
tuvo que publicar la versin 2.7, incorporando parte de las novedades de Python 3.
Adems, el perodo de mantenimiento de Python 2.7 se tuvo que duplicar de los cinco
aos habituales a diez, hasta 2020.

Un primer obstculo en el proceso de transicin de Python 2 a Python 3 ha sido la


propia disponibilidad de Python 3 en las distribuciones GNU/Linux. Muchas
herramientas internas de las distribuciones estn escritas en Python y su conversin de
Python 2 a Python 3 no era fcil, por lo que las distribuciones no podan pasar
simplemente de incluir una versin a otra.

Hasta 2015, Python 2 sigui siendo la versin predeterminada de Python en la mayora


de distribuciones GNU/Linux (aunque se poda instalar Python 3 sin problemas en
ellas). Felizmente, esta situacin est en vas de solucin:

Fedora hizo la transicin a Python 3.4 en Fedora 23 (publicada en


noviembre de 2015) [wiki de Fedora]. Eso quiere decir que
seguramente RedHat Linux 8 (sin fecha de publicacin prevista) usar
Python 3.

Ubuntu hizo la transicin a Python 3.5 en Ubuntu 16.04 (publicada en


abril de 2016) [wiki de Ubuntu.

En abril de 2015 Debian empez a discutir los planes de transicin a


Python 3. En principio, se plantea resolver las dependencias de
Python 2 en Debian 9 (que se espera publicar en 2017) y pasar
completamente a Python 3 en Debian 10 (que se espera publicar en
2019) [artculo de Linux Week News del 29/04/15].

La mayora de componentes de OpenStack, una importante


plataforma de virtualizacin, son compatibles con Python 3, pero no
parece que Python 3 vaya a ser la versin predeterminada por lo
menos hasta la versin Pike, que seguramente se publicar en
octubre de 2017

Aunque las nuevas versiones de las distribuciones ya incluyan Python 3, las


distribuciones que incluyen Python 2 seguirn instaladas en servidores durante bastantes
aos. Ese es el motivo por el que se vayan a seguir publicando actualizaciones de
seguridad de Python 2.7 hasta 2020, como mnimo.

Un segundo obstculo en el proceso de transicin de Python 2 a Python 3 (y que ha


afectado adems a todos los sistemas operativos) ha sido la disponibilidad de las
bibliotecas.

Python cuenta con un gran nmero de bibliotecas, cuyo repositorio oficial es PyPI
(Python Package Index), que facilitan la programacin de aplicaciones complejas.
Cuando se public Python 3, la inmensa mayora de bibliotecas slo estaban disponibles
para Python 2 y, lgicamente, si un programa necesitaba alguna biblioteca que slo
estaba disponible para Python 2, el programa no se poda pasar tampoco a Python 3.

Poco a poco, la mayora de bibliotecas de Python han ido publicando versiones para
Python 3, por lo que este problema tambin est en vas de solucin.

En marzo de 2016, un estudio de empleados de Microsoft sealaba que por aquel


entonces algo ms del 50% de las bibliotecas estaban disponibles tanto para Python 2
como para Python 3, un 25% estaban disponibles slo para Python 2 y un poco menos
del 25% estaban disponibles slo para Python 3, pero la tendencia pareca indicar que a
mediados de 2016 Python 3 pasara a ser la versin ms popular.

Varias pginas web hacen un seguimiento de la compatibilidad con Python 3 de las


bibliotecas ms populares

Python 3 Wall of Superpowers y Python 3 Readiness muestran cmo


la inmensa mayora de las bibliotecas ms populares ya estn
disponibles en Python 3

la distribucin GNU/Linux Fedora lleva el seguimiento de los paquetes


de Python que forman parte de la distribucin: paquetes y evolucin.

IDLE, el entorno de desarrollo de Python


IDLE
Python e IDLE

Colores en los programas

Archivos de programas

Ejecutar en terminal

Python e IDLE
Python es el nombre del lenguaje de programacin.

IDLE (Integrated DeveLopment Environment for Python) es el entorno de desarrollo


que permite editar y ejecutar los programas. Se pueden crear y ejecutar programas en
Python sin utilizar IDLE, pero IDLE hace mucho ms fciles esas tareas (de hecho,
IDLE en ingls significa holgazn).

Al abrir IDLE con el acceso directo Inicio > Todos los programas > Python 3.6 > IDLE
(Python 3.6), se abrir la ventana principal de IDLE, como muestra la imagen siguiente.

Esta ventana indica la versin de Python instalada.

Nota: La ventana de la imagen tiene un tamao de 80x20 caracteres en vez del tamao
predeterminado de 80x40 caracteres
En la ventana de IDLE se pueden escribir rdenes de Python despus del smbolo de
peticin >>> (en ingls, prompt). Al pulsar Intro, IDLE ejecutar la orden
inmediatamente. Si la orden produce algn resultado, ste se mostrar en color azul y
sin el smbolo de peticin. Por ejemplo, se puede comprobar que Python sabe sumar dos
ms dos:

>>> 2 + 2
4
>>>

Al terminar de ejecutar la orden, IDLE vuelve a mostrar el smbolo de peticin, en


espera de una nueva orden.

Se pueden recuperar rdenes anteriores mediante los atajos de teclado:

Alt+p para ver la instruccin anterior (supongo que p es por previous, en


espaol, anterior)

Alt+n para ver la instruccin siguiente (supongo que n es por next, en espaol,
siguiente)

Colores en los programas


Al escribir rdenes en IDLE, algunas palabras cambian de color. Los colores ayudan a
identificar los distintos tipos de elementos y a localizar errores:

Las palabras reservadas de Python (las que forman parte del lenguaje) se
muestran en color naranja.

Las cadenas de texto se muestran en verde.

Los resultados de las rdenes se escriben en azul.

Los mensajes de error se muestran en rojo.

Las funciones se muestran en prpura.

Las cadenas de texto deben delimitarse con comillas dobles (") o con comillas simples
('):

>>> print('hola')
hola
>>> print("hola")
hola
>>>
Si la orden contiene algn error, Python escribe un mensaje de error en ingls que indica
dnde se ha producido el error y por qu.

>>> print(hola)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in ?
print hola
NameError: name 'hola' is not defined
>>>

En este ejemplo, el error se debe a que hola no est entre comillas y Python entiende
que se hace referencia a una variable que se llama hola; al no estar definida previamente
ninguna variable que se llame as, se produce un error.

Los argumentos de las funciones deben ir rodeados de parntesis (en los ejemplos
anteriores, la funcin es la funcin print() y el argumento de la funcin, es decir, lo que
se le da a la funcin para que haga su trabajo, es la cadena de texto). Si no se escriben
los parntesis, Python indica que se ha cometido un error de sintaxis:

>>> print "hola"


SyntaxError: invalid syntax
>>>

Conservar los programas en archivos


El inconveniente de la ventana principal de IDLE es que para repetir una orden hay que
volver a escribirla. Si simplemente queremos practicar rdenes sencillas la ventana
principal de IDLE es suficiente, pero si se trata de un programa ms complejo es
conveniente guardar el programa en un archivo para poderlo recuperar posteriormente.
Como adems normalmente los programas no salen bien a la primera, eso permite
corregir los errores sin tener que volver a escribir todo.

Guardar los programas en archivos - Paso 1


Para crear un archivo de programa con IDLE, abra una nueva ventana mediante el men
File > New File (o el atajo de teclado Ctrl+N).

Guardar los programas en archivos - Paso 2


Al elegir esta opcin se abrir una nueva ventana como la de la imagen.

Guardar los programas en archivos - Paso 3


En esta ventana ya no aparece el simbolo de peticin porque es simplemente un editor
de texto (que tambin colorea las palabras, si el archivo se ha guardado con la extensin
.py). Escriba por ejemplo el programa:

print("Hola, mundo")
print("Adios, mundo")

Habr observado que en esta ventana, cuando se pulsa Intro, no se ejecuta la orden, sino
que simplemente se pasa a la lnea siguiente.

Guardar los programas en archivos - Paso 4


Para poder ejecutar el programa, primero es necesario guardar el programa en el disco
duro del ordenador. Elija la opcin del men File > Save o File > Save As ... para
guardar el archivo (tambin puede utilizar el atajo de teclado Ctrl+S).

Guardar los programas en archivos - Paso 5


La primera vez que guarde un programa se abrir la ventana de dilogo estndar de
Windows. Una vez elegida la carpeta y el nombre del archivo, no olvide escribir
tambin la extensin .py. Si no escribe la extensin, IDLE no colorea las palabras. Una
vez guardado el programa, el nombre del archivo aparece en la barra de ttulo de la
ventana.

Guardar los programas en archivos - Paso 6


Una vez haya guardado el programa, puede ejecutarlo mediante la opcin del men Run
> Run module (tambin puede utilizar la tecla F5).

Guardar los programas en archivos - Paso 7


La salida del programa se mostrar en la ventana principal de IDLE.

El procedimiento de trabajo es siempre el mismo: escriba o modifique el programa en la


ventana secundaria, gurdelo, ejectelo y, en su caso, la salida del programa se mostrar
en la ventana principal. Si quiere, puede tener varias ventanas secundarias abiertas
simultneamente.

Al escribir un programa tenga cuidado en no escribir espacios en blanco innecesarios al


principio de una lnea, porque Python mostrar un mensaje de error. Ms adelante, en la
leccin de if.. elif... else.., aprender cundo se deben poner espacios en blanco y qu
significan en Python, pero en las primeras lecciones (Operaciones aritmticas
elementales, Variables, Salida por pantalla y Entrada por teclado) no debe poner
espacios en blanco al principio de la lnea.

Ejecutar programas en ventana de MS-DOS


Se puede ejecutar un programa abriendo una ventana de MS-DOS (Inicio > Ejecutar >
cmd), cambiando a la carpeta donde est el programa y escribiendo su nombre (con la
extensin).

Por otro lado, como el instalador de Python registra la extensin .py, se puede ejecutar
un programa de Python en Windows haciendo doble clic sobre l en el explorador de
Windows. El problema es que los programas se ejecutan en una ventana de MS-DOS
que se abre al iniciarse el programa y que se cierra cuando el programa termina. Para
evitar que los programas terminen, se puede aadir una ltima lnea con la funcin
input() que, como se explica en la leccin sobre la entrada por teclado, se queda
esperando a que pulsemos la tecla Intro. Al pulsar Intro, la ventana se cerrar.

El inconveniente de esta solucin es que cuando se ejecuta el programa en IDLE, el


programa tambin se queda esperando que pulsemos Intro y es fcil olvidar hacerlo. Si
no pulsamos Intro, al ejecutar un segundo programa, IDLE sigue esperando que
pulsemos Intro para el primer programa y da la impresin de no funcionar
correctamente. En general, antes de ejecutar un programa, hay que comprobar que en la
ventana principal de IDLE el cursor est visible junto al prompt >>>.

Curso de Python X: Lectura/Escritura de archivos

Una de las principales maneras de almacenar y controlar datos es mediante la lectura y


escritura de archivos. Para lograr esto, Python tiene una instruccin que activa estas
tareas por medio de objetos que representan a los archivos. Les explicar todo a partir
de ejemplos y al final les mostrar la sintaxis.

###Lectura:

archivo.txt:

Python con Ntrrg

Este es un curso bsico para aprender


a programar con Python sin sufrir en
el intento :B
Para crear el objeto que haga referencia al archivo basta con escribir la siguiente
instruccin:

archivo = open("archivo.txt")
Si queremos obtener el contenido del archivo, existen tres mtodos:

archivo.read(): Lee todo el contenido desde la posicin del puntero,


este ltimo es quien recorre caracter a caracter el archivo y nos
permite obtener su contenido.
archivo = open("archivo.txt") # El puntero inicia en el byte 0 (P)

print(archivo.read()) # Lleva el puntero hasta el final


Resultado:

Python con Ntrrg

Este es un curso bsico para aprender


a programar con Python sin sufrir en
el intento :B
Tambin es posible indicar cuantos caracteres (bytes) queremos leer despus del
puntero:

archivo = open("archivo.txt")

print(archivo.read(16)) # Leer 16 bytes


Resultado

Python con Ntrrg


Como el puntero se mueve durante la lectura, si quisiramos leer varias veces el
contenido tendramos que regresarlo y para esto se utiliza el mtodo .seek():

archivo = open("archivo.txt")

print(archivo.read(16))

archivo.seek(0) # Mueve el puntero al byte 0

print(archivo.read())
Resultado:

Python con Ntrrg


Python con Ntrrg

Este es un curso bsico para aprender


a programar con Python sin sufrir en
el intento :B
Para saber en que byte se encuentra el puntero se usa el mtodo archivo.tell().

archivo.readline(): Lee desde la ubicacin del puntero hasta el


siguiente final de lnea.

archivo = open("archivo.txt")

print(archivo.read()) # Lee hasta el final de la lnea e incluye el


salto
Resultado:

Python con Ntrrg


# Lnea vaca
Si se indica una cantidad de bytes, al igual que en el mtodo anterior, se leern los bytes
especificados despus del puntero, pero con la diferencia de que si se encuentra con un
salto de lnea finalizar la lectura:
archivo = open("archivo.txt")

print(archivo.read(30))
Resultado:

Python con Ntrrg


# Lnea vaca

archivo.readlines(): Lee todas las lneas como elementos de una


lista desde la posicin del puntero.

archivo = open("archivo.txt")

print(archivo.readlines())
Resultado:

['Python con Ntrrg\n', '\n', 'Este es un curso bsico para


aprender\n', 'a programar con Python sin sufrir en \n', 'el intento
:B']

###Escritura:

Se usa la misma instruccin, pero con un parmetro diferente:

archivo = open("archivo.txt", "w") # Escritura


archivo = open("archivo.txt", "a") # Adicin
Existen dos tipos de escrituras: la escritura tradicional que borra el contenido existente
en el archivo especificado, para agregar los nuevos datos y la adicin, que mantiene el
contenido y agrega al final todo lo que se intente escribir. A diferencia de la lectura,
poseen dos mtodos:

archivo.write(<expresin>): Escribe la expresin en donde est el


puntero y en caso de que sea adicin siempre escribir al final del
contenido sin importar donde est el puntero.

archivo = open("archivo.txt", "w")

archivo.write("Hola")
archivo.txt:

Hola

archivo = open("archivo.txt", "w")

archivo.write("HOLA")

archivo.seek(1)

archivo.write("ola") # Escribe donde est el puntero


archivo.txt:
Hola

archivo = open("archivo.txt", "a")

archivo.write(" esto es Python")

archivo.seek(0)

archivo.write(" con Ntrrg") # Escribe al final, sin importar el


puntero
archivo.txt:

Hola esto es Python con Ntrrg

archivo.writelines(<datoCompuesto>): Permite escribir los elementos


de un dato compuesto en el que todos son cadenas, no agrega los
saltos de lnea automticamente y al igual que el mtodo anterior, su
comportamiento depender del tipo de escritura.

archivo = open("archivo.txt", "w")

tupla = ("Hola :B\n", "Soy Bata..")

archivo.writelines(tupla)
archivo.txt:

Hola :B
Soy Bata..

###Combinacin de mtodos:

open("<archivo>", "r+"): Lectura y escritura. Mantiene el contenido del


archivo. Posiciona el puntero en el byte 0 y mientras no se use el mtodo .seek()
escribir al final del contenido. Genera un error si no existe el archivo.

open("<archivo>", "w+"): Escritura y lectura. Se comporta igual que la


escritura tradicional, la nica diferencia es que permite usar mtodos de lectura.

open("<archivo>", "a+"): Adicin y lectura. Posiciona el puntero en el


ltimo byte. Se comporta igual que la adicin, la nica diferencia es que permite
usar mtodos de lectura.

###Cierre:

Despus de haber realizado todas las actividades que se esperaban con el archivo, debe
cerrarse y para eso existe el mtodo .close(), luego de esto ya no podr realizarse
ninguna actividad sobre el archivo con el objeto a menos que vuelva a definirse.
archivo = open("archivo.txt")

print(archivo.read())

archivo.seek(0)
archivo.close()

print(archivo.read())
Resultado:

Hola :B
Soy Bata..
Traceback (most recent call last):
File "script.py", line 8, in <module>
print(archivo.read())
ValueError: I/O operation on closed file.
Tambin existe la estructura with que se encarga de cerrar el archivo despus que
finalicen las sentencias dentro de el:

with open("archivo.txt") as archivo:


print(archivo.read())

print(archivo.read())
Resultado:

Hola :B
Soy Bata..
Traceback (most recent call last):
File "script.py", line 4, in <module>
print(archivo.read())
ValueError: I/O operation on closed file.

##Referencias

Ral Gonzles Duque. Python para todos

Eugenia Bahit. Curso: Python para Principiantes

Python Software Foundation. Overview - Python 2.7.10 documentation.


https://docs.python.org/2.7/

Python Software Foundation. Overview - Python 3.5.0 documentation.


https://docs.python.org/3.5/

creamostuweb https://www.blogger.com/profile/05907170252728070066.
Programacion en python. http://pycol.blogspot.com/

Bartolom Sintes Marco. Introduccin a la programacin con Python.


http://www.mclibre.org/consultar/python/index.html

Javier Montero. El Club del Autodidacta. http://elclubdelautodidacta.es/wp/


Ral Gonzlez Duque. Documentancin en Python.
http://mundogeek.net/archivos/2008/07/07/documentacion-en-python/

stack exchange inc. Stack Overflow. http://stackoverflow.com/

You might also like