summaryrefslogtreecommitdiff
path: root/es/03_estructura.md
diff options
context:
space:
mode:
Diffstat (limited to 'es/03_estructura.md')
-rw-r--r--es/03_estructura.md48
1 files changed, 22 insertions, 26 deletions
diff --git a/es/03_estructura.md b/es/03_estructura.md
index ba9abdb..4aa6570 100644
--- a/es/03_estructura.md
+++ b/es/03_estructura.md
@@ -25,9 +25,9 @@ Para poder alterar el orden de los comandos, o elegir en función de una
condición cuales se ejecutan, python dispone de unas estructuras. Pero, antes
de contarte cuales son, te adelanto su forma general. Normalmente se declaran
en una línea terminada en `:` y su cuerpo se sangra hacia dentro. La sangría (o
-indentación si lo calcamos del inglés[^indent]) es lo que define dónde empieza
-o termina un *bloque* en python. Las líneas consecutivas sangradas al mismo
-nivel se consideran el mismo *bloque*.
+indentación si lo calcamos del inglés) es lo que define dónde empieza o termina
+un *bloque* en python. Las líneas consecutivas sangradas al mismo nivel se
+consideran el mismo *bloque*.
#### Bloques
@@ -40,12 +40,10 @@ contexto. Sirven para delimitar zonas del programa, cuerpos de sentencias, etc.
Es **muy importante** sangrar los bloques correctamente, usando una sangría
coherente. Puedes usar dos espacios, el tabulador, cuatro espacios o lo que
-desees, pero elijas lo que elijas debe ser coherente en todo el documento.
-IDLE y los editores de código en general puede configurarse para usar una
-anchura de indentación concreta, que se insertará cuando pulses la tecla
-tabulador. El estándar de python es cuatro espacios.
-
-[^indent]: <https://en.wikipedia.org/wiki/Indentation_(typesetting)>
+desees, pero elijas lo que elijas debe ser coherente en todo el documento. Los
+editores de código, como IDLE, pueden configurarse para usar una anchura de
+indentación concreta, que se insertará cuando pulses la tecla tabulador. El
+estándar de python es cuatro espacios.
## Sintaxis general
@@ -74,8 +72,9 @@ print("Hola") # Esto es otro comentario
### Control de flujo
Como ya se ha adelantado, es posible cambiar el orden de ejecución del programa
-en función de unas normas o evitar que el programa ejecute ciertas sentencias.
-A esto se le conoce como *control de flujo*.
+en función de unas normas para evitar que el programa ejecute ciertas
+sentencias o repita la ejecución de algunos bloques. A esto se le conoce como
+*control de flujo*.
#### Condicionales
@@ -101,8 +100,8 @@ Tal y como se muestra en el ejemplo, los bloques `elif` y el bloque `else` son
opcionales. Es posible, y muy común además, hacer un `if` únicamente con el
apartado inicial.
-Si te preguntas qué condiciones debes usar, es tan simple como usar sentencias
-de python cuyo resultado sea `True` o `False`. Cuando la sentencia resulte en
+Si te preguntas qué condiciones debes usar, es tan simple como usar expresiones
+de python cuyo resultado sea `True` o `False`. Cuando la expresión resulte en
un `True` la condición se cumplirá y el bloque interior se ejecutará.
En resumen, el *if* ejecuta el bloque *si* la condición se cumple.
@@ -200,7 +199,8 @@ True
Es relativamente sencillo prever qué valores son *truthy* o *falsey*,
normalmente los valores que representan un vacío se consideran `False`.
-[^truthy]: <https://docs.python.org/3/library/stdtypes.html#truth-value-testing>
+[^truthy]: La documentación oficial de python describe estas conversiones en
+ detalle en la sección *Truth value testing*.
### List comprehensions
@@ -208,7 +208,7 @@ normalmente los valores que representan un vacío se consideran `False`.
Una de las excepciones sintácticas que sí que podemos explicar en este momento,
en el que ya sabes hacer bucles, son las *list comprehensions*. Python dispone
de un sistema para crear secuencias y transformarlas muy similar a la notación
-de construcción de sets de las matemáticas[^set-notation].
+de construcción de sets de las matemáticas.
Como mejor se entiende es con unos ejemplos, en este caso vamos usar la función
`range` para crear una lista de números del `0` (inclusive) al `10` (no
@@ -247,11 +247,9 @@ proceso que dejamos para el futuro.
<generator object <genexpr> at 0x7f779d9b2d58>
```
-[^set-notation]: <https://en.wikipedia.org/wiki/Set-builder_notation>
-
### Excepciones
-Las excepciones o *exception* son errores del programa, python lanza
+Las excepciones o *exception* son errores del programa. Python lanza
excepciones cuando hay problemas. Por ejemplo, cuando intentas acceder a un
índice inexistente en una lista.
@@ -259,9 +257,9 @@ Las excepciones terminan la ejecución del programa a no ser que se gestionen.
Se consideran fallos de los que el programa no puede arreglarse a no ser que se
le indique cómo. Algunas funciones y librerías lanzan excepciones que nosotros
debemos gestionar, por ejemplo: que un archivo no exista, o que no se tenga
-permisos de edición en el directorio, etc. Es nuestra responsabilidad como
-programadores tener un plan be o aceptar la excepción deportivamente a
-sabiendas que nuestro programa terminará indicando un error.
+permisos de edición en el directorio, etc. Es nuestra responsabilidad tener un
+plan be o aceptar la excepción deportivamente a sabiendas que nuestro programa
+terminará indicando un error.
Hay ocasiones en las que las excepciones pueden capturarse y otras no, por
ejemplo, los fallos de sintaxis no pueden solventarse.
@@ -314,13 +312,11 @@ capturar ninguna, perdiendo así el detalle de los fallos.
Cuando aprendas sobre programación orientada a objetos en el apartado
correspondiente puedes volver a visitar este punto y leer la documentación de
-python[^exception] para entender cómo hacerlo. Te adelanto que python tiene una
+python para entender cómo hacerlo. Te adelanto que python tiene una
larga lista de excepciones y que está considerado una mala práctica crear
nuevas si las excepciones por defecto cubren un caso similar al que se
encuentra en nuestro programa.
-[^exception]: <https://docs.python.org/3/library/exceptions.html>
-
### Funciones
Las funciones sirven, sobre todo, para reutilizar código. Si una pieza de
@@ -527,8 +523,8 @@ para después avanzar a las *list comprehensions*, cuyo nombre contiene *list*
pero valen para cualquier dato complejo.
Has cambiado un poco de tema después, saltando a las excepciones, que no has
-podido ver en detalle por no ser, aún, un experto en programación orientada a
-objetos. Pero tranquilo, pronto lo serás.
+podido ver en detalle por no haber visitado, aún, la programación orientada a
+objetos. Pero calma, pronto lo haremos.
Una pincelada sobre funciones ha sido suficiente para que no les tengas miedo
nunca más y que podamos atacar el siguiente capítulo con energía, ya que ahora