Capítulo 4. Elige con si
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Si puedes mantener la cabeza cuando todos a tu alrededor
pierden la suya y te echan la culpa, ...Rudyard Kipling, If-
En los capítulos anteriores, has visto muchos ejemplos de datos, pero no has hecho gran cosa con ellos. La mayoría de los ejemplos de código utilizaban el intérprete interactivo y eran breves. En este capítulo, aprenderás a estructurar código Python, no sólo datos.
Muchos lenguajes informáticos utilizan caracteres como llaves ({
y }
) o palabras clave comobegin
y end
para delimitar secciones de código. En esos lenguajes, es una buena práctica utilizar una indentación coherente para que tu programa sea más legible para ti y para los demás. Incluso existen herramientas para que tu código quede bien alineado.
Cuando estaba diseñando el lenguaje que se convirtió en Python, Guido van Rossum decidió que la propia indentación era suficiente para definir la estructura de un programa, y evitó escribir todos esos paréntesis y llaves.Python es inusual en este uso del espacio en blancopara definir la estructura del programa. Es uno de los primeros aspectos que notan los recién llegados, y puede parecer extraño a los que tienen experiencia con otros lenguajes. Resulta que después de escribir Python durante un rato, se siente natural, y dejas de notarlo. Incluso te acostumbras a hacer más mientras escribes menos.
Nuestros ejemplos iniciales de código han sido de una sola línea. Veamos primero cómo hacer comentarios y comandos de varias líneas.
Comenta con #
Un comentario es un fragmento de texto de tu programa que el intérprete de Python ignora. Puedes utilizar los comentarios para aclarar código Python cercano, tomar notas para arreglar algo algún día, o para cualquier otro propósito que desees. Para marcar un comentario se utiliza el carácter #
; todo lo que vaya desde ese punto hasta el final de la línea actual forma parte del comentario. Normalmente verás un comentario en una línea por sí mismo, como se muestra aquí:
>>>
# 60 sec/min * 60 min/hr * 24 hr/day
>>>
seconds_per_day
=
86400
O, en la misma línea que el código que está comentando:
>>>
seconds_per_day
=
86400
# 60 sec/min * 60 min/hr * 24 hr/day
El carácter #
tiene muchos nombres:hash, sharp, pound, o el siniestro sonidooctothorpe.1
Lo llames como lo llames2
su efecto sólo dura hasta el final de la línea en la que aparece.
Python no tiene un comentario multilínea. Tienes que empezar explícitamente cada línea o sección de comentario con un #
:
>>>
# I can say anything here, even if Python doesn't like it,
...
# because I'm protected by the awesome
...
# octothorpe.
...
>>>
Sin embargo, si está en una cadena de texto, el poderoso octótropo vuelve a su papel de simple carácter #
:
>>>
(
"No comment: quotes make the # harmless."
)
No comment: quotes make the # harmless.
Continúa las líneas con \
Los programas son más legibles cuando las líneas son razonablemente cortas. La longitud máxima de línea recomendada (no obligatoria) es de 80 caracteres. Si no puedes decir todo lo que quieres decir en esa longitud, puedes utilizar el carácter de continuación:\
(barra invertida). Simplemente pon \
al final de una línea, y Python actuará de repente como si siguieras en la misma línea.
Por ejemplo, si quisiera añadir los cinco primeros dígitos, podría hacerlo línea a línea:
>>>
sum
=
0
>>>
sum
+=
1
>>>
sum
+=
2
>>>
sum
+=
3
>>>
sum
+=
4
>>>
sum
10
O bien, podría hacerlo en un solo paso, utilizando el carácter de continuación:
>>>
sum
=
1
+
\...
2
+
\...
3
+
\...
4
>>>
sum
10
Si nos saltáramos la barra invertida en medio de una expresión, obtendríamos una excepción:
>>>
sum
=
1
+
File"<stdin>"
, line1
sum
=
1
+
^
SyntaxError
:invalid syntax
He aquí un pequeño truco: si estás en medio de paréntesis emparejados (o corchetes o llaves), Python no se queja de los finales de línea:
>>>
sum
=
(
...
1
+
...
2
+
...
3
+
...
4
)
>>>
>>>
sum
10
También verás en el Capítulo 5que las comillas triples emparejadas te permiten crear cadenas de varias líneas.
Comparar con if, elif y else
Ahora, por fin, damos nuestro primer paso en lasestructuras de códigoque entretejen los datos en los programas. Nuestro primer ejemplo es este diminuto programa de Python que comprueba el valor de la variable booleana disaster
e imprime un comentario apropiado:
>>>
disaster
=
True
>>>
if
disaster
:
...
(
"Woe!"
)
...
else
:
...
(
"Whee!"
)
...
Woe!
>>>
Las líneas if
y else
son sentenciasde Python que comprueban si una condición (aquí, el valor de disaster
) es un valor booleano True
, o puede evaluarse como True
. Recuerda queprint()
es la función incorporada de Python para imprimir cosas, normalmente en tu pantalla.
Nota
Si has programado en otros lenguajes, ten en cuenta que no necesitas paréntesis para la prueba if
. Por ejemplo, no digas algo como if (disaster == True)
(el operador de igualdad ==
se describe en unos párrafos). Sí necesitas los dos puntos (:
) al final. Si, como yo, a veces te olvidas de escribir los dos puntos, Python mostrará un mensaje de error.
Cada línea de print()
tiene una sangría debajo de su prueba. Utilicé cuatro espacios para sangrar cada subsección. Aunque puedes utilizar la sangría que quieras, Python espera que seas coherente con el código dentro de una sección: las líneas deben tener la misma sangría, alineadas a la izquierda. El estilo recomendado, llamadoPEP-8, es utilizar cuatro espacios. No utilices tabuladores, ni mezcles tabuladores y espacios; desordena la cuenta de sangrías.
Aquí hicimos varias cosas, que explico con más detalle a medida que avanza el capítulo:
-
Asigna el valor booleano
True
a la variable llamadadisaster
-
Realiza una comparación condicional utilizando
if
yelse
, ejecutando un código diferente en función del valor dedisaster
-
Llamada a la función
print()
para imprimir un texto
Puedes tener pruebas dentro de pruebas, a tantos niveles de profundidad como sea necesario:
>>>
furry
=
True
>>>
large
=
True
>>>
if
furry
:
...
if
large
:
...
(
"It's a yeti."
)
...
else
:
...
(
"It's a cat!"
)
...
else
:
...
if
large
:
...
(
"It's a whale!"
)
...
else
:
...
(
"It's a human. Or a hairless cat."
)
...
It's a yeti.
En Python, la indentación determina cómo se emparejan las secciones if
y else
. Nuestra primera prueba era comprobar furry
. Como furry
es True
, Python pasa a la prueba indentada if large
. Como habíamos puesto large
a True
,if large
se evalúa como True
, y la línea siguiente else
se ignora. Esto hace que Python ejecute la línea indentada bajo if large:
e imprimaIt's a yeti.
Si hay más de dos posibilidades que probar, utiliza if
para la primera,elif
(que significa else if) para las del medio y else
para la última:
>>>
color
=
"mauve"
>>>
if
color
==
"red"
:
...
(
"It's a tomato"
)
...
elif
color
==
"green"
:
...
(
"It's a green pepper"
)
...
elif
color
==
"bee purple"
:
...
(
"I don't know what it is, but only bees can see it"
)
...
else
:
...
(
"I've never heard of the color"
,
color
)
...
I've never heard of the color mauve
En el ejemplo anterior, comprobamos la igualdad utilizando el operador ==
.Aquí tienes los operadores de comparación de Python:
igualdad |
|
desigualdad |
|
menos de |
|
menor o igual que |
|
superior a |
|
mayor o igual que |
|
Éstas devuelven los valores booleanos True
o False
. Veamos cómo funcionan, pero primero, asigna un valor a x
:
>>>
x
=
7
Ahora, hagamos algunas pruebas:
>>>
x
==
5
False
>>>
x
==
7
True
>>>
5
<
x
True
>>>
x
<
10
True
Observa que se utilizan dos signos de igual (==
) para comprobar la igualdad; recuerda que un solo signo de igual (=
) es lo que se utiliza para asignar un valor a una variable.
Si necesitas hacer varias comparaciones a la vez, utiliza los operadoreslógicos (o booleanos)and
, or
, y not
para determinar el resultado booleano final.
Los operadores lógicos tienen menor precedenciaque los trozos de código que están comparando. Esto significa que primero se calculan los trozos y luego se comparan. En este ejemplo, como hemos puesto x
en 7
,5 < x
se calcula que es True
y x < 10
es también True
, por lo que finalmente acabamos conTrue and True
:
>>>
5
<
x
and
x
<
10
True
Como señala "Precedencia", la forma más fácil de evitar confusiones sobre la precedencia es añadir paréntesis:
>>>
(
5
<
x
)
and
(
x
<
10
)
True
Aquí tienes otras pruebas:
>>>
5
<
x
or
x
<
10
True
>>>
5
<
x
and
x
>
10
False
>>>
5
<
x
and
not
x
>
10
True
Si estás and
-haciendo comparaciones múltiples con una variable, Python te permite hacer esto:
>>>
5
<
x
<
10
True
Es lo mismo que 5 < x and x < 10
. También puedes escribir comparaciones más largas:
>>>
5
<
x
<
10
<
999
True
¿Qué es verdad?
¿Qué ocurre si el elemento que comprobamos no es un booleano? ¿Qué considera Python True
y False
?
Un valor false
no tiene por qué ser explícitamente un booleano False
. Por ejemplo, todos estos se consideran False
:
booleano |
|
null |
|
entero cero |
|
cero flotante |
|
cadena vacía |
|
lista vacía |
|
tupla vacía |
|
dict vacío |
|
conjunto vacío |
|
Cualquier otra cosa se considera True
. Los programas Python utilizan estas definiciones de "veracidad" y "falsedad" para comprobar si hay estructuras de datos vacías, así como las condiciones de False
:
>>>
some_list
=
[]
>>>
if
some_list
:
...
(
"There's something in here"
)
...
else
:
...
(
"Hey, it's empty!"
)
...
Hey, it's empty!
Si lo que estás probando es una expresión en lugar de una simple variable, Python evalúa la expresión y devuelve un resultado booleano. Así, si escribes:
if color == "red":
Python evalúa color == "red"
. En nuestro ejemplo anterior, asignamos la cadena "mauve"
a color
, por lo que color == "red"
es False
, y Python pasa a la siguiente prueba:
elif color == "green":
Hacer comparaciones múltiples con in
Supongamos que tienes una letra y quieres saber si es una vocal. Una forma sería escribir una afirmación larga if
:
>>>
letter
=
'o'
>>>
if
letter
==
'a'
or
letter
==
'e'
or
letter
==
'i'
\...
or
letter
==
'o'
or
letter
==
'u'
:
...
(
letter
,
'is a vowel'
)
...
else
:
...
(
letter
,
'is not a vowel'
)
...
o is a vowel
>>>
Siempre que necesites hacer muchas comparaciones como ésa, separadas por or
, utiliza en su lugar eloperador de pertenencia de Python in
. He aquí cómo comprobar la vocalidad de forma más pitónica, utilizando in
con una cadena formada por caracteres vocálicos:
>>>
vowels
=
'aeiou'
>>>
letter
=
'o'
>>>
letter
in
vowels
True
>>>
if
letter
in
vowels
:
...
(
letter
,
'is a vowel'
)
...
o is a vowel
Aquí tienes un avance de cómo utilizar in
con algunos tipos de datos sobre los que leerás en detalle en los próximos capítulos:
>>>
letter
=
'o'
>>>
vowel_set
=
{
'a'
,
'e'
,
'i'
,
'o'
,
'u'
}
>>>
letter
in
vowel_set
True
>>>
vowel_list
=
[
'a'
,
'e'
,
'i'
,
'o'
,
'u'
]
>>>
letter
in
vowel_list
True
>>>
vowel_tuple
=
(
'a'
,
'e'
,
'i'
,
'o'
,
'u'
)
>>>
letter
in
vowel_tuple
True
>>>
vowel_dict
=
{
'a'
:
'apple'
,
'e'
:
'elephant'
,
...
'i'
:
'impala'
,
'o'
:
'ocelot'
,
'u'
:
'unicorn'
}
>>>
letter
in
vowel_dict
True
>>>
vowel_string
=
"aeiou"
>>>
letter
in
vowel_string
True
Para el diccionario,in
mira las claves (el lado izquierdo de :
) en lugar de sus valores.
Novedad: Yo soy la morsa
En Python 3.8 llega el operador morsa, que tiene el siguiente aspecto:
name
:=expression
¿Ves la morsa? (Como un smiley, pero más corpulento.)
Normalmente, una tarea y un examen se realizan en dos pasos:
>>>
tweet_limit
=
280
>>>
tweet_string
=
"Blah"
*
50
>>>
diff
=
tweet_limit
-
len
(
tweet_string
)
>>>
if
diff
>=
0
:
...
(
"A fitting tweet"
)
...
else
:
...
(
"Went over by"
,
abs
(
diff
))
...
A fitting tweet
Con nuestro nuevo poder de colmillo (también conocido comoexpresiones de asignación) podemos combinarlas en un solo paso:
>>>
tweet_limit
=
280
>>>
tweet_string
=
"Blah"
*
50
>>>
if
diff
:
=
tweet_limit
-
len
(
tweet_string
)
>=
0
:
...
(
"A fitting tweet"
)
...
else
:
...
(
"Went over by"
,
abs
(
diff
))
...
A fitting tweet
La morsa también se lleva de maravilla con for
y while
, que veremos en el Capítulo 6.
Próximamente
Juega con cuerdas y conoce a personajes interesantes.
Cosas que hacer
4.1Elige un número entre 1 y 10 y asígnalo a la variable secret
. Después, elige otro número entre 1 y 10 y asígnalo a la variable guess
. A continuación, escribe las pruebas condicionales (if
, else
, y elif
) para imprimir la cadena 'too low'
si guess
es menor que secret
,'too high'
si es mayor que secret
, y 'just right'
si es igual a secret
.
4.2 Asigna True
o False
a las variablessmall
y green
. Escribe algunas sentencias if
/else
para imprimir cuál de ellas coincide con esas opciones: cereza, guisante, sandía, calabaza.
Get Introducción a Python, 2ª Edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.