¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Python
  3. Estructura del lenguaje Python
Extrait - Python Aprenda a programar proyectos lúdicos
Extractos del libro
Python Aprenda a programar proyectos lúdicos Volver a la página de compra del libro

Estructura del lenguaje Python

Introducción

Si lee este libro es porque tiene un objetivo: descubrir la programación, crear un juego, aprender el lenguaje Python, saber en qué consiste un lenguaje de programación, crear una pequeña aplicación, desarrollar una idea que le da vueltas en la cabeza, hacer ejercicios para entrenarse o… ¡adquirir conocimientos suplementarios!

Todos esos objetivos se cristalizarán a través de la escritura de líneas de código que constituirán su programa. Estas líneas de código están guardadas en archivos de texto de extensión py. Dichos archivos se pueden modificar con un editor de textos como Notepad y WordPad en Windows y TextEdit en Mac. Generalmente, será preferible usar un entorno especializado para mayor comodidad. Este tipo de entornos permite, por ejemplo, aplicar un color a las palabras clave del lenguaje, y otro a las variables.

El ordenador no sabe ejecutar código guardado en modo texto. Para ejecutar un programa, el entorno Python transforma el texto que usted ha tecleado en lenguaje propio del procesador del ordenador. Recuerde que el código es la descripción de un programa en forma de texto. El interpretador de Python se encargará de transformar este texto en un programa ejecutable para la máquina.

Posiblemente usted conozca un poco los procesadores disponibles en el mercado. Para los Mac, se encuentran...

Las variables

1. Uso

Una variable sirve para representar un valor por un nombre. Este concepto es bastante parecido al que conoce por las matemáticas o la física. Sin embargo, hay algunas diferencias:

  • En informática, el valor de la variable siempre se conoce porque está asociado a un espacio en la memoria que contiene su valor. ¡El concepto de incógnita no existe!

  • En informática, una variable evoluciona, su valor cambia con el tiempo y con respecto a las acciones efectuadas durante la ejecución de un programa. Cuando se modifica una variable, el nuevo valor sobrescribe el anterior y el antiguo valor se olvida. En matemáticas y en física, ¡las incógnitas solo tienen un valor!

2. Nomenclatura

Si solo tuviera que quedarse con un único concepto de esta obra, sería seguramente este porque se trata del concepto más importante en la vida de un informático. Insistimos porque a menudo será olvidado, maltratado, obviado por la costumbre, y eso le llevará al fracaso. Estamos hablando de la elección del nombre de una variable. Nuestros amigos matemáticos o físicos tienen por costumbre elegir nombres de incógnitas lo más cortos posibles. Así, se ven por doquier en las páginas de nuestros libros y libretas x, y o α y estamos acostumbrados a ello. ¿Cuál es la razón de esta elección? Hay dos razones principales: por un lado, estas asignaturas se crearon en la época del lápiz y papel y el primer objetivo en una página de cálculo era el de limitar la cantidad de datos que se tenían que escribir. Por otro lado, los ejercicios más complicados necesitan algunas incógnitas, y el alfabeto griego y el latino parecen suficientes para cubrir esa necesidad. De esta manera, podemos tener letras asociadas a un concepto: con el uso de R se representa una resistencia, I una intensidad, d una dimensión y x una abscisa… Todo queda bien señalizado.

Sin embargo, el homo informaticus ha conocido otra historia. Usa el teclado y ya no está limitado por el tamaño de una página de papel. Un «pequeño programa» se sitúa entre las 1000 y las 10 000 líneas de código: una calculadora, un reloj, un post-it de escritorio. Un programa mediano contiene...

Los tipos de variables

Durante la asignación, el tipo de variable se elige automáticamente con relación a lo que se encuentra a la derecha del símbolo =. Usamos la función de Python type() con el objetivo de saber lo que se ha decidido. La función print() permite mostrar el resultado en pantalla:

a = 1 
print(type(a)) 
a = 1.0 
print(type(a)) 
a = 'Hola' 
print(type(a)) 
 
>> <class 'int'> 
>> <class 'float'> 
>> <class 'str'> 

