# Sentencias if/elif/else

## <mark style="color:blue;">1. Sentencia</mark> <mark style="color:blue;"></mark><mark style="color:blue;">`if`</mark>

La sentencia de control de flujo `if` es probablemente una de las estructuras más importantes de cualquier lenguaje de programación, incluido Python.

**Esta estructura nos permite implementar sentencias condicionales dentro de nuestro programa.**

La sintaxis utilizada para definir la sentencia `if` es la siguiente:

```python
if <expresión>:
    <sentencia(s)>
```

`<expresión>` es una expresión evaluada en un contexto booleano. El resultado de evaluar esta expresión debe ser `True` o `False`

`<sentencia(s)>` es el bloque de sentencias en Python que se ejecutará cuando el resultado de evaluar la expresión sea `True`, en caso contrario se omitirá.

```python
num1 = 5
num2 = 10

# Esto es una expresión
num1 < num2
True

if num1 < num2: # Como num1 es menor a num2, nos imprime las sentencias
    print("sentencia1")
    print("sentencia2")
    print("sentencia3")
sentencia1
sentencia2
sentencia3

num1 = 15
num2 = 10

if num1 < num2: # Como num1 es mayor a num2, no nos imprime las sentencias
    print("sentencia1")
    print("sentencia2")
    print("sentencia3")
```

{% hint style="warning" %}
**IMPORTANTE**: Recuerda que en Python todo el código que sea local a una estructura, por ejemplo una función o una estructura de control como \`if\`, debe esta "indentado", es decir, respetar la sangría.
{% endhint %}

```python
if num1 < num2: # Como no está indentado nos devuelve un error
print("sentencia1")
print("sentencia2")
print("sentencia3")
  Cell In[9], line 2
    print("sentencia1")
    ^
IndentationError: expected an indented block after 'if' statement on line 1
```

## <mark style="color:blue;">2. Expresiones y operadores con la sentencia</mark> <mark style="color:blue;"></mark><mark style="color:blue;">`if`</mark>

Una de las cosas interesantes de esta sentencia de control de flujo es que podemos utilizar casi cualquier tipo de operador, tipo de dato y expresión siempre que el resultado sea un valor booleano (`True` o `False`)

```python
lista = ["azul", "amarillo", "verde"]

if "azul" in lista: # Como azul está en lista, nos pinta las sentencias
    print("Sentencia 1")
    print("Sentencia 2")
Sentencia 1
Sentencia 2

tupla = (1, 2, 3, 4)

if 6 in tupla: # Como el 6 no se encuentra en tupla, no nos pinta las sentencias
    print("Sentencia 1")
    print("Sentencia 2")  
```

## <mark style="color:blue;">3. La cláusula</mark> <mark style="color:blue;"></mark><mark style="color:blue;">`else`</mark>

En algunas ocasiones nos encontraremos con casos de uso en los que querremos una estructura condicional que ejecute unas sentencias en Python si la expresión es `True` pero además, que ejecute otras sentencias diferentes si la expresión es `False`. Para este tipo de casos se utiliza la cláusula `else`.

La sintaxis que debemos utilizar en Python 3 para definir la cláusula `else` dentro de una estructura `if` es la siguiente:

```python
if <expresión>:
    <sentencia(s)>
else:
    <sentencia(s)>
```

```python
num1 = 5
num2 = 10

if num1 < num2:
    print("El número 5 es menor que el número 10")
else:
    print("El número 10 es mayor que el número 5")
El número 5 es menor que el número 10

if num1 > num2:
    print("El número 5 es menor que el número 10")
else:
    print("El número 10 es mayor que el número 5")
El número 10 es mayor que el número 5
```

## <mark style="color:blue;">5. La cláusula</mark> <mark style="color:blue;"></mark><mark style="color:blue;">`elif`</mark>

Otros de los casos de uso que nos encontraremos con frecuencia es la implementación de una estructura condicional que requiera múltiples evaluaciones de varias expresiones para tomar la decisión de qué código ejecutar. Para estos casos específicos podemos utilizar la cláusula `elif`.

La sintaxis que debemos utilizar en Python 3 para definir la cláusula `elif` dentro de una estructura `if` es la siguiente:

```python
if <expresión>: # Si no se da esta claúsula salta a la siguiente
    <sentencia(s)>
elif <expresión>: # Si no se da esta claúsula salta a la siguiente
    <sentencia(s)>
elif <expresión>: # Si no se da esta claúsula salta a la siguiente
    <sentencia(s)
...
else: # Si no se da ninguna de las anteriores, hace esto
    <sentencia(s)>
```

Una cosa importante que debemos tener en cuenta es que podemos utilizar tantas cláusulas `elif` como consideremos oportunas.

```python
nombres = ["Alex", "Sonia", "Juan", "Laura"]

if "Pedro" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Pedro"
elif "Jorge" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Jorge")
elif "Marta" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Marta")
elif "Alex" in nombres: # Como este nombre está en la lista nos lo saca por pantalla
    print("Hola Alex")
else:
    print("El nombre no se encuentra en la lista")
Hola Alex

nombres = ["Maria", "Juan"]

if "Pedro" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Pedro")
elif "Jorge" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Jorge")
elif "Marta" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Marta")
elif "Alex" in nombres: # Cómo no se da esta claúsula salta a la siguiente
    print("Hola Alex")
else: # Como no hay ninguno de estos nombres en la lista, nos devuelve esto
    print("El nombre no se encuentra en la lista")
El nombre no se encuentra en la lista
```

## <mark style="color:blue;">6. Sentencia</mark> <mark style="color:blue;"></mark><mark style="color:blue;">`if`</mark> <mark style="color:blue;"></mark><mark style="color:blue;">en una sola línea</mark>

Como curiosidad interesante, Python 3 nos permite utilizar una sintaxis específica para implementar sentencias `if` en una sola línea de código. Sin embargo, en general esta opción no es muy recomendable debido a que puede aumentar la complejidad en la lectura del código fuente.

```python
num1 = 5
num2 = 10

if num1 < num2: print("El 5 es menor que el 10."); print("Obviamente.")
El 5 es menor que el 10.
Obviamente.
```

## <mark style="color:blue;">7. Operador condicional</mark>

Por último, Python soporta una construcción más relacionada con la sentencia `if` que puede resultarnos muy interesante para determinados casos de uso. A esta construcción se le denomina operador condicional.

La sintaxis que se utiliza para implementar el operador condicional en Python3 es la siguiente:

```python
<expresión1> if <expresión_condicional> else <expresión2>
```

Este operador nos permite simplificar el código que utilizamos para determinadas tareas como, por ejemplo, asignarle un valor a una variable en función de una condición.

```python
nombre = "Pedro"
nombre2 = "Alex"

edad = 18 if nombre == "Pedro" else 30
edad
18

tiempo = "lluvia"

# Como el tiempo no es sol, nos devuelve el mensaje: Vamos al cine
print("Vamos", "a la piscina" if tiempo == "sol" else "al cine")
Vamos al cine
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://afsh4ck.gitbook.io/desarrollo-con-python/control-de-flujo/estructuras-de-control-de-flujo/sentencias-if-elif-else.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
