Commit d3fcd807 authored by cbanchoff's avatar cbanchoff
Browse files

Agregué las teroías

parent 91dc1ca0
......@@ -6,6 +6,7 @@ ser las prácticas, guías, explicaciones o algunos ejemplos.
## Índice
- [Prácticas](./practicas)
- [Teorías](./teorias)
- [Guías](./guias)
- [Instalación de Python](./guias/instalacion_python.ipynb)
- [Git](./guias/guia_git.ipynb)
......
{
"cells": [
{
"cell_type": "markdown",
"id": "attached-construction",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Seminario de Lenguajes - Python\n",
"## Cursada 2021\n",
"\n",
"### Clase 1\n"
]
},
{
"cell_type": "markdown",
"id": "varied-biotechnology",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# ¿Qué sabemos de Python?\n",
"\n",
"- Completar: https://www.menti.com/bbh714ivt4\n",
"\n",
"<img src=\"imagenes/qr-inicial.png\" alt=\"Actividad inicial\" style=\"width:250px;\"/>\n",
"\n",
"[Resultados](https://www.mentimeter.com/s/b3bb07356d1dde4b611f15ad78ad385e/0d5a351469a9)"
]
},
{
"cell_type": "markdown",
"id": "lesser-watch",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Empezamos con las encuestas ...\n",
"\n",
"- Hagamos un par de encuestas:\n",
"\n",
"```\n",
"\n",
"ENCUESTA 1; ¿Saben qué es el software libre?\n",
"Si - NO\n",
"```\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "certified-arcade",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"```\n",
"ENCUESTA 2: ¿Usaron software libre?\n",
"A: Si - B: NO - C: No se\n",
"```\n"
]
},
{
"cell_type": "markdown",
"id": "printable-documentation",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# El software libre\n",
"\n",
"El **software libre** se refiere a la libertad de los usuarios para:\n",
"- ejecutar, \n",
"- copiar, \n",
"- distribuir, \n",
"- estudiar, \n",
"- cambiar y mejorar el software. \n"
]
},
{
"cell_type": "markdown",
"id": "operational-revision",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\n",
"# Python es software libre\n",
"\n",
"\n",
"Esto significa que disponemos de las cuatro libertades que figuran en la [definición del software libre](https://www.gnu.org/philosophy/free-sw.es.html):\n",
"\n",
"- La libertad de **usar** el programa, con cualquier propósito (**libertad 0**).\n",
"- La libertad de **estudiar** cómo funciona el programa, y adaptarlo a necesidades propias (**libertad 1**). \n",
"- La libertad de **distribuir** copias (**libertad 2**).\n",
"- La libertad de **mejorar** el programa y hacer públicas las mejoras a los demás, de modo que toda la comunidad se beneficie. (**libertad 3**). \n",
"\n",
"## El acceso al código fuente es un requisito previo para esto.\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "atomic-tampa",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# ¿Por qué hablamos de software libre?"
]
},
{
"cell_type": "markdown",
"id": "egyptian-gallery",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Nosotros vamos a usar software libre.\n",
"- Vamos a proponer que nuestros desarrollos van a ser software libre."
]
},
{
"cell_type": "markdown",
"id": "timely-monaco",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Hablemos de Python ...\n",
"\n",
"\n",
"- Desarrollado por [Guido Van Rossum](https://es.wikipedia.org/wiki/Guido_van_Rossum) en el centro de investigación en Matemáticas CWI en Holanda.\n",
"- En febrero se cumplieron [30 años de su aparición](https://twitter.com/sfermigier/status/1362084435999551493).\n",
"- El nombre proviene del grupo de cómicos ingleses [Monty Python](https://es.wikipedia.org/wiki/Monty_Python)\n",
"- Es un lenguaje que en los últimos años ha crecido de manera constante. \n",
" - [Stack Overflow Trends\n",
"](https://insights.stackoverflow.com/trends?tags=java%2Cc%2Cc%2B%2B%2Cpython%2Cc%23%2Cvb.net%2Cjavascript%2Cassembly%2Cphp%2Cperl%2Cruby%2Cvb%2Cswift%2Cr%2Cobjective-c)\n",
" - [https://githut.info/](https://githut.info/)\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "bridal-smart",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Documentación y referencias\n",
"\n",
"- Sitio Oficial: http://python.org/\n",
"- Documentación en español: https://wiki.python.org/moin/SpanishLanguage\n",
"- Python Argentina: http://python.org.ar/\n",
"- Otras referencias (iremos agregando estas referencias en el entorno del curso):\n",
" - https://docs.python-guide.org/\n",
" - https://realpython.com/\n",
"\n",
"**IMPORTANTE**: en los tutoriales y cursos en línea chequear la versión de Python. \n",
" "
]
},
{
"cell_type": "markdown",
"id": "bigger-determination",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# ¿Quiénes usan Python?\n",
"\n",
"Muchas [organizaciones](https://wiki.python.org/moin/OrganizationsUsingPython) han utilizado y utilizan Python para:\n",
"- Producción de [efectos especiales]( https://www.python.org/about/success/ilm/) de películas. \n",
"- En sistemas informáticos de la [NASA](https://www.python.org/about/success/usa/).\n",
"- Desarrollo [web](https://wiki.python.org/moin/OrganizationsUsingPython#Web_Development). \n",
"- En ámbito [científico](https://www.scipy.org/). \n",
"- Enseñanza de la programación, etc\n",
"\n",
"- [+ Info:](https://realpython.com/world-class-companies-using-python/)"
]
},
{
"cell_type": "markdown",
"id": "immune-going",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Características del lenguaje\n",
"\n",
"- Es un lenguaje de alto nivel, fácil de aprender. Muy expresivo y legible. "
]
},
{
"cell_type": "markdown",
"id": "intermediate-replica",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"```python\n",
"numero_aleatorio = random.randrange(5)\n",
"gane = False\n",
"print(\"Tenés 5 intentos para adivinar un entre 0 y 99\")\n",
"intento = 1\n",
"\n",
"while intento < 6 and not gane:\n",
" numero_ingresado = int(input('Ingresa tu número: '))\n",
" if numero_ingresado == numero_aleatorio:\n",
" print('Ganaste! y necesitaste {} intentos!!!'.format(intento))\n",
" gane = True\n",
" else:\n",
" print('Mmmm ... No.. ese número no es... Seguí intentando.')\n",
" intento += 1\n",
"if not gane:\n",
" print('\\n Perdiste :(\\n El número era: {}'.format(numero_aleatorio))\n",
"\n",
"```\n",
"- Sintaxis muy clara\n"
]
},
{
"cell_type": "markdown",
"id": "durable-tactics",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Características del lenguaje (cont.)\n",
"\n",
"- Es **interpretado**, **multiplataforma** y **multiparadigma**: ¿qué significa?\n",
"- Posee tipado dinámico y fuerte. \n",
"- Tiene un eficiente manejo de estructuras de datos de alto nivel. "
]
},
{
"cell_type": "markdown",
"id": "irish-allah",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Primeros pasos \n",
"\n",
"- Hay [intérpretes en línea](https://repl.it/languages/python3).\n",
"- Descargamos desde el [sitio oficial](https://www.python.org/).\n",
"\n",
"- Para **ejecutar** código Python:\n",
" - Usamos la consola de Python: donde se utiliza un modo interactivo y obtener una respuesta por cada línea. \n",
" - Usamos un IDE: como en cualquier otro lenguaje, se escribe el código en un archivo de texto y luego se invoca al intérprete para que lo ejecute.\n",
"- [+Info](https://python-unlp.github.io/guides//) "
]
},
{
"cell_type": "markdown",
"id": "pretty-current",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Algunas consideraciones \n",
"\n",
"- Se pueden utilizar [entornos virtuales](https://docs.python.org/3/tutorial/venv.html).\n",
" - [+Info](https://python-unlp.github.io/guides/entornos_virtuales)\n",
"- Existe un gestor de paquetes que facilita la instalación de las distintas librerías: [pip](https://pypi.org/project/pip/).\n",
" - [+Info](https://python-unlp.github.io/guides/manejo_de_paquetes)\n",
"- En nuestro caso, van a tener [una VM](https://catedras.linti.unlp.edu.ar/mod/url/view.php?id=29517) con las instalaciones básicas. "
]
},
{
"cell_type": "markdown",
"id": "thousand-establishment",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Estamos usando [Jupyter Lab](https://jupyter.org/)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "approximate-model",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"## Adivina adivinador....\n",
"import random\n",
"numero_aleatorio = random.randrange(5)\n",
"gane = False\n",
"\n",
"print(\"Tenés 3 intentos para adivinar un entre 0 y 99\")\n",
"intento = 1\n",
"\n",
"while intento < 4 and not gane:\n",
" numero_ingresado = int(input('Ingresa tu número: '))\n",
" if numero_ingresado == numero_aleatorio:\n",
" print('Ganaste! y necesitaste {} intentos!!!'.format(intento))\n",
" gane = True\n",
" else:\n",
" print('Mmmm ... No.. ese número no es... Seguí intentando.')\n",
" intento += 1\n",
"if not gane:\n",
" print('\\n Perdiste :(\\n El número era: {}'.format(numero_aleatorio))"
]
},
{
"cell_type": "markdown",
"id": "consistent-mission",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Empecemos por algo más simple\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "antique-fleet",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"x = 21\n",
"\n",
"print(x)\n",
"x ='hola!'\n",
"print(x + '¿Cómo están?')\n"
]
},
{
"cell_type": "markdown",
"id": "clinical-faculty",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- ¿Algo que llame la atención respecto a otros lenguajes vistos?"
]
},
{
"cell_type": "markdown",
"id": "greater-programming",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- No hay una estructura de programa (tipo program.. begin.. end).\n",
"- Las variables no se declaran. \n",
" - Las variables se crean **dinámicamente** cuando se les asigna un valor.\n",
"- Las variables pueden cambiar de tipo a lo largo del programa.\n",
" - Python cuenta con **tipado dinámico**\n"
]
},
{
"cell_type": "markdown",
"id": "coupled-supply",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Un poco más de variables en Python\n",
"\n",
"Vamos el siguiente código "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "average-accident",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"texto_1 = 'Estamos haciendo'\n",
"print (Texto_1 + 'diferentes pruebas')"
]
},
{
"cell_type": "markdown",
"id": "worth-spokesman",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- ¿Qué creen que imprime este código?"
]
},
{
"cell_type": "markdown",
"id": "conceptual-spice",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Reglas de nombres\n",
"\n",
"- Python hace diferencia entre mayúsulas y minúsculas. \n",
" - Las variables **texto_1** y **Texto_1** son DOS variables DISTINTAS.\n",
"- Los nombre de las variables sólo pueden contener letras, dígitos y **“_”**. \n",
"- Y **siempre** deben comenzar con letra. \n",
" - Vamos a ver que en algunos casos específicos pueden comenzar con **“_”**, pero tienen un significado especial.\n",
"- No pueden usarse ninguna de las palabras claves del lenguaje. Probar **help(\"keywords\")**\n"
]
},
{
"cell_type": "markdown",
"id": "optimum-convenience",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Asignación de variables\n",
"\n",
"- Las variables permiten referenciar a los objetos almacenados en la memoria. \n",
"- Asignar un valor a una variable indica que se va a \"apuntar\" o \"referenciar\" ese objeto a través de ese nombre de variable.\n",
"- Cada objeto tiene asociado **un tipo, un valor y una identidad**.\n",
" - La identidad actúa como un puntero a la posición de memoria del objeto.\n",
"-Una vez que se crea un objeto, su identidad y tipo no se pueden cambiar.\n",
"- Podemos obtener la identidad de un objeto con la función **id()**.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "martial-theology",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"a = \"hola\"\n",
"b = a\n",
"c = \"hola\"\n",
"print (a, b, c)\n",
"\n",
"print(id(c), id(a))"
]
},
{
"cell_type": "markdown",
"id": "driven-nightmare",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Respecto a los nombres de variables\n",
"\n",
"- Existen algunas convenciones que VAMOS a adoptar.\n",
"- Si se trata de un nombre compuesto vamos a usar el símbolo \"_\" para separar. \n",
"- Ejemplo:\n",
"```python\n",
"monto_adeudado = 100\n",
"valor_de_reembolso = 10\n",
"partida_pausada = True\n",
"\n",
"```\n",
"- Algunas otras convenciones:\n",
" - Los nombres de variables comienzan con letras minúsculas.\n",
" - No usar nombres tales como \"l\" u \"O\" que se pueden confundir con unos y ceros.\n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "centered-summary",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Python Enhancement Proposals (PEP)\n",
"\n",
"- Las PEPs son documentos que proporcionan información a la comunidad de Python sobre distintas características del lenguaje, novedades en las distintas versiones, guías de codificación, etc.\n",
"\n",
"- La [PEP 0](https://www.python.org/dev/peps/#introduction) contiene el indice de todas las PEPs.\n",
"- La [PEP 20](https://www.python.org/dev/peps/pep-0020/): el Zen de Python...\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "healthy-passage",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Guías de estilo de codificación\n",
"\n",
"**\"El código es leído muchas más veces de lo que es escrito\"** ( Guido Van Roussen)\n",
"\n",
"- Están especificadas en la [PEP 8](https://www.python.org/dev/peps/pep-0008/)\n",
"\n",
"- Hay guías sobre la [indentación](https://www.python.org/dev/peps/pep-0008/#indentation), [convenciones sobre los nombres](https://www.python.org/dev/peps/pep-0008/#naming-conventions), etc. \n",
"\n",
"- Algunos IDEs chequean que se respeten estas guías.\n",
"- Su adopción es MUY importante cuando se comparte el código."
]
},
{
"cell_type": "markdown",
"id": "transparent-viking",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Indentación en Python\n",
"\n",
"- **Indentar el código es una buena práctica de programación**. ¿Por qué creen?\n",
"- Algo que caracteríza a Python es que la **indentación es obligatoria**. \n",
"- ¿Cómo podemos indentar código?"
]
},
{
"cell_type": "markdown",
"id": "portable-comedy",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"### Buscar: ¿qué nos dice la PEP 8 sobre esto?"
]
},
{
"cell_type": "markdown",
"id": "smart-heaven",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Observemos el primer ejemplo:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fallen-attention",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"## Adivina adivinador....\n",
"import random\n",
"numero_aleatorio = random.randrange(5)\n",
"gane = False\n",
"\n",
"print(\"Tenés 3 intentos para adivinar un entre 0 y 99\")\n",
"intento = 1\n",
"\n",
"while intento < 4 and not gane:\n",
" numero_ingresado = int(input('Ingresa tu número: '))\n",
" if numero_ingresado == numero_aleatorio:\n",
" print('Ganaste! y necesitaste {} intentos!!!'.format(intento))\n",
" gane = True\n",
" else:\n",
" print('Mmmm ... No.. ese número no es... Seguí intentando.')\n",
" intento += 1\n",
"if not gane:\n",
" print('\\n Perdiste :(\\n El número era: {}'.format(numero_aleatorio))"
]
},
{
"cell_type": "markdown",
"id": "curious-superintendent",