En la primera línea, se asocia el número 1 a la variable a. Como este número no tiene coma, la convención apunta a que debe almacenarse como un número entero: integer en inglés o, de forma abreviada, class int. En la tercera línea, el valor 1.0 designa esta vez un número decimal. Automáticamente, el intérprete elige el tipo denominado class float. En la última asignación, se encuentra el texto entre comillas; es el código que designa una cadena de caracteres, string en inglés o tambien class str.

¿Tipo o clase? Oirá las dos designaciones. No se preocupe, son dos términos que se refieren al mismo concepto. El término «tipo» apareció primero con las variables. El término «clase» es más reciente porque está vinculado a la programación objeto. En otros lenguajes, como en Java/C++/C#, se distinguen los tipos primitivos (los números esencialmente) de las clases (todo lo que difiere de un número: una fecha, un color, el ratón, el teclado…). Se trata de una costumbre. Python ha agrupado esas dos tendencias y no hace diferencia entre esos dos términos.

En la memoria RAM del ordenador, se almacena información en contenedores llamados bytes. Cada byte corresponde a un paquete de 8 bits cuyo valor puede...

Las operaciones en las cadenas de caracteres

1. El estándar Unicode

El estándar Unicode mantiene una tabla de códigos que contiene más de 100 000 caracteres y otros símbolos, y todo esto para aproximadamente cien sistemas de escritura. Los valores comprendidos entre 0 y 128 son similares a los valores de la tabla de caracteres ASCII aparecida en la década de 1960, que fue muy usada en los ordenadores hasta la década del 2000. En estas tablas, el valor 32 corresponde al carácter espacio, el rango de valores de 48 a 57 corresponde a los números de 0 a 9, el rango de 65 a 90 corresponde a las letras mayúsculas de la A a la Z y el rango de 97 a 122 corresponde a las letras minúsculas de la a a la z.

Existen dos funciones, chr() y ord(), que permiten convertir un código en carácter, y viceversa, siguiendo el estándar Unicode. Así, si hace una búsqueda rápida en Internet, encontrará que el emoticono de la sonrisa corresponde al código 128512, y que la escritura de ese código en hexadecimal es 0x1F600. En lenguaje Python, no hay tipos de carácter como en otros lenguajes. Las funciones que muestran un carácter devuelven así una cadena con el único carácter en su interior; he aquí un ejemplo:

A = chr(128512) 
B = chr(0x1F600) 
print(A) 
print(B) 
print(type(A)) 
print(ord("A")) 
print(ord("0")) 
 
>> images/smileysouriant.PNG 
>> images/smileysouriant.PNG 
>> <class 'str'> 
>> 65 
>> 48 

2. Concatenar dos cadenas

El tipo de cadena de caracteres permite usar la operación + para pegar dos cadenas y formar solamente una. Bastante práctico, ¿verdad?

a = 'Hola ' 
b = 'tú' 
c = a + ' ' + b 
print(c) 
 
>> Hola tú 

Puede intentar añadir un número a una cadena de caracteres. Quien pueda predecir el resultado será espabilado… ya que hay distintas opciones disponibles. Si el lenguaje es bastante flexible y permisivo en ese punto, convertirá automáticamente el número en cadena y lo pegará a la otra cadena. Si el lenguaje es estricto, devolverá un mensaje de error.

a = 'Hola ' 
b = 1 
c = a + ' ' + b 
 
>>...

Las condiciones

1. Las condiciones simples

Una condición permite efectuar una ramificación en un programa. Es decir, según el resultado de una prueba, vamos a decidir ejecutar la parte A del código o la parte B. Si se compara un programa con un conjunto de operaciones dispuestas en una carretera, la prueba corresponde a una bifurcación donde se tiene que elegir ir a la derecha o hacia la izquierda. En Python, el resultado de una prueba toma dos valores: False para designar un resultado falso y True para designar un resultado correcto. He aquí un ejemplo de la sintaxis:

if edad >= 18: 
     print("mayor de edad") 
else: 
     print("menor de edad") 

Al contrario que en otros lenguajes, no es necesario rodear la prueba de 2 paréntesis. La palabra clave if («si» en español) indica el principio de una condición. Después del if, encontramos la prueba expresada bajo la forma de una condición: edad >= 18. El fin de la prueba está marcado por el uso del símbolo : y por un salto de línea. Más adelante, encontramos la palabra clave else seguida del símbolo : y de un salto de línea que indica el inicio de la otra bifurcación.

