<jupyter_start><jupyter_text>Sesión 2 Fundamentos de Programación  Temario  Semana 1- Presentación del curso.    - Presentación del docente.    - Reglas Generales.    - Retos.    - Miscelanea.- Computación.    - Hardware/Software.    - Estructura funcional.- Metodología de programación.    - Definición.    - Ejemplos.    - Fases de programación.  Semana 1- Paradigmas de programación.    - Imperativa.        - Estructurado.        - Procedimental.        - Orientado a objetos.    - Declarativa.        - Lógica.        - Funcional.  Semana 1- Lenguajes de programación.    - Introducción a los lenguajes de programación.    - Lenguaje Compilado.    - Lenguaje Interpretado.- Entornos de desarrollo.- Diagramas de flujo.- Algoritmos.- Seudocodigo.- Python.    - Historia.    - Aplicaciones.- Extra: Repositorios de código.  Miscelanea**¿ Cúal es la fecha límite para la entrega de los retos?**El domingo antes de las 9:00pm de la semana que finaliza el reto (para reto 1 y reto 5, seria el domingo de la semana 2 y 7 respectivamente).**¿ Cuando inicia el curso de ingles?**La semana que viene.  Paradigmas de programación - Representación de un enfoque de programación.- Permite la generación de soluciones con un conjunto de normas específicas.- Propuesta tecnológica adoptada por una comunidad de programadores.- Imperativa y Declarativa.  Programación Imperativa - Consiste en una secuencia claramente definida de instrucciones para ejecutar en el ordenador.- El código fuente encadena instrucciones que debe ejecutar en cada momento el ordenador para alcanzar un resultado.- Para gestionar las instrucciones, se integran estructuras de control como bucles o anidamientos.- Las variables se modifican durante la ejecución del programa.- Código altamente comprensible.  Programación estructurada- Método tradicional de programación.- Ejecución de forma secuencial.- Excepción: Cuando se tiene una estructura de control (if, while, etc) que provoca un salto en la secuencia.- Definición del algoritmo.- Conversion del algoritmo en una secuencia de ordenes.<jupyter_code># Realizo la suma
var_result = 4 * 6
# Imprimo el resultado
print(var_result)
var_result = 9 * 25
# Imprimo el resultado
print(var_result)
var_result = 11 * 17
# Imprimo el resultado
print(var_result)<jupyter_output>24
225
187<jupyter_text>Programación Procedimental- Agrupa una serie de instrucciones dentro de un procedimiento o una función.- Se ejecuta cada vez que sea invocado.<jupyter_code># Defino una función de suma
def fn_miFuncion(letra1, num_b): # <apuntador 1>
    # devolverte un valor
    print( letra1 * num_b)
    
# Obtengo el resultado llamando la función de suma
fn_miFuncion(5, 10)<jupyter_output>50<jupyter_text>Programación Orientada a Objetos (POO)- Transformación de objetos del mundo real en entidades computacionales.- Compuestas por atributos y métodos.- Permiten aislar el código en clases.- Encapsulamiento.- Cohesion.- Desacoplamiento de código.<jupyter_code># Definición de la clase Lata
class Lata:
    # Defino atributos para mi lata
    datos = "La lata es de {} y contiene {} mililitros"
    tipoLata = ""
    ml = 0
    # Constructor
    def __init__(self,tipoLata, mililitros):
        # Defino parametros de mi objeto
        self.tipoLata = tipoLata
        self.ml = mililitros
    # Creo una funcion para imprimir los datos de la lada
    def fn_imprimirDatos(self):
        print(self.datos.format(self.tipoLata,self.ml))
    def fn_abrirLata(self):
        print("Se abrio la lata de {} de {} mililitros".format(self.tipoLata,self.ml))
var_lata1 = Lata("tomate",500)
var_lata1.fn_abrirLata()<jupyter_output>Se abrio la lata de tomate de 500 mililitros<jupyter_text>Programación declarativa - A diferencia de la programación imperativa, describe el Qué.- Abstracción del código fuente.- Uso de algoritmos que encuentra y utilizan automáticamente los métodos adecuados.- Considerablemente mas rápido.- Programación funcional.<jupyter_code># Tengo una lista de numeros del 1 al 10 y quiero elevar al cuadrado cada numero.
items = list(range(1,11))

# Método imperativo
cuadrados = []
for i in items:
    cuadrados.append(i**2)
print(items,cuadrados, sep = "\n")
items = list(range(1,11))

# Método declarativo ( Programación funcional)
cuadrados = map(lambda x: x **2, items)
print(items,list(cuadrados),sep = "\n")<jupyter_output>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]<jupyter_text>Lenguajes de Programación             "Es un sistema de comunicación, estructurado, compuesto por reglas y simbolos que permite establecer procesos entre uno o mas puntos"                 "El lenguaje natural es utilizado por los seres humanos para entablar conversaciones."                 "El lenguaje de máquina es utilizado por los componentes de hardware para ejecutar tareas propuestas."      Definición- Es un método, compuesto por reglas, palabras reservadas y simbolos que permite establecer una comunicación entre un ser humano y una máquina.- Permite al programador, construir rutinas que luego seran ejecutadas por dispositivos capaces de procesar lenguaje de máquina.- Sitios WEB, bots, semaforos, lineas de ensamblaje, sistemas bancarios.  Lenguaje Compilado- Requiere un compilador para su procesamiento.- En ciertos casos, esta limitado al sistema operativo.- Para cambios en el código se necesita recompilar.- .NET, Java, Swift.  Compilador         Fig 1. Proceso de compilación. - Traduce el código de un programa (Entrada) a un lenguaje de máquina.    - Analizador.    - Optimizador.    - Generador de código objetivo.- Genera archivos de salida con el código compilado.  Lenguaje Interpretado- Lenguaje que no requiere una compilación para ejecutarse.- Su ejecución se realiza conforme se va leyendo el código.- PHP, Python, Javascript, **HTML**.<jupyter_code># Ejemplo de código interpretado

a = "10"
# transformación o parse.
a = float(a)
print(a)<jupyter_output>10.0
{'fraction_non_alphanumeric': 0.07145270270270271, 'fraction_numerical': 0.015371621621621622, 'mean_word_length': 3.925956738768719, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '467489', 'license': 'MIT', 'n_tokens_mistral': 2028, 'n_tokens_neox': 1962, 'n_words': 705, 'path': 'Week 01/2 - Programmatic Languages.ipynb', 'repo_name': 'miguelmejiaq/python-fundamentals', 'size': '5920'}