<jupyter_start><jupyter_text>Repaso ¿Qué son las funciones? **<NAME>** en su libro _"Python para todos"_ nos dice:>"Una **función** es un fragmento de código con un nombre asociado que realiza una serie de tareas y devuelve un valor."  ¿Para que se usan? La primer utilidad sería para no repetir código, esto nos permite evitar errores; y si suceden, que los errores sean más fáciles de corregir  Ejecicio 1Los alcanos son moléculas orgánicas que siguen la fórmula $C_nH_{2n+2}$ (siempre y cuando sean de cadena abierta). Cree entonces una función que dado el número carbónos  e hidrógenos **(en ese orden)** nos devuelva la masa molecular del alcano.Luego, en otra celda escribir los `input()` y `print()` necesarios para que el usuario ingrese la cantidas y se imprima el resultado<jupyter_code>def masa_alcano(nro_carbono, nro_hidrogeno):
    masa = 12*nro_carbono + 1*nro_hidrogeno
    return masa
C = int(input("Ingrese el numero de carbonos: "))
H = int(input("Ingrese el numero de hidrogenos: "))
print("la masa del alcano es ", masa_alcano(C, H),"g/mol")<jupyter_output>Ingrese el numero de carbonos:  6
Ingrese el numero de hidrogenos:  14<jupyter_text>Ejercicio 2Dada la fórmula del MRUV: $d = d_0 + v_0*t +1/2 * a*t^2$. Tomese $d_0$ nulo, y $a$ igual a la aceleración de la gravedad. Definase una función que devuelva el espacio ingresado el tiempo y la velocidad inicial.<jupyter_code>def espacio(vel_ini,tiempo):
    """Devuelve el espacio en MRUV.
    Entradas: velocidad inicial, tiempo
    Salida: espacio
    Considerando d0 nulo
    """
    aceleracion = 9.80/2
    distancia = vel_ini*tiempo+aceleracion*(tiempo**2)
    return distancia
Velocidad_Inicial = float(input("Ingrese la Velocidad Inicial del objeto (en m/s): "))
Tiempo = float(input("Ingrese el tiempo en el que hizo el recorrido: (en s)"))
print("La distancia recorrida por el objeto es: ", espacio(Velocidad_Inicial,Tiempo)," metros")<jupyter_output>Ingrese la Velocidad Inicial del objeto (en m/s):  50
Ingrese el tiempo en el que hizo el recorrido: (en s) 4<jupyter_text>Control de FlujoEn nuestros programas no solo necesitamos que una serie de ordenes se produzcan en una secuencia determinada, sino que a veces necesitaremos que determinadas condiciones se ejecuten una o más veces dependiendo si se cumplen tal o cual condición. Podemos decir que nuestro programa podrá "tomar decisiones" dependiendo de si se cumplen determinadas condiciones.Esto se conoce como **control de flujo**. Forman parte del control de flujo las _sentencias condicionales_ y los _bucles_. Sentencias condicionalesLas **sentencias condicionales** ejecutan un fragmento de código u otro dependiendo si se cumple determinada condición. En python los condicionales se escriben utilizando: `if`, `elif` y `else`.  Ejemplo 1Detengamonos a ver el siguiente fragmento de código:```pythonif sueño == True:    print("Beber café")else:    print("Seguí trabajando")```Este fragmento es la codificación del siguiente flujograma:![Flujograma](Diagramas/Ejemplo-if-else.png) Vemos que para hacer una sentencia condicional en python necesitamos un `if` (_si_ en inglés) seguido de una condición (para este caso `Sueño == True`), finalizando la linea con `:`. Todas las lineas siguiente a los `:` que queremos que se ejecuten si se cumple la condición del `if` deben estar indendadas a 4 espacios.Lo que sigue al bloque del `if` es un bloque perteneciente al `else` (_si no_ en inglés). El `else` no es necesario, sino que este sirve para que crear un bloque de codígo que se ejecutará **si no se cumple** la condición del `if`. Vemos que se escribe `else` seguido de `:`, pues como el bloque se ejecutará cuando no se cumpla la condición anterior, por lo que **no lleva condición**.En el Ejemplo 1, vemos que se realiza la comparación entre el valor almacenado en `Sueño` y el valor `True`. En realidad como `Sueño` es una variable que va a contener un valor booleano, es decir `True` o `False`, podemos simplificar el código como:```pythonif sueño:    print("Beber café")else:    print("Seguí trabajando")```Esto funcionará de igual manera, ya que el bloque del `if` se ejecuta cuando el valor sea `True`, lo mismo que nos devolvería la comparación `Sueño == True`.Veamos ahora el problema del ejemplo 2  Ejemplo 2Escriba un programa que compare (mayor, menor o igual) dos números introducidos por teclado.<jupyter_code>numero_1 = int(input("Ingrese el primer número: "))
numero_2 = int(input("Ingrese el segundo número: "))

if numero_1 > numero_2:
    print("El primer número es mayor que el segundo")
else:
    if numero_1 < numero_2:
        print("El primer número es menor que el segundo")
    else:
        print("Ambos números son iguales")<jupyter_output>Ingrese el primer número:  5
Ingrese el segundo número:  10<jupyter_text>En esta solución se logran realizar dos comparaciones _anidando_ otro condicional dentro del bloque del `else`. Como el bloque completo está dentro del `else`, es por eso que el `if` en la linea 7 está a _4 espacios_ y el print en la linea 8 se encuentra a _8 espacios_.Esta solución es correcta, sin embargo, si ponemos demasiados condicionales anidados el código se hace cada vezmás dificil de leer. Esta es otra solución posible, utilizando `elif` (sería como juntar un `else` y un `if`). Si la condición del `if` no se cumple, el programa evaluará la condición del `elif`; y si esta no se cumple, realiza la acción del `else`:<jupyter_code>numero_1 = int(input("Ingrese el primer número: "))
numero_2 = int(input("Ingrese el segundo número: "))

if numero_1 > numero_2:
    print("El primer número es mayor que el segundo")
elif numero_1 < numero_2:
    print("El primer número es menor que el segundo")
else:
    print("Ambos números son iguales")<jupyter_output>Ingrese el primer número:  5
Ingrese el segundo número:  10<jupyter_text>Inclusive podemos utilizar multiples elif, así como también poner un sentencias condicionales dentro de una función:<jupyter_code>def compara_numeros(n_1, n_2):
    """Acepta dos valores (n_1 y n_2) y los compara.
    Devuelve "es mayor", "es menor", "es igual" según
    n_1 sea mayor, menor o igual a n_2
    """
    if n_1 > n_2:
        return "es mayor"
    elif n_1 < n_2:
        return "es menor"
    elif n_1 == n_2:
        return "es igual"
    else:
        print("Ocurrió un error")
numero_1 = int(input("Ingrese el primer número: "))
numero_2 = int(input("Ingrese el segundo número: "))

comparacion = compara_numeros(numero_1, numero_2)

print(numero_1, comparacion, "que", numero_2)<jupyter_output>Ingrese el primer número:  5
Ingrese el segundo número:  10
{'fraction_non_alphanumeric': 0.0796728264162375, 'fraction_numerical': 0.011057255377158437, 'mean_word_length': 4.746736292428198, 'pattern_counts': {'":': 0, '<': 20, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '652661', 'license': 'CC-BY-4.0', 'n_tokens_mistral': 2285, 'n_tokens_neox': 2286, 'n_words': 895, 'path': 'Clase 2 - Condicionales.ipynb', 'repo_name': 'py-crash/fundamentos-de-informatica', 'size': '6615'}