La indentación es un punto importante para Python. La indentación corresponde a la disposición particular del código en la que se hacen aparecer desplazamientos desde el margen izquierdo. La indentación impuesta por Python resulta ser una preciosa aliada porque fuerza a que todos los desarrolladores estructuren sus códigos y a que lo hagan de la misma manera. En Python, la indentación permite designar una subparte del código. Así, en el ejemplo anterior, las dos salidas print están desplazadas por algunos espacios con respecto a la posición del if y del else. También se puede usar una tabulación. En una misma subparte, todos los comienzos de línea tienen que situarse en el mismo nivel, lo que sobrentiende que nos podemos permitir el uso de indentaciones diferentes de una parte a otra. He aquí un ejemplo:

if edad >= 18:               IF + condición 
    print("Tu eres")         |        |...

Las funciones built-in

Desde su aparición, el intérprete de Python puso a disposición del programador varias funciones built-in, como la función print(). No se trata de palabras clave. Presentaremos las funciones más utilizadas.

1. Las funciones built-in de conversión

Ya se han visto antes. Se trata de funciones que permiten convertir un tipo en otro tipo: int(), float(), str(), y funciones que permiten pasar de un código Unicode al carácter asociado: chr() y ord().

Existen dos funciones que permiten convertir un número entero en su representación binaria (cadena de 0 y de 1) o hexadecimal (número escrito en base 16). Se trata de las funciones bin() y hex(), que devuelven ambas una cadena de caracteres. Así, bin(128) devuelve ’0b10000000’ y hex(128) devuelve ’0x80’.

2. Las funciones built-in matématicas

Encontramos funciones muy útiles, como el cálculo de un valor máximo o del valor absoluto. Se las presentamos aquí:

  • abs(-3) → 3: calcula el valor absoluto.

  • Max(4,5)  5.

  • max(4,5,6) → 6: calcula el máximo de los tres valores.

  • Min(4,5,6)  4.

  • round(7.2) → 7 y round(7.8) -} 8: redondea al entero más próximo.

  • Round(7.123456,3) → 7.123: redondea a tres cifras después de la coma.

Exceptuando la función round(), las otras funciones...

El bucle for con índice

La condición if permite efectuar una bifurcación eligiendo la ejecución de una parte del código o no. Un bucle for consiste en ejecutar varias veces una misma parte de un código. Esta parte, que llamamos cuerpo del bucle, corresponde a las líneas que siguen la instrucción for. El cuerpo del bucle debe tener una indentación más amplia que la instrucción for asociada. Cuando la indentación vuelve al mismo nivel que el de la instrucción for, esto significa que el cuerpo del bucle se ha terminado. El bucle for con índice necesita que se le especifique el nombre de la variable que almacenará dicho índice. Justo después la palabra clave in, se precisa el rango de valores que va a recorrer el índice. Por ejemplo, la función built-in range(4) define un rango de valores desde 0 a 3: 0, 1, 2 y 3. Resumiendo, identificamos el cuerpo del bucle así:

……… 
for i in range(4):         # Inicio del bucle for - índice: i 
   ………                     #  || Cuerpo del bucle 
   ………                     #  || 
   ………                     #  || ...

La estructura léxica de un lenguaje

Vamos a mostrar que cualquier lenguaje informático, incluyendo Python, dispone de su propia gramática interna. Cuando el intérprete de Python recorre el código, intenta categorizar todo lo que encuentra a su paso. Ya hemos visto bastantes conceptos en el capítulo para poder listar las categorías principales:

  • Comentarios

# Hola

  • Indentaciones

 

  • Delimitadores

: (   )

  • Palabras clave

    • Instrucción

    • Operadores lógicos

 

if then else

and or not

  • Constantes

"Hola", 17, 3.14

  • Operadores

    • Cálculo

    • Asignación

 

+ - / *

=

  • Identificadores

    • Variable

    • Función built-in

    • Función

 

creada por el programador

print abs

creada por el programador

