Está en la página 1de 12

Universidad Central de Venezuela

Facultad de Ciencias
Escuela de Computacin
Algoritmos y Programacin
Laboratorio 1. Introduccin al Lenguaje de Programacin Python
ndice de contenido
1 Introduccin............................................................................................................................................1
2 Caractersticas de Python........................................................................................................................1
3 Utilizacin del intrprete de Python .......................................................................................................2
3.1 Pase de Parmetros .........................................................................................................................3
3.2 Modo interactivo ............................................................................................................................3
4 Python como calculadora .......................................................................................................................3
4.1 Nmeros ..........................................................................................................................................4
4.2 Cadenas (Strings)............................................................................................................................5
4.3 Listas ..............................................................................................................................................9
5 Estructuras de Control Bsicas..............................................................................................................10
5.1 Construcciones if ..........................................................................................................................10
5.2 Sentencias for ................................................................................................................................10
6 Ejercicios Sugeridos..............................................................................................................................11
7 Referencias............................................................................................................................................12
1 Introduccin
Python es un lenguaje de alto nivel de propsito general que puede ser extendido e incluso incrustado
en otras aplicaciones (como lenguaje de macros). Esto hace de l una eleccin inteligente para la gran
mayora de problemas, solucionables con un lenguaje de programacin.
Es ideal para proyectos que requieren un desarrollo rpido. Soporta mltiples paradigmas de
programacin, as que tiene la cualidad de ser flexible.
2 Caractersticas de Python
Python es un lenguaje interpretado, lo que ahorra un tiempo considerable en el desarrollo del programa,
pues no es necesario compilar ni enlazar. El intrprete se puede utilizar de modo interactivo, lo que
facilita experimentar con caractersticas del lenguaje, escribir programas desechables o probar
funciones durante el desarrollo del programa de la base hacia arriba. Tambin es una calculadora muy
til.
Python permite escribir programas muy compactos y legibles. Los programas escritos en Python son
normalmente mucho ms cortos que sus equivalentes en C o C++, por varios motivos:
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia.
El agrupamiento de sentencias se realiza mediante sangrado (indentacin) en lugar de begin/end
o llaves.
No es necesario declarar los argumentos ni las variables.
Por cierto, el nombre del lenguaje viene del espectculo de la BBC ``Monty
Python's Flying Circus'' (el circo ambulante de Monty Python) y no tiene nada que
ver con reptiles. Hacer referencias a escenas de Monty Python no slo se permite:
es recomendable!
3 Utilizacin del intrprete de Python
En Unix, el intrprete de Python se suele instalar como /usr/local/bin/python en aquellas mquinas
donde est disponible. En Windows, se instala en el directorio Archivos de programa. Poner este
directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el intrprete de rdenes la
orden:
python
Como la eleccin del directorio donde reside el intrprete es una opcin de instalacin, es posible que
se halle en otros lugares. Consulta con tu guru de Python local o tu administrador de sistemas (por
ejemplo, /usr/local/python es una alternativa frecuente).
Teclear un carcter fin de fichero (Control-D en Unix, Control-Z en DOS o Windows) en el intrprete
causa la salida del intrprete con un estado cero. Si eso no funciona, se puede salir del intrprete
tecleando las siguientes rdenes: "import sys; sys.exit()".
Las opciones de edicin de la lnea de rdenes no son muy destacables. En Unix, es posible que quien
instalara el intrprete en tu sistema incluyera soporte para la biblioteca de GNU `readline', que permite
una edicin de lnea ms elaborada y la recuperacin de rdenes anteriores. El modo ms rpido de ver
si hay soporte de edicin de lneas es teclear Control- en cuanto aparece el intrprete. Si pita, la edicin
de lneas est disponible. Si no sale nada o sale , no est disponible la edicin de lneas y slo se
puede utilizar la tecla de borrado para borrar el ltimo carcter tecleado.
El intrprete funciona como el intrprete de rdenes de Unix: cuando se lo llama con la entrada
estndar conectada a un dispositivo tty, lee y ejecuta las rdenes interactivamente; cuando se le da un
nombre de fichero como argumento o se le da un fichero como entrada estndar, lee y ejecuta un guin
desde ese fichero.
Otro modo de arrancar el intrprete es "python -c orden !argumento" ...", que ejecuta las sentencias de
orden, de forma anloga a la opcin -c de la lnea de rdenes. Como las sentencias de Python suelen
contener espacios u otros caracteres que la lnea de rdenes considera especiales, lo mejor es encerrar
orden entre dobles comillas por completo.
Hay mdulos de Python que son tiles como programas independientes. Se los puede llamar mediante
"python -m m#dulo !arg" ...", que ejecuta el fichero de cdigo fuente de module como si se hubiera dado
el nombre completo en la lnea de rdenes.
Observa que hay una diferencia entre "python archivo$ y $python % archivo". En el caso de la
redireccin, las solicitudes de entrada del programa, tales como llamadas a input() y ra&'input(), se
satisfacen desde archivo. Como este archivo ya se ha ledo hasta el final antes de empezar la ejecucin
del programa, el programa se encuentra el fin de archivo inmediatamente. En el caso del nombre de
archivo como argumento, las solicitudes de entrada son satisfechas desde lo que est conectado a la
entrada estndar (esto suele ser lo deseado).
Cuando se utiliza un archivo de guin, a veces es til ejecutar el guin y entrar en modo interactivo
inmediatamente despus. Esto se consigue pasando -i como argumento, antes del nombre del guin
(esto no funciona si el guin se lee desde la entrada estndar, por la misma razn indicada en el prrafo
anterior).
3.1 Pase de Parmetros
El intrprete pasa el nombre del guin y los argumentos, si los conoce, mediante la variable sys.argv,
que es una lista de cadenas. Su longitud es al menos uno (cuando no hay guin y no hay argumentos,
sys.argv!(" es una cadena vaca). Cuando se usa -m mdulo, se le da a sys.argv!(" el nombre completo
del mdulo adecuado. Cuando el guion es )-) (es decir, la entrada estndar), sys.argv!(" vale )-).
Cuando se utiliza -c orden, sys.argv!(" vale )-c). Las opciones tras -c orden o -m mdulo no las utiliza
el intrprete Python, sino que quedan en sys.argv para uso de la orden o del mdulo.
3.2 Modo interactivo
Cuando se leen rdenes desde una tty, se dice que el intrprete est en modo interactivo. En este modo,
espera a la siguiente orden con el indicador principal, que suele se tres signos `mayor' ("***"). Para las
lneas adicionales, se utiliza el indicador secundario, por omisin tres puntos ("...").
El intrprete muestra un mensaje de bienvenida con su nmero de versin e informacin de derechos de
copia, antes de mostrar el primer indicador:
python
ython +.,.-b- (.+/ 0eb -1 +222/ ((3(-3(4) !5CC -.1.+" on sunos,
Copyright +22+-+22, 6tichting 7athematisch Centrum/ Amsterdam
***
Las lneas de continuacin son necesarias al introducir construcciones milti-lnea. Por ejemplo, echa un
vistazo a esta sentencia i8:
*** la'tierra'es'plana 9 +
*** i8 la'tierra'es'plana3
... print $:Cuidado/ ;ue te caes<$
...
:Cuidado/ ;ue te caes<
4 Python como calculadora
Vamos a probar algunas rdenes simples de Python. Arranca el intrprete y espera a que aparezca el
indicador principal, "***" (no debera tardar mucho).
4.1 Nmeros
El intrprete funciona como una simple calculadora: T tecleas una expresin y l muestra el resultado.
La sintaxis de las expresiones es bastante intuitiva: Los operadores =, -, > y / funcionan como en otros
lenguajes (p. ej. Pascal o C). Se puede usar parntesis para agrupar operaciones. Por ejemplo:
*** -=-
?
*** . @sto es un comentario
... -=-
?
*** -=- . un comentario Aunto al c#digo
?
*** (,(-,>4)/?
,
*** . Ba divisi#n entera redondea hacia abaAo3
... C/D
-
*** C/-D
-D
Se usa el signo de igualdad "9" para asignar un valor a una variable. Tras la asignacin, no se presenta
nada antes de presentar el siguiente indicador:
*** ancho 9 -(
*** alto 9 ,>2
*** ancho > alto
2((
Se puede asignar un valor simultneamente a varias variables:
*** x 9 y 9 E 9 ( . oner a cero )x)/ )y) y )E)
*** x
(
*** y
(
*** E
(
La coma flotante funciona de la manera esperada. Los operadores con tipos mixtos convierten el
operando entero a coma flotante:
*** D > D.C, / +.,
C.,
*** C.( / -
D.,
Tambin funcionan de la manera esperada los nmeros complejos: Los nmeros imaginarios se
escriben con el sufijo "A" o "F". Los nmeros complejos con una parte real distinta de cero se escriben
"(real=imagA)", y se pueden crear con la funcin "complex(real/ imag)".
*** +A > +F
(-+=(A)
*** +A > complex((/+)
(-+=(A)
*** D=+A>D
(D=DA)
*** (D=+A)>D
(2=DA)
*** (+=-A)/(+=+A)
(+.,=(.,A)
Los nmeros complejos siempre se representan como dos nmeros de coma flotante, la parte real y la
imaginaria. Para extraer una de las partes de un nmero complejo z, usa E.real o E.imag.
*** a9+.,=(.,A
*** a.real
+.,
*** a.imag
(.,
Las funciones de conversin a coma flotante y a entero (8loat()/ int() y long()) no funcionan con
nmeros complejos, pues no hay un modo nico y correcto de convertir un complejo a real. Usa abs(E)
para sacar su mdulo (como flotante) o E.real para sacar su parte real.
*** a9D.(=?.(A
*** 8loat(a)
GracebacH (most recent call last)3
0ile $%stdin*$/ line +/ in I
Gype@rror3 can)t convert complex to 8loat; use e.g. abs(E)
*** a.real
D.(
*** a.imag
?.(
*** abs(a) . s;rt(a.real>>- = a.imag>>-)
,.(
***
En modo interactivo, la ltima expresin impresa se asigna a la variable '. Esto significa que, cuando se
usa Python como calculadora, se facilita continuar los clculos, por ejemplo:
*** iva 9 +-., / +((
*** precio 9 +((.,(
*** precio > iva
+-.,4-,
*** precio = '
++D.(4-,
*** round('/ -)
++D.(4
***
Slo debe leer esta variable. No le asignes un valor explcitamente, ya que crearas una variable local
del mismo nombre y enmascararas la variable interna que proporciona la funcionalidad especial.
4.2 Cadenas (Strings)
Adems de los nmeros, Python tambin sabe manipular cadenas, que se pueden expresar de diversas
maneras. Se pueden encerrar entre comillas simples o dobles:
*** )8iambre huevos)
)8iambre huevos)
*** )BJ)Kospitalet)
$B)Kospitalet$
*** $B)Kospitalet$
$B)Kospitalet$
*** )$6L/$ diAo.)
)$6L/$ diAo.)
*** $J$6L/J$ diAo.$
)$6L/$ diAo.)
*** )$@n BJ)Kospitalet/$ diAo.)
)$@n BJ)Kospitalet/$ diAo.)
Las cadenas pueden ocupar varias lneas de diferentes maneras. Se puede impedir que el final de lnea
fsica se interprete como final de lnea lgica usando una barra invertida al final de cada lnea parcial:
hola 9 $@sto es un texto bastante largo ;ue contieneJnJ
varias lLneas de texto/ como si 8uera C.JnJ
Mbserva ;ue el espacio en blanco al principio de la lLnea esJ
signi8icativo.$
print hola
observa que los saltos de lnea se han de incrustar en la cadena con Jn, pues el salto de lnea fsico se
desecha. El ejemplo mostrara lo siguiente:
@sto es un texto bastante largo ;ue contiene
varias lLneas de texto/ como si 8uera C.
Mbserva ;ue el espacio en blanco al principio de la lLnea es signi8icativo.
Sin embargo, si hacemos de la cadena una cadena ``en bruto'', las secuencias Jn no se convierten en
saltos de lnea, sino que se incluyen tanto la barra invertida y el carcter de salto de lnea del cdigo
fuente en la cadena como datos. As, el ejemplo:

hola 9 r$Nsta es una cadena bastante larga ;ue contieneJnJ
varias lLneas de texto de manera parecida a como se harLa en C.$
print hola
mostrara:

Nsta es una cadena bastante larga ;ue contieneJnJ
varias lLneas de texto de manera parecida a como se harLa en C.
O se pueden encerrar las cadenas entre comillas triples emparejadas: $$$ o ))). No es necesario poner
barra invertida en los avances de lnea cuando se utilizan comillas triples; se incluyen en la cadena.
print $$$
Oso3 cosilla !MCPMQ@6"
-h 7ostrar este mensaAe de uso
-K Qombre6ervidor Qombre del servidor al ;ue conectarse
$$$
presenta:
Oso3 cosilla !MCPMQ@6"
-h 7ostrar este mensaAe de uso
-K Qombre6ervidor Qombre del servidor al ;ue conectarse
El intrprete muestra los resultados de las operaciones con cadenas como se escriben a la entrada: Entre
comillas y con las comillas y otros caracteres raros marcados por barras invertidas, para mostrar el
valor exacto. La cadena se encierra entre comillas dobles si contiene una comilla simple y no contiene
comillas dobles, si no, se encierra entre comillas simples (se puede utilizar print para escribir cadenas
sin comillas ni secuencias de escape).
Se puede concatenar cadenas (pegarlas) con el operador = y repetirlas con >:
*** palabra 9 )Ayuda) = )Z)
*** palabra
)AyudaZ)
*** )%) = palabra>, = )*)
)%AyudaZAyudaZAyudaZAyudaZAyudaZ*)
Dos literales juntos se concatenan automticamente. La primera lnea de arriba se podra haber escrito
"palabra 9 )Ayuda) )Z)". Esto slo funciona con literales, no con expresiones de cadena arbitrarias.
*** import string
*** )cad) )ena) . %- @sto vale
)cadena)
*** )cad).strip() = )ena) . %- @sto vale
)cadena)
*** )cad).strip() )ena) . %- @sto no vale
0ile $%stdin*$/ line +/ in I
string.strip()cad)) )ena)
R
6yntax@rror3 invalid syntax
Se puede indexar una cadena. Como en C, el primer carcter de una cadena tiene el ndice 0. No hay un
tipo carcter diferente; un carcter es una cadena de longitud uno. Como en Icon, las subcadenas se
especifican mediante la notacin de corte: dos ndices separados por dos puntos.
*** palabra!?"
)a)
*** palabra!(3-"
)Ay)
*** palabra!-3?"
)ud)
Los ndices de corte tienen valores por omisin muy prcticos; si se omite el primer ndice se supone
cero y si se omite el segundo se supone el tamao de la cadena sometida al corte.
*** palabra!3-" . Bos primeros dos caracteres
)Ay)
*** palabra!-3" . Godos menos los primeros dos caracteres
)udaZ)
He aqu un comportamiento til en las operaciones de corte: s!3i" = s!i3" equivale a s.
*** palabra!3-" = palabra!-3"
)AyudaZ)
*** palabra!3D" = palabra!D3"
)AyudaZ)
A diferencia de las cadenas en C, las cadenas de Python no se pueden cambiar. Si se intenta asignar a
una posicion indexada dentro de la cadena se produce un error:
*** palabra!(" 9 )x)
GracebacH (most recent call last)3
0ile $%stdin*$/ line +/ in I
Gype@rror3 obAect doesn)t support item assignment
*** palabra!3+" 9 )Choo8)
GracebacH (most recent call last)3
0ile $%stdin*$/ line +/ in I
Gype@rror3 obAect doesn)t support slice assignment
Sin embargo crear una nueva cadena con el contenido combinado es fcil y eficaz:
*** )x) = palabra!+3"
)xyudaZ)
*** )Choo8) = &ord!?"
)Choo8Z)
Los ndices degenerados se tratan con elegancia: un ndice demasiado grande se reemplaza por el
tamao de la cadena, un ndice superior menor que el inferior devuelve una cadena vaca.
*** palabra!+3+(("
)yudaZ)
*** palabra!+(3"
))
*** palabra!-3+"
))
Los ndices pueden ser negativos, para hacer que la cuenta comience por el final. Por ejemplo:
*** palabra!-+" . @l Sltimo carTcter
)Z)
*** palabra!--" . @l penSltimo carTcter
)a)
*** palabra!--3" . Bos dos Sltimos caracteres
)aZ)
*** palabra!3--" . Godos menos los dos Sltimos
)Ayud)
Pero date cuenta de que -0 es 0, as que no cuenta desde el final!
*** palabra!-(" . (por;ue -( es igual a ()
)A)
Los ndices de corte negativos fuera de rango se truncan, pero no ocurre as con los ndices simples (los
que no son de corte):
*** palabra!-+((3"
)AyudaZ)
*** palabra!-+(" . error
GracebacH (most recent call last)3
0ile $%stdin*$/ line +/ in I
Pndex@rror3 string index out o8 range
El mejor modo de recordar cmo funcionan los ndices es pensar que apuntan al espacio entre los
caracteres, estando el borde izquierdo del primer carcter numerado 0. El borde derecho del ltimo
carcter de una cadena de n caracteres tiene el ndice n, por ejemplo:
+---+---+---+---+---+---+
| A | y | u | d | a | Z |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
La primera fila de nmeros da la posicin de los ndices 0..5 de la cadena; la segunda da los ndices
negativos correspondientes. El corte desde i hasta j consta de todos los caracteres entre los bordes
etiquetados i y j, respectivamente.
Para los ndices no negativos, la longitud del corte es la diferencia entre los ndices, si los dos estn
entre lmites. Por ejemplo, la longitud de palabra!+3D" es 2.
La funcin interna len() devuelve la longitud de una cadena:
*** s 9 )supercali8ragilisticoexpialidoso)
*** len(s)
D-
4.3 Listas
Python utiliza varios tipos de datos compuestos, que se utilizan para agrupar otros valores. El ms
verstil es la lista, que se puede escribir como una lista de valores (elementos) separada por comas
entre corchetes. Los elementos de una lista no tienen que ser todos del mismo tipo.
*** a 9 !)8iambre)/ )huevos)/ +((/ +-D?"
*** a
!)8iambre)/ )huevos)/ +((/ +-D?"
Como los ndices de las cadenas, los ndices de una lista empiezan en cero. Las listas tambin se
pueden cortar, concatenar, etc.:
*** a!("
)8iambre)
*** a!D"
+-D?
*** a!--"
+((
*** a!+3-+"
!)huevos)/ +(("
*** a!3-" = !)panceta)/ ->-"
!)8iambre)/ )huevos)/ )panceta)/ ?"
*** D>a!3D" = !):Key<)"
!)8iambre)/ )huevos)/ +((/ )8iambre)/ )huevos)/ +((/ )8iambre)/ )huevos)/ +((/ ):Key<)"
A diferencia de las cadenas, que son inmutables, es posible cambiar los elementos de una lista:
*** a
!)8iambre)/ )huevos)/ +((/ +-D?"
*** a!-" 9 a!-" = -D
*** a
!)8iambre)/ )huevos)/ +-D/ +-D?"
Se puede asignar a un corte, lo que puede hasta cambiar el tamao de la lista:
*** . UeemplaEar elementos3
... a!(3-" 9 !+/ +-"
*** a
!+/ +-/ +-D/ +-D?"
*** . Vuitar elementos3
... a!(3-" 9 !"
*** a
!+-D/ +-D?"
*** . Pnsertar cosas3
... a!+3+" 9 !)puaA)/ )xyEEy)"
*** a
!+-D/ )puaA)/ )xyEEy)/ +-D?"
*** a!3(" 9 a . Pnsertarse (una copia) al principio de ella misma
*** a
!+-D/ )puaA)/ )xyEEy)/ +-D?/ +-D/ )puaA)/ )xyEEy)/ +-D?"
La funcin interna len() se aplica tambin a las listas:
*** len(a)
1
Es posible anidar listas (crear listas que contienen otras listas), por ejemplo:
*** ; 9 !-/ D"
*** p 9 !+/ ;/ ?"
*** len(p)
D
*** p!+"
!-/ D"
*** p!+"!("
-
*** p!+".append()xtra)) . Consulte la secci#n ,.+
*** p
!+/ !-/ D/ )xtra)"/ ?"
*** ;
!-/ D/ )xtra)"
Observa que, en el ltimo ejemplo, p!+" y ; se refieren en realidad al mismo objeto!
5 Estructuras de Control Bsicas
5.1 Construcciones if
Quiz la mejor conocida de las construcciones es i8 (si). Por ejemplo:
*** x 9 int(ra&'input($Pntroduce un nSmero entero3 $))
*** i8 x % (3
... x 9 (
... print )Qegativo cambiado a cero)
... eli8 x 99 (3
... print )Cero)
... eli8 x 99 +3
... print )Ono)
... else3
... print )7Ts)
...
Puede haber cero o ms partes eli8 y la parte else (si no) es opcional. La palabra clave `eli8' es una
abreviatura de `else if' y evita el sagrado excesivo. Una secuencia i8 ... eli8 ... eli8 ... es la sustituta
de las sentencias s&itch o case de otros lenguajes.
5.2 Sentencias for
La construccin 8or (para) es un poco diferente a lo acostumbrado en C o Pascal. En lugar de recorrer
siempre una progresin aritmtica (como en Pascal) o dejar al programador total libertad de eleccin de
inicializacin, comprobacin y salto de paso (como en C), el 8or de Python recorre los elementos de
una secuencia (una lista o cadena), en el orden en que aparecen en la secuencia. Por ejemplo:
*** . 7edir algunas cadenas3
... a 9 !)gato)/ )ventana)/ )de8enestrar)"
*** 8or x in a3
... print x/ len(x)
...
gato ?
ventana C
de8enestrar ++
No es aconsejable modificar la secuencia que se est recorriendo (lo que slo puede ocurrir en
secuencias mutables, como las listas). Si se necesita modificar la lista recorrida, por ejemplo, para
duplicar los elementos, hay que recorrer una copia. La notacin de corte hace esto muy cmodo.
*** 8or x in a!3"3 . hacer una copia por corte de la lista entera
... i8 len(x) * C3 a.insert((/ x)
...
*** a
!)de8enestrar)/ )gato)/ )ventana)/ )de8enestrar)"
6 Ejercicios Sugeridos
1. Escriba un programa de Hola Mundo!
print Hola Mundo!
2. Escriba un programa de Hola Mundo con un comentario
##!to "! pan #o$ido %&
print 'u"(a$"nt" Hola Mundo!
3. Escriba un Hola Mundo utilizando variables
hola)Hola
$undo)Mundo!
print hola* $undo
4. Escriba un Hola Personalizado, tomando como entrada su nombre
no$+r")ra,-input./!#ri+" tu no$+r"01&
print Hola*no$+r"
5. Escriba un Hola Personalizado concatenando Strings
no$+r")ra,-input./!#ri+" tu no$+r"01&
print Hola*no$+r"*"l2la 3rand" 14
6. Escriba un programa que tiene como entrada el nmero del mes de nacimiento y da como salida
si pertenece o no al signo Tauro, puede ser tal vez.
+ ) 0
+ ) input .5!#ri+" tu n6$"ro d"l $"! d" na#i$i"nto1 5&
i7 + )) 41
print 5#r"o 8u" "r"! 9auro5
i7 + )) 51
print 5tal (": !"a! 9auro5
i7 + ; 51
print 5no "r"! 9auro5
i7 + < 41
print 5no "r"! 9auro5
7. Escriba un programa que simule una calculadora con las operaciones bsicas: suma, resta,
divisin y multiplicacin.
print 5=al#ulator >?045
# ) input .5nu$"ro115&
+ ) ra,-input .5op"rador15&
a ) input .5nu$"ro215&
p ) 5-5
r ) 5+5
t ) 5@5
y ) 525
i7 + )) y1
print #* +* a* 5)5* # 2 a
i7 + )) t1
print #* +* a* 5)5* a @ #
i7 + )) r1
print #* +* a* 5)5* a + #
i7 + )) p1
print #* +* a* 5)5* a - #
7 Referencias
Gua de Aprendizaje de Python. Disponible en http://pyspanishdoc.sourceforge.net/tut/tut.html
Inmersin en Python. Disponible en http://es.diveintopython.org/toc.html
Grupo de Usuarios de Python Caracas. python-caracas@googlegroups.com

También podría gustarte