<jupyter_start><jupyter_text>Ejercicio - Automóviles:Escribamos una función que almacene información sobre un automóvil en un diccionario.La función siempre debe recibir un fabricante y un nombre de modelo.Debería aceptar también un número arbitrario de argumentos keyword.Llamemos a la función con la información requerida y otros dos pares de nombre-valor, como un color o una característica opcional.Nuestra función debería funcionar para una llamada como esta:car = make_car ('subaru', 'outback', color = 'blue', tow_package = True)Imprimamos el diccionario que devuelve para asegurarnos de que toda la información esté almacenado correctamente.<jupyter_code>def make_car (fabricante, modelo, **keyword):
    keyword['fabricante']=fabricante
    keyword['modelo']=modelo
    print(f'{keyword}')
make_car ('subaru', 'outback', color = 'blue', tow_package = True)<jupyter_output>{'color': 'blue', 'tow_package': True, 'fabricante': 'subaru', 'modelo': 'outback'}<jupyter_text>Ejercicio - Variables globales y localesA partir de las funciones calculo_a y calculo_b:1. Verificar qué valores devuelven con los parámetros de entrada: x=3, y=4.2. Ejecutar el siguiente código. Da error? Por qué? calculo_a(10,20) r**porque r es una variable local de la función**3. Ejecutar el siguiente código. Da error? Por qué? la variable r cambia su valor cuando se llama a la función? Por qué?r = 100a = calculo_a(10,20)a, r**No tira error porque es una variable global, y no se modifica por lo que se hizo localmente**4. Volver a ejecutar el siguiente código. Da error? Por qué?calculo_a(10,20)r**No tira error porque ya la definí como global en el punto anterior**5. Ejecutar el siguiente código. Da error? Porque? Las variables x, y son globales o locales?x = calculo_a(3,4)y = calculo_a(2,5)z = calculo_b(x, y)x , y, z**Hay unas locales (que no estoy viendo directamente acá), y unas globales que son las que me devuelve y muestro en pantalla**<jupyter_code>def calculo_a(x, y):
    z = x * y
    if z > 10:
        r = z * (x + y)
    else:
        r = z + (x + y)
        
    return r
def calculo_b(x, y):
    z = x * y
    if z > 10:
        s = z * (x + y)
    else:
        s = z + (x + y)
        
    return s
calculo_a(3,4)

r = 100
a = calculo_a(10,20)
a, r
calculo_a(10,20)
r
x = calculo_a(3,4)
y = calculo_a(2,5)
z = calculo_b(x, y)
x , y, z<jupyter_output><empty_output><jupyter_text>Prueba de levantar un error e imprimir qué tipo de error se está levantando<jupyter_code>try:
    a = 0/0
except Exception as ex:
    print(type(ex).__name__)
    exit()<jupyter_output>ZeroDivisionError<jupyter_text>Ejercicio - Imports:Utilizando un programa que hayamos escrito (puede ser automóviles) que tenga una función, almacenemos esa función en un archivo separado. Importemos la función en nuestro archivo de programa principal y llamemos a la función utilizando cada uno de estos enfoques:import module_namefrom module_name import function_namefrom module_name import function_name as fnimport module_name as mnfrom module_name import *<jupyter_code>import auto
from auto import crear_auto
from auto import crear_auto as ca
import auto as au
from auto import *
auto.crear_auto ('subaru', 'outback', color = 'blue', tow_package = True)
crear_auto ('subaru', 'outback', color = 'blue', tow_package = True)
ca ('subaru', 'outback', color = 'blue', tow_package = True)
au.crear_auto ('subaru', 'outback', color = 'blue', tow_package = True)<jupyter_output>{'color': 'blue', 'tow_package': True, 'fabricante': 'subaru', 'modelo': 'outback'}<jupyter_text>Ejercicio - ExceptionsEjecutemos este código para distintos valore de x (0, 1 y 20) para entender el flujo normal y de excepciones<jupyter_code># x = 10
# x = 0
# x = 1
x = 20
try:
    print("Before division")
    result = 1 / x
    print("After division")
except:
    print("Error case")
else:
    print("Pass case")
finally:
    #Finally clause:
    print("The [finally clause] is hit")<jupyter_output>Before division
After division
Pass case
The [finally clause] is hit
{'fraction_non_alphanumeric': 0.09830761572921852, 'fraction_numerical': 0.014932802389248382, 'mean_word_length': 4.636746143057503, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 19, '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': '138029', 'license': 'MIT', 'n_tokens_mistral': 1457, 'n_tokens_neox': 1419, 'n_words': 495, 'path': 'clase_2_python/ej_clase_2.ipynb', 'repo_name': 'alanpirotta/data_science_dh', 'size': '4018'}