Detallamos aquí todos los puntos:

  • Los comentarios consisten en escribir información útil para el programador, pero no producen ninguna acción cuando se ejecuta el programa.

  • La indentación permite al intérprete la identificación de las subpartes del código asociadas a algunas instrucciones, como la instrucción if.

  • Los delimitadores son importantes para estructurar el código; a menudo olvidamos su existencia, ya que pasan desapercibidos. Por ejemplo, se encuentra el símbolo : al final de una condición if, los paréntesis ( ) que delimitan una expresión...

Los mensajes de error

Existen dos grandes tipos de errores: los que se pueden detectar en la traducción del código fuente hacia el lenguaje del programa y los que aparecen durante la ejecución. Los primeros corresponden generalmente a errores de sintaxis, errores inducidos al teclear, término desconocido, estructura incorrecta… Los otros corresponden a errores durante el desarrollo del programa: intentar hacer una división entre 0 (está prohibido), abrir un archivo que no existe o incluso utilizar un elemento no inicializado...

Python, debido a la simplicidad de su lenguaje, permite ganar mucho tiempo de desarrollo reduciendo los errores de sintaxis, algo que es muy apreciado tanto por los programadores principiantes como por los más expertos.

¡Ya se siente preparado para teclear algunas líneas de código! Sin embargo, hay que tomar el tiempo de estudiar la gestión de los errores. Desde los principios de la informática, los mensajes de error no son muy inteligibles. Y esto por distintas razones. Por un lado, están escritos en la lengua de Shakespeare y a menudo se trata de términos técnicos que no encontrará en un diccionario. Por otro lado, aparecen en un contexto, el contexto que el intérprete de Python sitúa antes del «descarrilamiento». Así, si el intérprete cree que está leyendo una condición cuando no es el caso, obtendrá un mensaje de error que le explicará que su condición es errónea, y eso que no hay ninguna condición escrita en el código en ese sitio. Este problema aparece el 60 % del tiempo y esta situación...

Ejercicios de aplicación

Los ejercicios de aplicación le permitirán usar y aplicar los conocimientos presentados en el capítulo. Son guiados y dirigidos.

1. Serie de cálculos

El objetivo de este ejercicio es indicar el valor de inicialización de cada variable. Va a trabajar con www.pythontutor.com. El simulador se encuentra en la página: http://www.pythontutor.com/visualize.html

A = 3 
B = 10 * 2 
C = A * B + 5 
D = 40 
E = C + D 

Corrección guiada:

La primera línea ha inicializado la variable A con el valor 3.

images/03RI01.png

En la segunda línea, encontramos a la derecha de la asignación una expresión. Tenemos que hacer el cálculo antes de inicializar la variable B. Así, una vez que se haya obtenido el resultado, es decir: 20, lo utilizaremos para inicializar la variable B.

images/03RI02.png

En la tercera línea, tenemos una expresión a la derecha de la asignación. Esta expresión depende de las variables A y B. Leemos sus valores y efectuamos el cálculo para obtener 65. Este valor sirve para inicializar la variable C.

images/03RI03.png

La cuarta línea inicializa la variable D con el valor 40. En la última línea, tenemos que leer los valores de las variables C y D para evaluar la expresión que vale 105. Este valor sirve para inicializar la variable E.

images/03RI04.png

2. Serie de cálculos anidados

El ejercicio siguiente sigue en la óptica del anterior. Esta vez, sin embargo, la variable A cambia de valor durante la ejecución:

A = 3 
A = A * A 
A = 10 - A 
A = A + 1 
A = A * 2 

Corrección guiada:

En la primera línea, inicializamos la variable A con el valor 3.

images/03RI05.png

En la segunda, tenemos una expresión a la derecha de la asignación. Debemos evaluar primero su valor con el valor actual de A. Como esta variable vale actualmente 3, el resultado de la expresión será 9. Este valor sirve para actualizar la variable A, la cual al final de la ejecución de esta línea tendrá un valor de 9.

images/03RI06.png

En la tercera línea, tenemos una expresión a la derecha de la asignación. Evaluamos su valor con el valor actual de A. Como esta variable vale actualmente 9, el resultado de la expresión 10 - A valdrá 1. Este valor sirve para actualizar la variable A, la cual al final de la ejecución de esta línea valdrá...

Ejercicios de entrenamiento

En los ejercicios de aplicación anteriores, debía comprender el funcionamiento de un trozo de código. Ahora, para cada ejercicio, vamos a describir los objetivos que tiene que alcanzar por su programa; le toca a usted la gran tarea de organizar el código. ¡Genial!, por fin es usted el que manda.

