<jupyter_start><jupyter_text>![Logo_unad](https://upload.wikimedia.org/wikipedia/commons/5/5f/Logo_unad.png)Escuela de Ciencias Básicas, Tecnología e IngenieríaECBTICurso:Introducción al lenguaje de programación PythonFebrero de 2020 Sesión 01 - Presentación del Curso - Introducción     **Lenguaje:** Python 3.8**Desarrollado en:** Notebook Jupyter**Versión:** 1.0**Fecha:** febrero de 2020**Tutor:** <NAME>, DSc. I.CMedellín, diciembre de 2020  TODOS DEBERÍAMOS SABER PROGRAMAR... TODOS!<jupyter_code>from IPython.display import YouTubeVideo, HTML, IFrame
YouTubeVideo('Y1HHBXDL9bg')<jupyter_output><empty_output><jupyter_text>Docente <NAME>- **Ingeniero Civil, Universidad Nacional de Colombia - Medellín**- **M.Sc. y D.Sc. Mecánica Computacional - UFRJ/Brasil**- **Correo: <EMAIL>**- Docente ocasional de tiempo completo. Escuela de Ciencias Básicas Tecnología e Ingenierías - ECBTI - [Universidad Nacional Abierta y a Distancia - UNAD](https://www.unad.edu.co/ "UNAD")  Lenguajes de Programación![Imagen](https://github.com/carlosalvarezh/FundamentosProgramacion_U_EAFIT/blob/master/images/LenguajesProgramacion.jpg?raw=true "")  Por qué usar Python?  Justificación`Python` es un lenguaje de programación multiplataforma, algunas de sus ventajas son: ayuda a mejorar la productividad ya que permite trabajar mucho más rápido que cualquier otro lenguaje, es versátil y soporta programación orientada a objetos, cuenta con una gran extensión de bibliotecas para un mejor uso, es un lenguaje de programación sostenible lo cual permite leer y modificar de una manera fácil los programas.  Con Python se pueden hacer:- Aplicaciones Web.- Análisis de Datos.- Aprendizajes de Maquina.- Visión Artificial.- Robótica, programar "pequeñas" computadoras(Raspberry Pi).- Juegos.- Web Scraping.- Automatizar(Scripts)  Algunas Empresas que usan Python:![Imagen](https://github.com/carlosalvarezh/FundamentosProgramacion_U_EAFIT/blob/master/images/PythonUsage.png?raw=true "")  Lenguajes de Programación más usados a nivel mundial:<jupyter_code>display(IFrame('https://www.tiobe.com/tiobe-index/', '100%', '600px'))<jupyter_output><empty_output><jupyter_text>Objetivo General:- Manejar conceptos básicos de programación Python orientando al participante en el conocimiento de la sintaxis y creación de programas funcionales.  Competencias:Tras participar del proceso cognoscitivo y práctico, se espera que el alumno este en capacidad de:Entender la sintaxis de lenguaje `Python` al leer fuentes de otros programadores.Crear(Escribir) Scripts en `Python`, para crear diferentes tipos de aplicaciones como tipo consola(terminal),`TUI`, `GUI` y páginas Web básicas.  Público Objetivo:Todas las personas que deseen aprender un lenguaje de programación, múltiples propósitos y diferentes tipos de aplicaciones.  Programa |**Sesión** | **Fecha**         |**Contenido** ||:---------:|:-----------------:|--------------||01|Vi - 11/10/19|Introducción, Lenguajes compilados vs interpredos, IDEs, Tipos de datos y variables||02|Mi - 16/10/19|Expresiones, Secuencias, Strings, I/O 1||03|Vi - 18/10/19|Condicionales, Ciclos y Rangos||04|Lu - 21/10/19|Funciones||05|Mi - 23/10/19|Listas||06|Lu - 28/10/19|Diccionarios||07|Mi - 30/10/19|I/O 2 - Manejo de Archivos||08|Vi - 01/11/19|Manipulación de archivos JSon||09|Mi - 06/11/19|Algoritmos Básicos||10|Vi - 08/11/19|Ordenamiento y Búsqueda||11|Mi - 13/11/19|POO||12|Vi - 15/11/19|Visualización de Información|  Por dónde empiezo? Lo primero es elegir una herramienta de trabajo sobre la cual realizar el código. A continuación me permito compartirles solo algunas herramientas de esas que he tenido la oportunidad de revisar y me parecen apropiadas para un curso de este nivel. No son las únicas, por el contrario, existen muchas otras más, quizás mejores, dependiendo del interés particular de desarrollo de cada quién.   Editores, IDE's, Notebooks**IDE** (*Integrated Development Environment*) o *Entorno de Desarrollo Integrado*, es una aplicación informática que permite la integración de varios servicios que permiten el desarrollo de un software o programa de computador. Normalmente consiste de:- Editor de Código fuente- DepuradorAlgunos Aplicativos usados para programar, enfoncándonos luego en `Python`, son:- **[PSeInt](http://pseint.sourceforge.net/ "PSeInt"):** "*PSeInt es una herramienta para asistir a un estudiante en sus primeros pasos en programación. Mediante un simple e intuitivo pseudolenguaje en español (complementado con un editor de diagramas de flujo), le permite centrar su atención en los conceptos fundamentales de la algoritmia computacional, minimizando las dificultades propias de un lenguaje y proporcionando un entorno de trabajo con numerosas ayudas y recursos didácticos*".- **[Anaconda](https://www.anaconda.com/ "Anaconda")**: suite de trabajo para desarrollo de programas en [Python](https://www.python.org/ "Python.org") o [R](https://www.r-project.org/ "R") para proyectos de computación científica, que incluye el Notebook [Jupyter](http://jupyter.org/ "Jupyter"), plataforma en la que están hechas estas notas del curso, y el IDE [Spyder](https://www.spyder-ide.org/ "Spyder"), entre otras herramientas.- **[PyCharm](https://www.jetbrains.com/pycharm-edu/ "PyCharm"):** es un entorno de desarrollo integrado (*IDE*) utilizado en la programación de computadoras, específicamente para el lenguaje `Python`. Es desarrollado por la compañía checa [JetBrains](https://www.jetbrains.com/ "JetBrains"). Proporciona análisis de código, un depurador gráfico, un probador de unidad integrado, integración con sistemas de control de versiones (*VCS*) y admite el desarrollo web con *Django*, así como Data Science con *Anaconda*.- **[repl.it](https://www.repl.it "repl.it"):** es una start-up basada en San Francisco y un *IDE* en línea. Su nombre proviene de "[read – eval – print loop](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop "repl")". Es compatible [*+50* lenguajes de programación](https://repl.it/languages "repl.it languages"): *JavaScript*, *Python*, *PHP*, *C/C++*, *Fortran* o incluso *QBasic*, entre muchos otros, así como de frameworks populares como Django, Ruby on Rails y Sinatra. Y si quieres lastimarte y escribir en Brainfuck, también puedes hacerlo.- **[Notepad++](http://notepad-plus-plus.org/ "Notepad"):** es un editor de código fuente (ojo, no ejecuta!!! solo edita!!!). Presenta resaltado de sintaxis, plegado de código y autocompletado limitado para lenguajes de programación, scripting y marcado, pero no terminación de código inteligente o verificación de sintaxis. Como tal, puede resaltar correctamente el código escrito en un esquema compatible, pero no se puede verificar si la sintaxis es internamente sólida o compilable. A partir de la versión 7.6.3, *Notepad++* puede resaltar los elementos sintácticos de *+70 lenguajes de programación*. Solo se cuenta para trabajar en el SO *Windows*.- **[Google Colab](https://colab.research.google.com/ "Google Colaboratory"):** *Colaboratory* (también conocido como *Colab*) es un entorno de *notebook Jupyter* gratuito que se ejecuta en la nube y almacena sus notebooks en *Google Drive*. *Colab* fue originalmente un proyecto interno de *Google* y a partir de octubre de 2019 *Colab* solo le permite crear notebooks con núcleos `Python 2` y `Python 3`; sin embargo, si tiene una computadora portátil con kernels `ir` o `swift`, funcionará, ya que tanto `R` como `Swift` están instalados en el contenedor. Otros núcleos como `Julia` aún no son compatibles.  De dónde obtengo información para aprender a programar?  AlgoritmosAlgunos libros introductorios en [Algoritmia](https://es.wikiversity.org/wiki/Algoritmia_y_programaci%C3%B3n_b%C3%A1sica/Aspectos_introductorios "Algoritmia"), que no emplean ningún lenguaje en particular - [<NAME>](http://latinoamerica.cengage.com/ls/introduccion-a-la-programacion-logica-y-diseno-7a-ed/ "<NAME>. Introducción a la programación Lógica y Diseño"). Introducción a la programación Lógica y Diseño (en físico, $$).- [Pinales y Velázquez](http://www.uaa.mx/direcciones/dgdv/editorial/docs/algoritmos.pdf "Pinales y Velázquez. Algoritmos Resueltos con Diagramas de Flujo y Pseudocódigo"). Algoritmos Resueltos con Diagramas de Flujo y Pseudocódigo (en pdf, libre descarga).  Python como lenguaje de programación (uno entre muchos)- [Python.org](https://www.python.org/ "Python.org"): Página oficial del lenguaje de programación Python (inglés)- [<NAME>. Think Python. 2a Ed. Green Tea Press.](http://greenteapress.com/wp/think-python-2e/ "<NAME>. Think Python"): Libro en PDF de libre descarga (inglés).    MooCs**MooC** es la abreviatura de **Curso masivo abierto en línea** (*Massive open online Course*, en inglés) . En términos simples, es un curso de estudio puesto a disposición por Internet para una gran cantidad de personas. Algunas de las compañías de cursos en línea más comunes que compiten por este nuevo negocio educativo son: [Udemy](https://www.udemy.com/ "Udemy"), [Edx](https://www.edx.org/ "Edx"), [Coursera](https://www.coursera.org/ "Coursera") y [DataCamp](https://www.datacamp.com/ "DataCamp"), entre muchos otros.Los *MooC* generalmente tienen fechas específicas de inicio y finalización. Los interesados miran conferencias de video en línea, completan las tareas y reciben la calificación de inmediato la mayor parte del tiempo. Con el auge de la globalización y la tecnología, la accesibilidad a la educación superior ha aumentado dramáticamente.Los MooC son generalmente gratuitos, y los cursos ofrecidos en línea a menudo provienen de algunas de las universidades más prestigiosas como *Harvard*, *MIT* y *Stanford*. Cada año, los *MooC* se vuelven más populares. Hay más cursos disponibles y la calidad de la educación en línea aumenta. Los MooC se caracterizan por su masividad, apertura y conectividad. Utilizan estrategias similares a las redes sociales, conectando a las masas con los beneficios del aprendizaje.Pero... cuál de todos escoger? en [este enlace](https://coolcollegehelpers.com/udemy-vs-edx-coursera-udacity/ "Udemy vs Edx vs Coursera vs Udacity") pueden encontrar una excelente descripción de cada uno de ellos y encontrar cuál se adapta más a sus necesidades de capacitación, o en [este](https://medium.com/@adiyagil/udemy-vs-coursera-vs-lynda-the-ultimate-comparison-70586665dca5 "Ultimate comparison") también, y [aquí](https://www.thecrowder.com/online-courses-sites?utm_source=me&utm_medium=organic&utm_campaign=education&utm_content=Udemy-VS-Coursera-VS-Lynda&ref=me-organic-education-Udemy-VS-Coursera-VS-Lynda "Online Courses Sites") encontrará un cuadro comparativo y acceso directo a algunas de esas plataformas.   Tutoriales on-line:Algunas páginas que ofrecen cursos on-line en diferentes áreas de las *TICs* (inglés/español). Algunos son libres ("grátis") pero si necesita certificado debes pagar.- **[Python Course](https://www.python-course.eu/index.php):** Excelente página para aprender `Python`a nivel básico, intermedio y/o avanzado (inglés)- **[SocraticaStudios](https://www.youtube.com/user/SocraticaStudios "Socratica")** Canal de [Youtube](https://www.youtube.com/ "Youtube") con algunos recursos en español.  Apps para Smartphones y Tablets- **[Sololearn](https://www.sololearn.com/Course/Python/)**  RepositoriosEn los repositorios de software encontrarán abundante información de códigos ya creados que les permitirán avanzar en el conocimiento de los diferentes esquemas de programación, así como ver cómo es que otros programan y tienen (posiblemente) buenas prácticas de programación que te servirán para tener unos códigos muy eficientes y límpios.- **[Github](https://github.com/ "Github")**  Por qué Python? - Lenguaje de programación de alto nivel creado por [Guido van Rossum](https://gvanrossum.github.io/ "Guido van Rossum's home page") a finales de los 80's. - Actualmente ocupa el tercer lugar como uno de los lenguajes de programación más ampliamente difundidos a nivel mundial. [TIOBE index noviembre/2019](https://www.tiobe.com/tiobe-index/ "tiobe.com")- Una de las mayores ventajas es su "simplicidad": En general, se requiere de muchas menos líneas de programación para ejecutar una determinada tarea que en otros lenguajes (`C/C++`, `java`, $\ldots$.).- Viene con una amplica colección de bibliotecas que permiten extender las capacidades del lenguaje.- [Este](https://www.youtube.com/watch?v=Og847HVwRSI&feature=emb_logo "Most popular programming languges 1965 - 2019") es un video muy interesante que muestra la evolución de los lenguajes de programación más usados a nivel mundial desde 1965 y hasta 2019. Ampliamente recomndable su visualización:<jupyter_code>YouTubeVideo('Og847HVwRSI')<jupyter_output><empty_output><jupyter_text>- Es un lenguaje de plataforma transversal, es decir, el código escrito en Windows trabajará bien en Linux o Mac OS sin la necesidad de realizar ningún tipo de cambios en el código.- Actualmente (***diciembre/2019***) el interprete se encuentra en la versión `3.8`, pero la mayoría de bibliotecas y códigos más usados aún se encuentran en las versiones `2.X`. La información oficila la podrán encontrar en la página de [Python.org](https://www.python.org "Python's homepage").- La diferencia entre ambas versiones no sobrepasa el 10%, por lo que se puede usar una u otra sin problemas para la mayoría de aplicaciones.  Ejecución desde Consola (Windows)![Imagen](https://github.com/carlosalvarezh/FundamentosProgramacion_U_EAFIT/blob/master/images/ConsolaW.PNG?raw=true "")  Mi primer Programa en Python<jupyter_code>print("Este es mi primer programa en Python!!!")
print("Hola Mundo en Python 3!")
print(3+4)<jupyter_output><empty_output><jupyter_text>Variables Expresiones y Sentencias  Valores y Tipos - Un valor es una de las cosas básicas con las que un programa trabaja.- Los valores pueden ser Números (punto flotante, enteros, complejos...) Caracteres o Cadenas de Caracteres (strings)<jupyter_code>type(c)
type("Hola Mundo!")
type(17)
type(17.)
type(3+2j)
type("17.0")
type('string')
z = 1,000,0000,000,00 #Producirá un error de semántica
print(type(z))
print(z)
1.000.000.000 #Producirá un error de sintáxis
1000000000000.8678568<jupyter_output><empty_output><jupyter_text>Variables - Una variable es un nombre que hace referencia a un valor.- Una sentencia de asignación crea nuevas variables y valores dados.<jupyter_code>mensaje = "Este es un mensaje"
n = 17
pi = 3.14159265<jupyter_output><empty_output><jupyter_text>- Este ejemplo realiza tres asignaciones.<jupyter_code>type(mensaje)
type(n)
type(pi)
x = n * pi
print(type(x))
z = n*mensaje
print(z)
p = pi * mensaje
print(p)<jupyter_output><empty_output><jupyter_text>Nombre de Variables y Palabras Claves (keywords)<jupyter_code>b = "Hola"
B = 5
v = B * b
print(v)<jupyter_output><empty_output><jupyter_text>- Nombres de variables pueden tener un tamaño arbitrariamente de caracteres.- Pueden contener letras y números, pero SIEMPRE deben empezar por una letra.- Es **"Kool"** usar letras en mayúscula, pero es una buena práctica empezar los nombres de variables en minúscula.- El carácter "guión bajo" (*underscore*), `_` , puede aparecer en el nombre de una variable. Usado frecuentemente en variables cuyo nombre está compuesto por diferentes palabras.- Si da a una variable un nombre ilegal, obtendrá un error de sintaxis.<jupyter_code>este_puede_ser_el_nombre_valido_de_una_variable = 1
print(este_puede_ser_el_nombre_valido_de_una_variable)
estaEsUnaVariable = 3
print(estaEsUnaVariable)
mamá = 3
print(mamá)
76Pesos = 76
print(76Pesos)
P3s0s 76 = 76
print(P3s0s76)
mas@ = 5.3 
esta variable = 2.5
print = "Avanzado"
print(class1)<jupyter_output><empty_output><jupyter_text>Palabras Clave (keywords) y funciones integradas (builtins)El archivo `keyword.py` se distribuye junto con la librería estándar de `Python`. Es generado automáticamente a partir del archivo `graminit.c`, perteneciente al código fuente del intérprete. Incorpora una lista que contiene el conjunto de palabras resevadas, y una simple función que determina la existencia de un `keyword` a partir de una cadena.<jupyter_code># Palabras clave

import keyword
listkw = keyword.kwlist
print(listkw)
print(len(listkw))
# Funciones integradas

import builtins
list_bins = dir(builtins)
print(list_bins)
print(len(list_bins))<jupyter_output><empty_output><jupyter_text>Ayuda (documentación)<jupyter_code>help("and")<jupyter_output><empty_output><jupyter_text>Asignación Múltiple - Otra de las ventajas que *Python* nos provee, es la de poder asignar en una sola instrucción, múltiples variables.<jupyter_code>a, b, c, d = "class", 15, True, 3.8
type(c)
print(a)
print(b)
print(c)
print(d)<jupyter_output><empty_output><jupyter_text>Operadores y Operandos * Los operadores son símbolos especiales que representan cálculos:   - Suma: `+`  - Resta: `-`  - Multiplicación: `*`  - División: `/`  - Potenciación: `**`  - División entera: `//`  - Módulo: `%`<jupyter_code>r = 3 + 2
print(r)
r = 1 - 4
print(r)
r = 3 ** 5
print(r)
r = 5 / 3
print(r)
r = 5 // 3
print(r)
r = 40 % 4
print(r)<jupyter_output><empty_output><jupyter_text>Observaciones!- En *Python* el operador " `^` " representa el operador bit a bit `XOR`.- En *Python 2.x*, el operador división puede no hacer lo que usted esperaría que hiciera:<jupyter_code>minuto = 59
minuto/60
7/2.<jupyter_output><empty_output><jupyter_text>- En *Python 2.x* el operador `/` realiza la operación "*floor division*". Cuando los operandos son enteros, el resultado es la parte entera.- En *Python 3.x*, el resultado es un número de punto flotante.  Operadores a nivel de bit - Operador `&` (*and*): devuelve $1$ si el primer bit operando es $1$ y el segundo bit operando es $1$. Se devuelve $0$ en caso contrario.- Operador `|` (*or*): devuelve $1$ si el primer operando es $1$ o el segundo operandos $1$. Para el resto de casos se devuelve $0$.- Operador `^` (*xor*): devuelve $1$ si uno de los operandos es $1$ y el otro no lo es.- Operador `~` (*not*): sirve para negar uno a uno cada bit; es decir, si el operando es $0$, cambia a $1$ y si es $1$, cambia a $0$.<jupyter_code>from IPython.core.display import HTML
def css_styling():
    styles = open("custom.css", "r").read()
    return HTML(styles)
css_styling()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10305719921104536, 'fraction_numerical': 0.01824457593688363, 'mean_word_length': 5.431642001409443, 'pattern_counts': {'":': 1, '<': 68, '<?xml version=': 0, '>': 68, 'https://': 34, 'lorem ipsum': 0, 'www.': 23, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '616184', 'license': 'MIT', 'n_tokens_mistral': 6559, 'n_tokens_neox': 6264, 'n_words': 2085, 'path': 'Sesion_01_Introduccion.ipynb', 'repo_name': 'UNADCdD/Python-intro', 'size': '18349'}