1. Mostrar una palabra al revés images/etoile.png

La corrección de este ejercicio se puede descargar desde la página web de la editorial. Solicite al usuario que introduzca una palabra en el teclado. Después, escríbala al revés, es decir, de derecha a izquierda. He aquí algunos consejos:

  • Use un bucle for con índice; el número de letras corresponderá al número de iteraciones.

  • El término palabra[i] recorrerá los caracteres de izquierda a derecha. Eso no es lo que se pretende. Calcule a partir del valor del índice y de la longitud de la palabra otro índice que empiece por la derecha y que se desplace hacia la izquierda. Se puede realizar de dos maneras, usando un valor de índice positivo o negativo.

  • Muestre los caracteres uno por uno usando la función print(...,end=’’’’) para evitar los saltos de línea.

  • No dude en hacer pruebas.

2. Calcular el valor del polinomio 3x2 + 5x + 1 images/etoile.png

La corrección de este ejercicio se puede descargar desde la página web de la editorial. Solicite al usuario que introduzca un número cualquiera. Cuidado: podría tratarse de un número decimal. Calcule el valor del polinomio y muéstrelo. Vuelva a solicitar dos valores y muestre los resultados.

  • Use la función input() para leer la entrada del teclado.

  • No olvide convertir la cadena de caracteres devuelta en número decimal.

  • Un bucle for puede evitarle errores en un copiar/pegar.

3. Sumar los n primeros números enteros images/etoile.png

La corrección de este ejercicio se puede descargar desde la página web de la editorial. El usuario teclea un número n en el teclado. Tiene que calcular la suma de los n primeros enteros: 1+ … + n, y mostrarla en la pantalla:

  • Use la función input() para leer la entrada del teclado.

  • No olvide convertir la cadena de caracteres devuelta en número decimal.

  • Use un bucle for con índice, su range dependerá de la variable n.

  • Cree una variable para sumar los diferentes valores. Piense...

Proyectos

Los proyectos son ejercicios largos. Para evitar un enunciado complejo, tomamos ejemplos divertidos de la vida diaria que ya debería conocer. La organización del programa se hace un poco más difícil. Es posible que tenga que usar funciones que no se encuentren en el programa o alguna que otra maña. Pero, en esos casos, todos los datos se le darán en el enunciado. El objetivo es llegar a obtener un programa funcional, divertido y de calidad.

1. El juego del ahorcado images/etoile.pngimages/etoile.png

La corrección de este proyecto se puede descargar desde la página web de la editorial. El juego del ahorcado consiste en encontrar una palabra adivinando las letras que la forman. Le proponemos la implementación de una versión simplificada, pero relativamente completa. Para hacer el código más simple todavía, el programa solo aceptará palabras con letras diferentes. Esto permite evitar la gestión de los casos dobles.

He aquí sus objetivos:

  • Al principio del juego, muestre en pantalla: "¡¡Juego del ahorcado!!".

  • Solicite al usuario que introduzca una letra y que después pulse la tecla [Intro]. 

  • El usuario tiene que hacer seis proposiciones de letras, ni más ni menos.

  • Si la letra no está presente en la palabra, muestre "#˽# ... #˽#", con tantos símbolos # como letras tenga que adivinar.

  • Si la letra está presente en la palabra, hay que indicar su posición. Por ejemplo, si se trata de la "X" en la tercera posición empezando por la izquierda de una palabra de seis letras, el usuario tendrá que ver en pantalla "#˽#˽X˽#˽#˽#".

  • Una vez que el usuario haya introducido sus seis letras, pida al usuario que proponga una palabra. Compare la proposición del jugador con la palabra buscada. Si la ha encontrado, escriba "GANADOR"; si no, "PERDEDOR".

He aquí algunos consejos:

  • Transforme el carácter en mayúsculas para que su búsqueda funcione.

  • Si la letra no se encuentra en la palabra, para evitar un bucle for, puede usar una sintaxis que le permita repetir n veces la cadena, como aquí: "#˽" * n.

  • Si la letra se encuentra en la palabra, calcule el número de veces que la secuencia "#˽" está presente a la derecha y a la izquierda de la palabra...