diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..50bf771
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+
+.ipynb_checkpoints/*
+.DS_Store
diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..24ee5b1
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+3.13
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..8312341
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,11 @@
+{
+ "go.goroot": "/home/nick/.local/share/mise/installs/go/1.24.4",
+ "debug.javascript.defaultRuntimeExecutable": {
+ "pwa-node": "/home/nick/.local/share/mise/shims/node"
+ },
+ "go.alternateTools": {
+ "go": "/home/nick/.local/share/mise/shims/go",
+ "dlv": "/home/nick/.local/share/mise/shims/dlv",
+ "gopls": "/home/nick/.local/share/mise/shims/gopls"
+ }
+}
\ No newline at end of file
diff --git a/01_string_input_print.ipynb b/01_string_input_print.ipynb
index 184b11a..60c0d08 100644
--- a/01_string_input_print.ipynb
+++ b/01_string_input_print.ipynb
@@ -1,141 +1,141 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "# 1. Texto, preguntas y arte\n",
- "\n",
- "## Cadenas de caracteres, `input()` y `print()`\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Cadenas de caracteres (strings)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Observa las siguientes cadenas y ejecuta las celdas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"esto es una cadena de texto\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "'todo lo que escribas dentro de las comillas es una cadena de texto'"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Haciendo preguntas: input()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Observa los siguientes ejemplos y ejecuta las celdas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "input(\"¿Cómo te llamas?\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "input(\"¿De dónde eres?\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Arte de texto ASCII: print()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- " \n",
- "- Observa el siguiente ejemplo y ejecuta las celdas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (\" /\\_/\\ \")\n",
- "print (\" >^.^< \")\n",
- "print (\" / \\ \")\n",
- "print (\" (___)___\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "# 1. Texto, preguntas y arte\n",
+ "\n",
+ "## Cadenas de caracteres, `input()` y `print()`\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 1. Cadenas de caracteres (strings)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Observa las siguientes cadenas y ejecuta las celdas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"esto es una cadena de texto\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "'todo lo que escribas dentro de las comillas es una cadena de texto'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. Haciendo preguntas: input()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Observa los siguientes ejemplos y ejecuta las celdas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "input(\"¿Cómo te llamas?\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "input(\"¿De dónde eres?\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Arte de texto ASCII: print()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " \n",
+ "- Observa el siguiente ejemplo y ejecuta la celda:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (\" /\\_/\\ \")\n",
+ "print (\" >^.^< \")\n",
+ "print (\" / \\ \")\n",
+ "print (\" (___)___\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/02_variables.ipynb b/02_variables.ipynb
index e570089..bb548f6 100644
--- a/02_variables.ipynb
+++ b/02_variables.ipynb
@@ -1,139 +1,143 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 2. Eventos y favoritos\n",
- "\n",
- "## Variables y concatenación de cadenas de texto\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Organizando un evento\n",
- "\n",
- "- Estás organizando un evento y has creado el siguiente formulario de registro para los participantes:\n",
- "\n",
- " ```\n",
- " Formulario de registro\n",
- " nombre = __________________\n",
- " apellido_paterno = __________________\n",
- " apellido_materno = __________________\n",
- " ```"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- El primer participante llega y completas el formulario:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "primer_nombre = \"Norma\"\n",
- "segundo_nombre = \"Julieta\"\n",
- "apellido_paterno = \"Velasco\"\n",
- "apellido_materno = \"Lazcano\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Luego imprimes lo que ingresaste en el formulario de registro:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (primer_nombre)\n",
- "print (segundo_nombre)\n",
- "print (apellido_paterno)\n",
- "print (apellido_materno)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Favoritos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 2. Eventos y favoritos\n",
+ "\n",
+ "## Variables y concatenación de cadenas de texto\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Organizando un evento\n",
+ "\n",
+ "- Estás organizando un evento y has creado el siguiente formulario de registro para los participantes:\n",
+ "\n",
+ " ```\n",
+ " Formulario de registro\n",
+ " nombre = __________________\n",
+ " apellido_paterno = __________________\n",
+ " apellido_materno = __________________\n",
+ " ```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- El primer participante llega y completas el formulario:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "primer_nombre = \"Norma\"\n",
+ "segundo_nombre = \"Julieta\"\n",
+ "apellido_paterno = \"Velasco\"\n",
+ "apellido_materno = \"Lazcano\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Luego imprimes lo que ingresaste en el formulario de registro:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (primer_nombre)\n",
+ "print (segundo_nombre)\n",
+ "print (apellido_paterno)\n",
+ "print (apellido_materno)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Favoritos"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "nombre = input(\"¿Cómo te llamas\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "comida_favorita = input (\"¿Cuál es tu comida favorita?\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "print (\"¡Hola! Mi nombre es \" + nombre)\n",
+ "print (\"Mi comida favorita es \" + comida_favorita) \n",
+ "print (\"La comida favorita de \" + nombre + \" es \" + comida_favorita)"
+ ]
+ }
+ ],
"metadata": {
- "tags": []
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
},
- "outputs": [],
- "source": [
- "nombre = input(\"¿Cómo te llamas\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "comida_favorita = input (\"¿Cuál es tu comida favorita?\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (\"¡Hola! Mi nombre es \" + nombre)\n",
- "print (\"Mi comida favorita es \" + comida_favorita) \n",
- "print (\"La comida favorita de \" + nombre + \" es \" + comida_favorita)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/03_list_if_in_else.ipynb b/03_list_if_in_else.ipynb
index f77f669..3e45158 100644
--- a/03_list_if_in_else.ipynb
+++ b/03_list_if_in_else.ipynb
@@ -1,105 +1,105 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 3. En una librería\n",
- "\n",
- "## Listas e `if`... `in`... / `else`...\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Eres el dueño de una librería. En el estante de programación hay:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "libros_de_programacion = [\"Aprende Python\", \"Python para todos\", \"Introducción a python\"]\n",
- "print (libros_de_programacion)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Entra una nueva clienta y le preguntas qué libro desea:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "libro_deseado = input(\"¡Hola! ¿Qué libro te gustaría comprar?\")\n",
- "print (libro_deseado)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Verificas si tienes el libro y respondes en consecuencia:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "if libro_deseado in libros_de_programacion:\n",
- " print (\"¡Sí, lo tenemos a la venta!\")\n",
- "else:\n",
- " print (\"Lo siento, no vendemos ese libro\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 3. En una librería\n",
+ "\n",
+ "## Listas e `if`... `in`... / `else`...\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Eres el dueño de una librería. En el estante de programación hay:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "libros_de_programacion = [\"Aprende Python\", \"Python para todos\", \"Introducción a python\"]\n",
+ "print (libros_de_programacion)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Entra una nueva clienta y le preguntas qué libro desea:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "libro_deseado = input(\"¡Hola! ¿Qué libro te gustaría comprar?\")\n",
+ "print (libro_deseado)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Verificas si tienes el libro y respondes en consecuencia:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if libro_deseado in libros_de_programacion:\n",
+ " print (\"¡Sí, lo tenemos a la venta!\")\n",
+ "else:\n",
+ " print (\"Lo siento, no vendemos ese libro\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
},
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/04_list_append_remove.ipynb b/04_list_append_remove.ipynb
index c821fdd..71c5112 100644
--- a/04_list_append_remove.ipynb
+++ b/04_list_append_remove.ipynb
@@ -1,115 +1,119 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 4. Compras de alimentos\n",
- "\n",
- "## Métodos de lista: `.append()` y `.remove()`\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Vas a una tienda de abarrotes en donde tienes que comprar algunos ingredientes para preparar un mole:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "lista_de_compras = [\"almendras\", \"chocolate\", \"chiles\"]\n",
- "print (lista_de_compras)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Justo antes de salir de casa, te preguntas si tienes que comprar algo más. Si el artículo no está en la lista, lo añades:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "nuevo_articulo = input(\"¿Qué más debo comprar?\")\n",
- "\n",
- "if nuevo_articulo in lista_de_compras:\n",
- " print (nuevo_articulo + \" ya está en la lista de compras\")\n",
- " print (lista_de_compras) \n",
- "else:\n",
- " lista_de_compras.append(nuevo_articulo)\n",
- " print (lista_de_compras)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Por último, te preguntas si tienes que quitar un artículo. Si es así, lo eliminas de la lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "articulo_a_quitar = input(\"¿Qué debo quitar?\")\n",
- "\n",
- "if articulo_a_quitar in lista_de_compras:\n",
- " lista_de_compras.remove(articulo_a_quitar)\n",
- " print (lista_de_compras)\n",
- "else:\n",
- " print (articulo_a_quitar + \" no está en la lista\")\n",
- " print (lista_de_compras)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "# 4. Compras de alimentos\n",
+ "\n",
+ "## Métodos de lista: `.append()` y `.remove()`\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Vas a una tienda de abarrotes en donde tienes que comprar algunos ingredientes para preparar un mole:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lista_de_compras = [\"almendras\", \"chocolate\", \"chiles\"]\n",
+ "print (lista_de_compras)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Justo antes de salir de casa, te preguntas si tienes que comprar algo más. Si el artículo no está en la lista, lo añades:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "nuevo_articulo = input(\"¿Qué más debo comprar?\")\n",
+ "\n",
+ "if nuevo_articulo in lista_de_compras:\n",
+ " print (nuevo_articulo + \" ya está en la lista de compras\")\n",
+ " print (lista_de_compras) \n",
+ "else:\n",
+ " lista_de_compras.append(nuevo_articulo)\n",
+ " print (lista_de_compras)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Por último, te preguntas si tienes que quitar un artículo. Si es así, lo eliminas de la lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "articulo_a_quitar = input(\"¿Qué debo quitar?\")\n",
+ "\n",
+ "if articulo_a_quitar in lista_de_compras:\n",
+ " lista_de_compras.remove(articulo_a_quitar)\n",
+ " print (lista_de_compras)\n",
+ "else:\n",
+ " print (articulo_a_quitar + \" no está en la lista\")\n",
+ " print (lista_de_compras)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
},
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/05_list_index_pop_insert.ipynb b/05_list_index_pop_insert.ipynb
index e6aa959..f387be5 100644
--- a/05_list_index_pop_insert.ipynb
+++ b/05_list_index_pop_insert.ipynb
@@ -1,127 +1,127 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 5. Personalizando el menú\n",
- "\n",
- "## Métodos de lista: `.index()`, `.pop()` e `.insert()`\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estás en la cooperativa de la escuela listo para ordenar. El menú de hoy incluye una hamburguesa, una guarnición y una bebida:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "menu_del_dia = [\"hamburguesa\", \"ensalada\", \"coca cola\"]\n",
- "print(menu_del_dia)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estás contento con la hamburguesa y la coca, pero quieres cambiar tu guarnición de *ensalada* a *papas fritas*. Para hacerlo, sigues estos pasos:"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "1. Observa la posición de la guarnición en el menú:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "indice_guarnicion = menu_del_dia.index(\"ensalada\")\n",
- "print (indice_guarnicion)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "2. Elimina *ensalada* de la posición de la guarnición:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "menu_del_dia.pop(indice_guarnicion)\n",
- "print (menu_del_dia)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "3. Añade papas fritas a la posición de la guarnición:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "menu_del_dia.insert(indice_guarnicion, \"papas fritas\")\n",
- "print (menu_del_dia)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 5. Personalizando el menú\n",
+ "\n",
+ "## Métodos de lista: `.index()`, `.pop()` e `.insert()`\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estás en la cooperativa de la escuela listo para ordenar. El menú de hoy incluye una hamburguesa, una guarnición y una bebida:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "menu_del_dia = [\"hamburguesa\", \"ensalada\", \"coca cola\"]\n",
+ "print(menu_del_dia)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estás contento con la hamburguesa y la coca, pero quieres cambiar tu guarnición de *ensalada* a *papas fritas*. Para hacerlo, sigues estos pasos:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1. Observa la posición de la guarnición en el menú:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "indice_guarnicion = menu_del_dia.index(\"ensalada\")\n",
+ "print (indice_guarnicion)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2. Elimina *ensalada* de la posición de la guarnición:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "menu_del_dia.pop(indice_guarnicion)\n",
+ "print (menu_del_dia)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3. Añade papas fritas a la posición de la guarnición:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "menu_del_dia.insert(indice_guarnicion, \"papas fritas\")\n",
+ "print (menu_del_dia)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/06_list_slicing.ipynb b/06_list_slicing.ipynb
index 682856b..f4f4064 100644
--- a/06_list_slicing.ipynb
+++ b/06_list_slicing.ipynb
@@ -1,299 +1,299 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 6. Viajando por todo el mundo\n",
- "\n",
- "## Segmentación de listas\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Considera la siguiente lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "ciudades = [\"San Diego\", \"Praga\", \"Ciudad del Cabo\", \"Tokio\", \"Melbourne\"]\n",
- "print(ciudades)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "1. Segmenta \"Praga\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[1])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "2. Segmenta las ciudades desde \"Praga\" hasta \"Tokio\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[1:4])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "3. Segmenta \"Praga\" y \"Tokio\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[1:4:2])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "4. Segmenta las ciudades desde \"San Diego\" hasta \"Ciudad del Cabo\" (dos formas):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[0:3])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[:3])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "5. Segmenta las ciudades desde \"Ciudad del Cabo\" hasta \"Melbourne\" (dos formas):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[2:5])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[2:])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "6. Segmenta \"San Diego\", \"Ciudad del Cabo\" y \"Melbourne\" (cuatro formas):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[0:5:2])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[0::2])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[:5:2])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[::2])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "7. Segmenta \"Melbourne\" (dos formas):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[4])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[-1])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "8. Segmenta las ciudades desde \"Praga\" hasta \"Tokio\" usando índices negativos (alternativa al ejemplo 2):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[-4:-1])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "9. Segmenta las ciudades desde \"Tokio\" hasta \"Praga\" en orden inverso usando índices positivos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "ciudades[3:0:-1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "10. Segmenta las ciudades desde \"Tokio\" hasta \"Praga\" en orden inverso usando índices negativos (alternativa al ejemplo 9):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "ciudades[-2:-5:-1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "11. Segmenta todas las ciudades en orden inverso:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (ciudades[::-1])"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 6. Viajando por todo el mundo\n",
+ "\n",
+ "## Segmentación de listas\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Considera la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ciudades = [\"San Diego\", \"Praga\", \"Ciudad del Cabo\", \"Tokio\", \"Melbourne\"]\n",
+ "print(ciudades)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1. Segmenta \"Praga\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2. Segmenta las ciudades desde \"Praga\" hasta \"Tokio\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[1:4])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3. Segmenta \"Praga\" y \"Tokio\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[1:4:2])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4. Segmenta las ciudades desde \"San Diego\" hasta \"Ciudad del Cabo\" (dos formas):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[0:3])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[:3])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5. Segmenta las ciudades desde \"Ciudad del Cabo\" hasta \"Melbourne\" (dos formas):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[2:5])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[2:])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6. Segmenta \"San Diego\", \"Ciudad del Cabo\" y \"Melbourne\" (cuatro formas):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[0:5:2])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[0::2])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[:5:2])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[::2])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7. Segmenta \"Melbourne\" (dos formas):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[4])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[-1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "8. Segmenta las ciudades desde \"Praga\" hasta \"Tokio\" usando índices negativos (alternativa al ejemplo 2):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[-4:-1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "9. Segmenta las ciudades desde \"Tokio\" hasta \"Praga\" en orden inverso usando índices positivos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ciudades[3:0:-1]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10. Segmenta las ciudades desde \"Tokio\" hasta \"Praga\" en orden inverso usando índices negativos (alternativa al ejemplo 9):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ciudades[-2:-5:-1]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "11. Segmenta todas las ciudades en orden inverso:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (ciudades[::-1])"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/07_list_slicing_use.ipynb b/07_list_slicing_use.ipynb
index b62ea47..6de46d1 100644
--- a/07_list_slicing_use.ipynb
+++ b/07_list_slicing_use.ipynb
@@ -1,290 +1,290 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 7. Sentidos, planetas y una casa\n",
- "\n",
- "## Cambiar, añadir y eliminar elementos de una lista usando segmentación\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## 1. Sentidos"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dada la siguiente lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "sentidos = [\"ojos\", \"nariz\", \"oídos\", \"lengua\", \"piel\"]\n",
- "print(sentidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Reemplaza \"nariz\" con \"olfato\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "sentidos[1] = \"olfato\"\n",
- "print (sentidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Reemplaza \"lengua\" y \"piel\" con \"gusto\" y \"tacto\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "sentidos[3:5] = [\"gusto\", \"tacto\"]\n",
- "print (sentidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Reemplaza \"ojos\" y \"oídos\" con \"vista\" y \"audición\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "sentidos[0:3:2] = [\"vista\", \"audición\"]\n",
- "print (sentidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "## 2. Planetas"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dada la siguiente lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "planetas = [\"Mercurio\", \"Marte\", \"Tierra\", \"Neptuno\"]\n",
- "print(planetas)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Añade \"Júpiter\" al final de la lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "planetas = planetas + [\"Júpiter\"]\n",
- "print (planetas)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Añade \"Venus\" entre \"Marte\" y \"Tierra\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "planetas = planetas[0:2] + [\"Venus\"] + planetas[2:5]\n",
- "print (planetas)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Añade \"Urano\" y \"Saturno\" entre \"Neptuno\" y \"Júpiter\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "planetas = planetas[:5] + [\"Urano\", \"Saturno\"] + planetas[5:]\n",
- "print(planetas)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "## 3. Una casa"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dada la siguiente lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "casa = [\"cocina\", \"comedor\", \"sala\", \"dormitorio\", \"baño\", \"jardín\", \"balcón\", \"terraza\"]\n",
- "print(casa)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Elimina \"comedor\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "del casa[1]\n",
- "print (casa)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Elimina \"jardín\" y \"balcón\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "del casa[4:6]\n",
- "print (casa)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Elimina \"cocina\", \"dormitorio\" y \"terraza\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "del casa[::2]\n",
- "print (casa)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Delete \"house\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "del casa\n",
- "print (casa)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 7. Sentidos, planetas y una casa\n",
+ "\n",
+ "## Cambiar, añadir y eliminar elementos de una lista usando segmentación\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 1. Sentidos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sentidos = [\"ojos\", \"nariz\", \"oídos\", \"lengua\", \"piel\"]\n",
+ "print(sentidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Reemplaza \"nariz\" con \"olfato\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sentidos[1] = \"olfato\"\n",
+ "print (sentidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Reemplaza \"lengua\" y \"piel\" con \"gusto\" y \"tacto\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sentidos[3:5] = [\"gusto\", \"tacto\"]\n",
+ "print (sentidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Reemplaza \"ojos\" y \"oídos\" con \"vista\" y \"audición\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sentidos[0:3:2] = [\"vista\", \"audición\"]\n",
+ "print (sentidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 2. Planetas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "planetas = [\"Mercurio\", \"Marte\", \"Tierra\", \"Neptuno\"]\n",
+ "print(planetas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Añade \"Júpiter\" al final de la lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "planetas = planetas + [\"Júpiter\"]\n",
+ "print (planetas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Añade \"Venus\" entre \"Marte\" y \"Tierra\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "planetas = planetas[0:2] + [\"Venus\"] + planetas[2:5]\n",
+ "print (planetas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Añade \"Urano\" y \"Saturno\" entre \"Neptuno\" y \"Júpiter\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "planetas = planetas[:5] + [\"Urano\", \"Saturno\"] + planetas[5:]\n",
+ "print(planetas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 3. Una casa"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "casa = [\"cocina\", \"comedor\", \"sala\", \"dormitorio\", \"baño\", \"jardín\", \"balcón\", \"terraza\"]\n",
+ "print(casa)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina \"comedor\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "del casa[1]\n",
+ "print (casa)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina \"jardín\" y \"balcón\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "del casa[4:6]\n",
+ "print (casa)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina \"cocina\", \"dormitorio\" y \"terraza\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "del casa[::2]\n",
+ "print (casa)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Delete \"house\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "del casa\n",
+ "print (casa)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/08_for_range.ipynb b/08_for_range.ipynb
index 5bc9875..ec450ec 100644
--- a/08_for_range.ipynb
+++ b/08_for_range.ipynb
@@ -1,151 +1,151 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 8. Los platillos favoritos de mis amigos\n",
- "\n",
- "## `for` ... `in` `range()`\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aquí tienes una lista de mis amigos y una lista de sus platillos favoritos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "amigos = [\"Carlos\", \"Ian\", \"Fernando\", \"Amelia\"]\n",
- "platillos = [\"tacos al pastor\", \"tortas\", \"chilaquiles\", \"enchiladas\"]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estos son todos mis amigos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(\"Los nombres de mis amigos son:\")\n",
- "print(amigos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estos son mis amigos uno por uno:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for indice in range (0,4):\n",
- " print (\"Índice: \" + str(indice))\n",
- " print (\"Amigo: \" + amigos[indice])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estos son todos sus platillos favoritos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(\"Sus platillos favoritos son:\")\n",
- "print(platillos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estos son sus platillos favoritos uno por uno:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for indice in range(0, 4):\n",
- " print(\"Índice: \" + str(indice))\n",
- " print(\"Platillo: \" + platillos[indice])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estos son mis amigos, con sus platillos favoritos uno por uno:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for indice in range(0, 4):\n",
- " print(\"El platillo favorito de \" + amigos[indice] + \" son \" + platillos[indice])"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 8. Los platillos favoritos de mis amigos\n",
+ "\n",
+ "## `for` ... `in` `range()`\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aquí tienes una lista de mis amigos y una lista de sus platillos favoritos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "amigos = [\"Carlos\", \"Ian\", \"Fernando\", \"Amelia\"]\n",
+ "platillos = [\"tacos al pastor\", \"tortas\", \"chilaquiles\", \"enchiladas\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estos son todos mis amigos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(\"Los nombres de mis amigos son:\")\n",
+ "print(amigos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estos son mis amigos uno por uno:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for indice in range (0,4):\n",
+ " print (\"Índice: \" + str(indice))\n",
+ " print (\"Amigo: \" + amigos[indice])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estos son todos sus platillos favoritos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(\"Sus platillos favoritos son:\")\n",
+ "print(platillos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estos son sus platillos favoritos uno por uno:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for indice in range(0, 4):\n",
+ " print(\"Índice: \" + str(indice))\n",
+ " print(\"Platillo: \" + platillos[indice])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estos son mis amigos, con sus platillos favoritos uno por uno:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for indice in range(0, 4):\n",
+ " print(\"El platillo favorito de \" + amigos[indice] + \" son \" + platillos[indice])"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/09_for_loop_if_equals.ipynb b/09_for_loop_if_equals.ipynb
index 834061c..bd2a504 100644
--- a/09_for_loop_if_equals.ipynb
+++ b/09_for_loop_if_equals.ipynb
@@ -1,124 +1,124 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 9. En el zoológico\n",
- "## Bucle `for` con `if`... `==` ... / `else`\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estás en el zoológico y anotas una lista de algunos animales que ves:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "animales = [\"elefante\", \"pingüino\", \"delfín\"]\n",
- "print(animales)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Luego imprimes los animales uno por uno:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(0, len(animales)):\n",
- " print(\"-- Inicio del bucle --\")\n",
- " # Imprime cada elemento y su posición\n",
- " print(\"El elemento en la posición \" + str(i) + \" es \" + animales[i])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Realmente querías ver un pingüino:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "querias_ver = \"pingüino\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Una vez en casa, le cuentas a tu amigo los animales que viste, especificando cuál de ellos realmente querías ver:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(0, len(animales)):\n",
- " # Si el animal actual es el que realmente querías ver\n",
- " if animales[i] == querias_ver:\n",
- " # Imprime que viste ese animal y que realmente querías verlo\n",
- " print(\"Vi un \" + animales[i] + \" y realmente quería verlo\")\n",
- " # Si el animal actual no es el que realmente querías ver\n",
- " else:\n",
- " # Simplemente imprime que lo viste\n",
- " print(\"Vi un \" + animales[i])\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 9. En el zoológico\n",
+ "## Bucle `for` con `if`... `==` ... / `else`\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estás en el zoológico y anotas una lista de algunos animales que ves:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "animales = [\"elefante\", \"pingüino\", \"delfín\"]\n",
+ "print(animales)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Luego imprimes los animales uno por uno:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(0, len(animales)):\n",
+ " print(\"-- Inicio del bucle --\")\n",
+ " # Imprime cada elemento y su posición\n",
+ " print(\"El elemento en la posición \" + str(i) + \" es \" + animales[i])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Realmente querías ver un pingüino:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "querias_ver = \"pingüino\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Una vez en casa, le cuentas a tu amigo los animales que viste, especificando cuál de ellos realmente querías ver:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(0, len(animales)):\n",
+ " # Si el animal actual es el que realmente querías ver\n",
+ " if animales[i] == querias_ver:\n",
+ " # Imprime que viste ese animal y que realmente querías verlo\n",
+ " print(\"Vi un \" + animales[i] + \" y realmente quería verlo\")\n",
+ " # Si el animal actual no es el que realmente querías ver\n",
+ " else:\n",
+ " # Simplemente imprime que lo viste\n",
+ " print(\"Vi un \" + animales[i])\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/10_for_search.ipynb b/10_for_search.ipynb
index 010138b..9bbb7d8 100644
--- a/10_for_search.ipynb
+++ b/10_for_search.ipynb
@@ -1,223 +1,223 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 10. ¿Dónde están mis guantes?\n",
- "\n",
- "## Bucle `for` para buscar\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Quién no tiene un cajón desordenado? ¡Aquí está el nuestro! Contiene algunos accesorios:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "accesorios = [\"cinturón\", \"gorra\", \"guantes\", \"lentes oscuros\", \"anillo\"]\n",
- "print(accesorios)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime todos los accesorios uno por uno, junto con sus posiciones en la lista. Usa una frase como *El elemento x está en la posición y*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Imprime cada elemento y su posición\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "1. Imprime el accesorio cuyo nombre **está compuesto por** 8 caracteres y su posición en la lista. Utiliza una frase como *El elemento x está en la posición y y tiene n caracteres*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Si la longitud del elemento es igual a 8\n",
- " if len(accesorios[i]) == 8:\n",
- " # Imprime el elemento, su posición y su número de caracteres\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene 8 caracteres.\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "2. Imprime los accesorios cuyos nombres están compuestos por **menos de** 8 caracteres:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Si la longitud del elemento es menor que 8\n",
- " if len(accesorios[i]) < 8:\n",
- " # Imprime el elemento, su posición y que tiene menos de 8 caracteres\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene menos de 8 caracteres.\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "3. Imprime los accesorios cuyos nombres están compuestos por **más de** 8 caracteres. Además, asigna 8 a una variable:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Definiendo el umbral\n",
- "n_de_caracteres = 8\n",
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Si la longitud del elemento es mayor que el umbral\n",
- " if len(accesorios[i]) > n_de_caracteres:\n",
- " # Imprime el elemento, su posición y que tiene más de n_de_caracteres caracteres\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene más de \" + str(n_de_caracteres) + \" caracteres.\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "4. Imprime los accesorios cuyos nombres están compuestos por un número de caracteres **diferente de** 8:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "# Definiendo el umbral\n",
- "n_de_caracteres = 8\n",
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Si la longitud del elemento no es igual al umbral\n",
- " if len(accesorios[i]) != n_de_caracteres:\n",
- " # Imprime el elemento, su posición y que tiene un número de caracteres diferente de n_de_caracteres\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene un número de caracteres diferente de \" + str(n_de_caracteres) + \".\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "5. Imprime los accesorios cuya posición es **menor o igual a** 2:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "# Definiendo el umbral\n",
- "posicion_umbral = 2\n",
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Si la posición del elemento es menor o igual al umbral\n",
- " if i <= posicion_umbral:\n",
- " # Imprime el elemento, su posición y que la posición es menor o igual a la posición_umbral\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \", que es menor o igual a \" + str(posicion_umbral) + \".\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "6. Imprime los accesorios cuya posición es **al menos** 2:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "# Definiendo el umbral\n",
- "posicion_umbral = 2\n",
- "# Para cada posición en la lista\n",
- "for i in range(len(accesorios)):\n",
- " # Si la posición del elemento es mayor o igual al umbral\n",
- " if i >= posicion_umbral:\n",
- " # Imprime el elemento, su posición y que la posición es al menos la posición_umbral\n",
- " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \", que es al menos \" + str(posicion_umbral) + \".\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 10. ¿Dónde están mis guantes?\n",
+ "\n",
+ "## Bucle `for` para buscar\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Quién no tiene un cajón desordenado? ¡Aquí está el nuestro! Contiene algunos accesorios:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "accesorios = [\"cinturón\", \"gorra\", \"guantes\", \"lentes oscuros\", \"anillo\"]\n",
+ "print(accesorios)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime todos los accesorios uno por uno, junto con sus posiciones en la lista. Usa una frase como *El elemento x está en la posición y*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Imprime cada elemento y su posición\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1. Imprime el accesorio cuyo nombre **está compuesto por** 8 caracteres y su posición en la lista. Utiliza una frase como *El elemento x está en la posición y y tiene n caracteres*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Si la longitud del elemento es igual a 8\n",
+ " if len(accesorios[i]) == 8:\n",
+ " # Imprime el elemento, su posición y su número de caracteres\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene 8 caracteres.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2. Imprime los accesorios cuyos nombres están compuestos por **menos de** 8 caracteres:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Si la longitud del elemento es menor que 8\n",
+ " if len(accesorios[i]) < 8:\n",
+ " # Imprime el elemento, su posición y que tiene menos de 8 caracteres\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene menos de 8 caracteres.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3. Imprime los accesorios cuyos nombres están compuestos por **más de** 8 caracteres. Además, asigna 8 a una variable:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Definiendo el umbral\n",
+ "n_de_caracteres = 8\n",
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Si la longitud del elemento es mayor que el umbral\n",
+ " if len(accesorios[i]) > n_de_caracteres:\n",
+ " # Imprime el elemento, su posición y que tiene más de n_de_caracteres caracteres\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene más de \" + str(n_de_caracteres) + \" caracteres.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4. Imprime los accesorios cuyos nombres están compuestos por un número de caracteres **diferente de** 8:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Definiendo el umbral\n",
+ "n_de_caracteres = 8\n",
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Si la longitud del elemento no es igual al umbral\n",
+ " if len(accesorios[i]) != n_de_caracteres:\n",
+ " # Imprime el elemento, su posición y que tiene un número de caracteres diferente de n_de_caracteres\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \" y tiene un número de caracteres diferente de \" + str(n_de_caracteres) + \".\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5. Imprime los accesorios cuya posición es **menor o igual a** 2:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Definiendo el umbral\n",
+ "posicion_umbral = 2\n",
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Si la posición del elemento es menor o igual al umbral\n",
+ " if i <= posicion_umbral:\n",
+ " # Imprime el elemento, su posición y que la posición es menor o igual a la posición_umbral\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \", que es menor o igual a \" + str(posicion_umbral) + \".\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6. Imprime los accesorios cuya posición es **al menos** 2:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Definiendo el umbral\n",
+ "posicion_umbral = 2\n",
+ "# Para cada posición en la lista\n",
+ "for i in range(len(accesorios)):\n",
+ " # Si la posición del elemento es mayor o igual al umbral\n",
+ " if i >= posicion_umbral:\n",
+ " # Imprime el elemento, su posición y que la posición es al menos la posición_umbral\n",
+ " print(\"El elemento \" + accesorios[i] + \" está en la posición \" + str(i) + \", que es al menos \" + str(posicion_umbral) + \".\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/11_for_change_list.ipynb b/11_for_change_list.ipynb
index d3923df..b620ac4 100644
--- a/11_for_change_list.ipynb
+++ b/11_for_change_list.ipynb
@@ -1,94 +1,94 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 11. Limpiando la lista de correo\n",
- "\n",
- "## Bucle `for` para cambiar elementos de la lista\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Eres responsable de un boletín informativo y debes enviar un correo electrónico a las siguientes direcciones:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "email = [\"SARAH.BROWN@GMAIL.com\", \"Pablo.Hernandez@live.com\", \"LI.Min@hotmail.com\"] "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Por cuestiones de consistencia, deseas que todas las direcciones de correo electrónico estén en minúsculas. Por lo tanto, las cambias:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(0, len(email)):\n",
- " \n",
- " print(\"-> Bucle: \" + str(i))\n",
- " \n",
- " # Imprime el elemento antes del cambio\n",
- " print(\"Antes del cambio, el elemento en la posición \" + str(i) + \" es: \" + email[i])\n",
- " \n",
- " # Cambia el elemento y reasigna\n",
- " email[i] = email[i].lower()\n",
- " \n",
- " # Imprime el elemento después del cambio\n",
- " print(\"Después del cambio, el elemento en la posición \" + str(i) + \" es: \" + email[i])\n",
- " \n",
- "# Imprime la lista modificada\n",
- "print(\"Ahora la lista es: \" + str(email))"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 11. Limpiando la lista de correo\n",
+ "\n",
+ "## Bucle `for` para cambiar elementos de la lista\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Eres responsable de un boletín informativo y debes enviar un correo electrónico a las siguientes direcciones:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "email = [\"SARAH.BROWN@GMAIL.com\", \"Pablo.Hernandez@live.com\", \"LI.Min@hotmail.com\"] "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Por cuestiones de consistencia, deseas que todas las direcciones de correo electrónico estén en minúsculas. Por lo tanto, las cambias:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(0, len(email)):\n",
+ " \n",
+ " print(\"-> Bucle: \" + str(i))\n",
+ " \n",
+ " # Imprime el elemento antes del cambio\n",
+ " print(\"Antes del cambio, el elemento en la posición \" + str(i) + \" es: \" + email[i])\n",
+ " \n",
+ " # Cambia el elemento y reasigna\n",
+ " email[i] = email[i].lower()\n",
+ " \n",
+ " # Imprime el elemento después del cambio\n",
+ " print(\"Después del cambio, el elemento en la posición \" + str(i) + \" es: \" + email[i])\n",
+ " \n",
+ "# Imprime la lista modificada\n",
+ "print(\"Ahora la lista es: \" + str(email))"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/12_for_create_list.ipynb b/12_for_create_list.ipynb
index 2d4c456..9abecd1 100644
--- a/12_for_create_list.ipynb
+++ b/12_for_create_list.ipynb
@@ -1,107 +1,107 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 12. ¡Qué desorden en la librería!\n",
- "\n",
- "## Bucle `for` para crear nuevas listas\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Hoy había muchos clientes en la tienda, y mezclaron los libros cuyos autores tienen apellidos que empiezan con A y S:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "autores = [\"Alcott\", \"Saint-Exupery\", \"Arendt\", \"Sepúlveda\", \"Shakespeare\"]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Así que debes colocar los libros cuyos autores tienen apellidos que comienzan con A en un estante y los libros cuyos autores tienen apellidos que comienzan con S en otro estante:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Inicializa las variables como listas vacías\n",
- "estante_a = []\n",
- "estante_s = []\n",
- "\n",
- "# Para cada posición en la lista\n",
- "for i in range(len(autores)):\n",
- " \n",
- " # Imprime el autor actual\n",
- " print(\"El autor actual es: \" + autores[i])\n",
- " \n",
- " # Obtiene la inicial del autor actual\n",
- " inicial_autor = autores[i][0]\n",
- " print(\"La inicial del autor es: \" + inicial_autor)\n",
- " \n",
- " # Si la inicial del autor es A\n",
- " if inicial_autor == \"A\":\n",
- " # Agrega el autor al estante A\n",
- " estante_a.append(autores[i])\n",
- " print(\"El estante A ahora contiene: \" + str(estante_a) + \"\\n\")\n",
- " \n",
- " # En caso contrario (la inicial del autor no es A)\n",
- " else:\n",
- " # Agrega el autor al estante S\n",
- " estante_s = estante_s + [autores[i]]\n",
- " print(\"El estante S ahora contiene: \" + str(estante_s) + \"\\n\")\n",
- "\n",
- "# Imprime los estantes finales\n",
- "print(\"Los autores en el estante A son: \" + str(estante_a))\n",
- "print(\"Los autores en el estante S son: \" + str(estante_s))\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 12. ¡Qué desorden en la librería!\n",
+ "\n",
+ "## Bucle `for` para crear nuevas listas\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Hoy había muchos clientes en la tienda, y mezclaron los libros cuyos autores tienen apellidos que empiezan con A y S:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "autores = [\"Alcott\", \"Saint-Exupery\", \"Arendt\", \"Sepúlveda\", \"Shakespeare\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Así que debes colocar los libros cuyos autores tienen apellidos que comienzan con A en un estante y los libros cuyos autores tienen apellidos que comienzan con S en otro estante:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Inicializa las variables como listas vacías\n",
+ "estante_a = []\n",
+ "estante_s = []\n",
+ "\n",
+ "# Para cada posición en la lista\n",
+ "for i in range(len(autores)):\n",
+ " \n",
+ " # Imprime el autor actual\n",
+ " print(\"El autor actual es: \" + autores[i])\n",
+ " \n",
+ " # Obtiene la inicial del autor actual\n",
+ " inicial_autor = autores[i][0]\n",
+ " print(\"La inicial del autor es: \" + inicial_autor)\n",
+ " \n",
+ " # Si la inicial del autor es A\n",
+ " if inicial_autor == \"A\":\n",
+ " # Agrega el autor al estante A\n",
+ " estante_a.append(autores[i])\n",
+ " print(\"El estante A ahora contiene: \" + str(estante_a) + \"\\n\")\n",
+ " \n",
+ " # En caso contrario (la inicial del autor no es A)\n",
+ " else:\n",
+ " # Agrega el autor al estante S\n",
+ " estante_s = estante_s + [autores[i]]\n",
+ " print(\"El estante S ahora contiene: \" + str(estante_s) + \"\\n\")\n",
+ "\n",
+ "# Imprime los estantes finales\n",
+ "print(\"Los autores en el estante A son: \" + str(estante_a))\n",
+ "print(\"Los autores en el estante S son: \" + str(estante_s))\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/13_numbers.ipynb b/13_numbers.ipynb
index 4b731f8..b8c2d64 100644
--- a/13_numbers.ipynb
+++ b/13_numbers.ipynb
@@ -1,416 +1,418 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 13. Implementando una calculadora\n",
- "\n",
- "## Números enteros, números decimales y operaciones aritméticas\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. ¿Cuáles son las operaciones aritméticas en Python?"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In En Python, existen 7 operadores aritméticos. Vamos a probarlos en las siguientes celdas:\n",
- "1. Suma: `+`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "4+3"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "2. Resta: `-` "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "6-2"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "3. Multiplicación: `*` "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "6*5"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "4. Potenciación: `**` "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "2**3"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "5. División: `/` "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "10/5"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "6. División entera: `//`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "7//4"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "7. Módulo: `%` "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "7.5%4"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## 2. ¿Cómo le pedimos a un usuario que introduzca un número?"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Pide a un usuario que introduzca un número, asígnalo a una variable y luego imprime el valor de la variable:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = input(\"Ingresa un número: \")\n",
- "print(numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Verifica el tipo (type) de la variable `numero` de la siguiente manera:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "type(numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Transforma la variable `numero` en un entero (integer), imprímela y verifica su tipo de la siguiente manera:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = int(numero)\n",
- "print (numero)\n",
- "type(numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Para transformar la variable `numero` en un número decimal (float), imprimirlo y verificar su tipo, puedes hacerlo de la siguiente manera:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = float(numero)\n",
- "print (numero)\n",
- "type (numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Ya sabes cómo transformar un número en una cadena de caracteres. ¿Cómo lo haces?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = str(numero)\n",
- "print (numero)\n",
- "type(numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## 3. Vamos a crear la calculadora"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Pregunta al usuario por el primer valor de entrada:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "primer_numero = input(\"Ingresa el primer número: \")\n",
- "primer_numero = float(primer_numero)\n",
- "type(primer_numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Pregunta al usuario por el segundo valor de entrada:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "operador = input(\"Inserta un operador aritmético: \")\n",
- "type(operador)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Pregunta al usuario por el tercer valor de entrada:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "segundo_numero = float(input(\"Ingresa el segundo número: \"))\n",
- "type(segundo_numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Vamos a escribir el núcleo de la calculadora:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "if operador == \"+\":\n",
- " resultado = primer_numero + segundo_numero\n",
- "elif operador == \"-\":\n",
- " resultado = primer_numero - segundo_numero\n",
- "elif operador == \"*\":\n",
- " resultado = primer_numero * segundo_numero\n",
- "elif operador == \"**\":\n",
- " resultado = primer_numero / segundo_numero\n",
- "elif operador == \"/\":\n",
- " resultado = primer_numero ** segundo_numero\n",
- "elif operador == \"//\":\n",
- " resultado = primer_numero // segundo_numero\n",
- "elif operador == \"%\":\n",
- " resultado = primer_numero % segundo_numero\n",
- "else:\n",
- " print(\"No ingresaste un operador aritmético\")\n",
- "print(resultado)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Finalmente, vamos a imprimir el resultado:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(str(primer_numero) + \" \" + operador + \" \" + str(segundo_numero) + \" = \" + str(resultado))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### ¡Hagamos una calculadora real!\n",
- "\n",
- "- Fusiona el código que escribiste arriba en la celda de abajo:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Primer entrada\n",
- "primer_numero = float(input(\"Ingresa el primer número: \")) # Cambio en relación al código anterior\n",
- "\n",
- "# Operador\n",
- "operador = input(\"Ingresa un operador aritmético: \")\n",
- "\n",
- "# Segunda entrada\n",
- "segundo_numero = float(input(\"Escribe el segundo número: \"))\n",
- "\n",
- "# Cálculos\n",
- "if operador == \"+\":\n",
- " resultado = primer_numero + segundo_numero\n",
- "elif operador == \"-\":\n",
- " resultado = primer_numero - segundo_numero\n",
- "elif operador == \"*\":\n",
- " resultado = primer_numero * segundo_numero\n",
- "elif operador == \"**\":\n",
- " resultado = primer_numero / segundo_numero\n",
- "elif operador == \"/\":\n",
- " resultado = primer_numero ** segundo_numero\n",
- "elif operador == \"//\":\n",
- " resultado = primer_numero // segundo_numero\n",
- "elif operador == \"%\":\n",
- " resultado = primer_numero % segundo_numero\n",
- "else:\n",
- " print(\"No ingresaste un operador aritmético. Por favor, ejecuta la celda nuevamente:\")\n",
- "\n",
- "# Imprimir el resultado\n",
- "print(str(primer_numero) + \" \" + operador + \" \" + str(segundo_numero) + \" = \" + str(resultado))"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 13. Implementing a calculator\n",
+ "\n",
+ "## Integers, floats, and arithmetic operations\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) by [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Narrative license: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Code license: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "--- "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. What are the arithmetic operations in Python?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In Python there are 7 arithmetic operators. Try them in the following cells:\n",
+ "1. Addition: `+`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "4+3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2. Subtraction: `-` "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "6-2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3. Multiplication: `*` "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "6*5"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4. Exponentiation: `**` "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "2**3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5. Division: `/` "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "10/5"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6. Floor division: `//` "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "7//4"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7. Módulo: `%` "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "7.5%4"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. How do we ask a user to input a number? "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ask a user to input a number, assign it to a variable, and print out the variable:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "number = input(\"Insert a number\")\n",
+ "print (number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Check the *type* of the variable `number`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Transform `number` into an integer, print it out, and check its type: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "number = int(number)\n",
+ "print (number)\n",
+ "type(number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Transform `number` into a float, print it out, and check its type: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "number = float(number)\n",
+ "print (number)\n",
+ "type (number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- You already know how to transform a number to a string. How do you do that?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "number = str(number)\n",
+ "print (number)\n",
+ "type(number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Let's create the calculator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ask the user the first input: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "first_number = input (\"Insert the first number: \") \n",
+ "first_number = float (first_number)\n",
+ "type(first_number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ask the user the second input: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "operator = input (\"Insert an arithmetic operator: \")\n",
+ "type (operator)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ask the user the third input:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "second_number = float(input (\"Insert the second number: \")) \n",
+ "type(second_number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Let's write the core of the calculator:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if operador == \"+\":\n",
+ " resultado = primer_numero + segundo_numero\n",
+ "elif operador == \"-\":\n",
+ " resultado = primer_numero - segundo_numero\n",
+ "elif operador == \"*\":\n",
+ " resultado = primer_numero * segundo_numero\n",
+ "elif operador == \"**\":\n",
+ " resultado = primer_numero ** segundo_numero\n",
+ "elif operador == \"/\":\n",
+ " resultado = primer_numero / segundo_numero\n",
+ "elif operador == \"//\":\n",
+ " resultado = primer_numero // segundo_numero\n",
+ "elif operador == \"%\":\n",
+ " resultado = primer_numero % segundo_numero\n",
+ "else:\n",
+ " print(\"No ingresaste un operador aritmético\")\n",
+ "print(resultado)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Finally, let's print out the result:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (str(first_number) + \" \" + operator + \" \" + str(second_number) + \" = \" + str(result))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Make it a real calculator!\n",
+ "\n",
+ "- Merge the code you wrote above in the cell below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Primer entrada\n",
+ "primer_numero = float(input(\"Ingresa el primer número: \")) \n",
+ "\n",
+ "# Operador\n",
+ "operador = input(\"Ingresa un operador aritmético: \")\n",
+ "\n",
+ "# operator\n",
+ "operator = input (\"Insert an arithmetic operator: \")\n",
+ "\n",
+ "# second input\n",
+ "second_number = float (input (\"Write the second number: \")) \n",
+ "\n",
+ "# computations\n",
+ "if operator == \"+\":\n",
+ " result = first_number + second_number\n",
+ "elif operator == \"-\":\n",
+ " result = first_number - second_number\n",
+ "elif operator == \"*\":\n",
+ " result = first_number * second_number\n",
+ "elif operator == \"**\":\n",
+ " result = first_number / second_number\n",
+ "elif operator == \"/\":\n",
+ " result = first_number ** second_number\n",
+ "elif operator == \"//\":\n",
+ " result = first_number // second_number \n",
+ "elif operator == \"%\": \n",
+ " result = first_number % second_number \n",
+ "else: \n",
+ " print (\"You didn't enter an arithmetic operator. Please, run the cell again:\")\n",
+ " \n",
+ "# print the result\n",
+ "print (str(first_number) + \" \" + operator + \" \" + str(second_number) + \" = \" + str(result))"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/15_random.ipynb b/15_random.ipynb
index cfb21ec..6405e62 100644
--- a/15_random.ipynb
+++ b/15_random.ipynb
@@ -1,121 +1,121 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 15. Galletas de la suerte\n",
- "\n",
- "## El módulo de Python *random*\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Te encuentras en un restaurante chino, y al final de la comida, te dan una galleta de la suerte. Solo quedan tres galletas de la suerte. Cada una de ellas contiene un mensaje:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "galletas_suerte = [\"El hombre en la cima de la montaña no cayó allí\",\n",
- " \"Si viene el invierno, ¿puede estar lejos la primavera?\",\n",
- " \"La tierra siempre está en la mente de un pájaro volador\"]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Qué galleta de la suerte obtendrás? ¡Deja que la computadora decida! Para hacerlo, la computadora necesita un módulo llamado random:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aquí tienes tu mensaje cuando la computadora elige un índice del mensaje:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Elije un índice del mensaje\n",
- "indice_mensaje = random.randint(0, len(galletas_suerte) - 1)\n",
- "print(\"Índice del mensaje:\", indice_mensaje)\n",
- "\n",
- "# Obtiene el mensaje\n",
- "mensaje = galletas_suerte[indice_mensaje]\n",
- "print(\"Mensaje de la galleta de la suerte:\", mensaje)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Y aquí está tu mensaje cuando la computadora elige directamente un mensaje:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Elije un mensaje\n",
- "mensaje = random.choice(galletas_suerte)\n",
- "print(\"Mensaje de la galleta de la suerte:\", mensaje)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 15. Galletas de la suerte\n",
+ "\n",
+ "## El módulo de Python *random*\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Te encuentras en un restaurante chino, y al final de la comida, te dan una galleta de la suerte. Solo quedan tres galletas de la suerte. Cada una de ellas contiene un mensaje:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "galletas_suerte = [\"El hombre en la cima de la montaña no cayó allí\",\n",
+ " \"Si viene el invierno, ¿puede estar lejos la primavera?\",\n",
+ " \"La tierra siempre está en la mente de un pájaro volador\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Qué galleta de la suerte obtendrás? ¡Deja que la computadora decida! Para hacerlo, la computadora necesita un módulo llamado random:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aquí tienes tu mensaje cuando la computadora elige un índice del mensaje:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Elije un índice del mensaje\n",
+ "indice_mensaje = random.randint(0, len(galletas_suerte) - 1)\n",
+ "print(\"Índice del mensaje:\", indice_mensaje)\n",
+ "\n",
+ "# Obtiene el mensaje\n",
+ "mensaje = galletas_suerte[indice_mensaje]\n",
+ "print(\"Mensaje de la galleta de la suerte:\", mensaje)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Y aquí está tu mensaje cuando la computadora elige directamente un mensaje:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Elije un mensaje\n",
+ "mensaje = random.choice(galletas_suerte)\n",
+ "print(\"Mensaje de la galleta de la suerte:\", mensaje)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/16_intro_to_algos.ipynb b/16_intro_to_algos.ipynb
index 8634d26..4dce02b 100644
--- a/16_intro_to_algos.ipynb
+++ b/16_intro_to_algos.ipynb
@@ -1,220 +1,220 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 16. Piedra, papel, tijeras\n",
- "\n",
- "## Introducción a los algoritmos\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1. Elección de la computadora\n",
- "- Haz que la computadora elija entre *piedra*, *papel* o *tijeras*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random\n",
- "\n",
- "# Lista de posibilidades del juego\n",
- "posibilidades = [\"piedra\", \"papel\", \"tijeras\"]\n",
- "\n",
- "# Elección aleatoria de la computadora\n",
- "eleccion_computadora = random.choice(posibilidades)\n",
- "print(eleccion_computadora)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 2. Elección del jugador\n",
- "- Haz que el jugador elija entre *piedra*, *papel* o *tijeras*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Pidiendo al jugador que haga su elección\n",
- "eleccion_jugador = input(\"Piedra, papel o tijeras?\")\n",
- "print(eleccion_jugador)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 3. Determina quién gana\n",
- "- Si la computadora elige *piedra*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "if eleccion_computadora == \"piedra\":\n",
- "\n",
- " # compara con la elección del jugador\n",
- " if eleccion_jugador == \"piedra\":\n",
- " print(\"¡Empate!\")\n",
- " elif eleccion_jugador == \"papel\":\n",
- " print(\"¡Tú ganas!\")\n",
- " else:\n",
- " print(\"¡La computadora gana!\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Si la computadora elige *papel*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "if eleccion_computadora == \"papel\":\n",
- "\n",
- " # compara con la elección del jugador\n",
- " if eleccion_jugador == \"papel\":\n",
- " print(\"¡Empate!\")\n",
- " elif eleccion_jugador == \"tijeras\":\n",
- " print(\"¡Tú ganas!\")\n",
- " else:\n",
- " print(\"¡La computadora gana!\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Si la computadora elige *tijeras*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "if eleccion_computadora == \"tijeras\":\n",
- "\n",
- " # compara con la elección del jugador\n",
- " if eleccion_jugador == \"tijeras\":\n",
- " print(\"¡Empate!\")\n",
- " elif eleccion_jugador == \"piedra\":\n",
- " print(\"¡Tú ganas!\")\n",
- " else:\n",
- " print(\"No ganaste\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Combinando el código\n",
- "- Vamos a combinar el código:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random\n",
- "\n",
- "# Lista de posibilidades del juego\n",
- "posibilidades = [\"piedra\", \"papel\", \"tijeras\"]\n",
- "\n",
- "# Elección aleatoria de la computadora\n",
- "eleccion_computadora = random.choice(posibilidades)\n",
- "\n",
- "# Elección del jugador\n",
- "eleccion_jugador = input(\"Piedra, papel o tijeras?\")\n",
- "\n",
- "# Determinar quién gana\n",
- "# Si la computadora elige piedra\n",
- "if eleccion_computadora == \"piedra\":\n",
- " # Compara con la elección del jugador\n",
- " if eleccion_jugador == \"piedra\":\n",
- " print(\"¡Empate!\")\n",
- " elif eleccion_jugador == \"papel\":\n",
- " print(\"¡Tú ganas!\")\n",
- " else:\n",
- " print(\"¡La computadora gana!\")\n",
- "\n",
- "# Si la computadora elige papel\n",
- "if eleccion_computadora == \"papel\":\n",
- " # Compara con la elección del jugador\n",
- " if eleccion_jugador == \"papel\":\n",
- " print(\"¡Empate!\")\n",
- " elif eleccion_jugador == \"tijeras\":\n",
- " print(\"¡Tú ganas!\")\n",
- " else:\n",
- " print(\"¡La computadora gana!\")\n",
- "\n",
- "# Si la computadora elige tijeras\n",
- "if eleccion_computadora == \"tijeras\":\n",
- " # Compara con la elección del jugador\n",
- " if eleccion_jugador == \"tijeras\":\n",
- " print(\"¡Empate!\")\n",
- " elif eleccion_jugador == \"piedra\":\n",
- " print(\"¡Tú ganas!\")\n",
- " else:\n",
- " print(\"No ganaste\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 16. Piedra, papel, tijeras\n",
+ "\n",
+ "## Introducción a los algoritmos\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1. Elección de la computadora\n",
+ "- Haz que la computadora elija entre *piedra*, *papel* o *tijeras*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "# Lista de posibilidades del juego\n",
+ "posibilidades = [\"piedra\", \"papel\", \"tijeras\"]\n",
+ "\n",
+ "# Elección aleatoria de la computadora\n",
+ "eleccion_computadora = random.choice(posibilidades)\n",
+ "print(eleccion_computadora)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2. Elección del jugador\n",
+ "- Haz que el jugador elija entre *piedra*, *papel* o *tijeras*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Pidiendo al jugador que haga su elección\n",
+ "eleccion_jugador = input(\"Piedra, papel o tijeras?\")\n",
+ "print(eleccion_jugador)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 3. Determina quién gana\n",
+ "- Si la computadora elige *piedra*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if eleccion_computadora == \"piedra\":\n",
+ "\n",
+ " # compara con la elección del jugador\n",
+ " if eleccion_jugador == \"piedra\":\n",
+ " print(\"¡Empate!\")\n",
+ " elif eleccion_jugador == \"papel\":\n",
+ " print(\"¡Tú ganas!\")\n",
+ " else:\n",
+ " print(\"¡La computadora gana!\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Si la computadora elige *papel*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if eleccion_computadora == \"papel\":\n",
+ "\n",
+ " # compara con la elección del jugador\n",
+ " if eleccion_jugador == \"papel\":\n",
+ " print(\"¡Empate!\")\n",
+ " elif eleccion_jugador == \"tijeras\":\n",
+ " print(\"¡Tú ganas!\")\n",
+ " else:\n",
+ " print(\"¡La computadora gana!\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Si la computadora elige *tijeras*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if eleccion_computadora == \"tijeras\":\n",
+ "\n",
+ " # compara con la elección del jugador\n",
+ " if eleccion_jugador == \"tijeras\":\n",
+ " print(\"¡Empate!\")\n",
+ " elif eleccion_jugador == \"piedra\":\n",
+ " print(\"¡Tú ganas!\")\n",
+ " else:\n",
+ " print(\"No ganaste\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Combinando el código\n",
+ "- Vamos a combinar el código:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "# Lista de posibilidades del juego\n",
+ "posibilidades = [\"piedra\", \"papel\", \"tijeras\"]\n",
+ "\n",
+ "# Elección aleatoria de la computadora\n",
+ "eleccion_computadora = random.choice(posibilidades)\n",
+ "\n",
+ "# Elección del jugador\n",
+ "eleccion_jugador = input(\"Piedra, papel o tijeras?\")\n",
+ "\n",
+ "# Determinar quién gana\n",
+ "# Si la computadora elige piedra\n",
+ "if eleccion_computadora == \"piedra\":\n",
+ " # Compara con la elección del jugador\n",
+ " if eleccion_jugador == \"piedra\":\n",
+ " print(\"¡Empate!\")\n",
+ " elif eleccion_jugador == \"papel\":\n",
+ " print(\"¡Tú ganas!\")\n",
+ " else:\n",
+ " print(\"¡La computadora gana!\")\n",
+ "\n",
+ "# Si la computadora elige papel\n",
+ "if eleccion_computadora == \"papel\":\n",
+ " # Compara con la elección del jugador\n",
+ " if eleccion_jugador == \"papel\":\n",
+ " print(\"¡Empate!\")\n",
+ " elif eleccion_jugador == \"tijeras\":\n",
+ " print(\"¡Tú ganas!\")\n",
+ " else:\n",
+ " print(\"¡La computadora gana!\")\n",
+ "\n",
+ "# Si la computadora elige tijeras\n",
+ "if eleccion_computadora == \"tijeras\":\n",
+ " # Compara con la elección del jugador\n",
+ " if eleccion_jugador == \"tijeras\":\n",
+ " print(\"¡Empate!\")\n",
+ " elif eleccion_jugador == \"piedra\":\n",
+ " print(\"¡Tú ganas!\")\n",
+ " else:\n",
+ " print(\"No ganaste\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/17_while_loop.ipynb b/17_while_loop.ipynb
index 4d3b4a1..c7e865e 100644
--- a/17_while_loop.ipynb
+++ b/17_while_loop.ipynb
@@ -1,78 +1,78 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 17. ¿Quieres más dulces?\n",
- "\n",
- "## El bucle `while`\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Inicializa tus variables\n",
- "cantidad_de_dulces = 0\n",
- "\n",
- "# Imprime la cantidad inicial de dulces que tienes\n",
- "print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
- "\n",
- "# Responde si deseas un dulce\n",
- "respuesta = input(\"¿Quieres un dulce? (sí/no)\")\n",
- "\n",
- "# Mientras tu respuesta sea sí:\n",
- "while respuesta == \"sí\":\n",
- "\n",
- " # Agrega un dulce a tu colección\n",
- " cantidad_de_dulces += 1\n",
- "\n",
- " # Imprime la cantidad actual de dulces que tienes\n",
- " print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
- "\n",
- " # Pregunta de nuevo si deseas más dulces\n",
- " respuesta = input(\"¿Quieres más dulces? (sí/no)\")\n",
- "\n",
- "# Imprime la cantidad final de dulces que tienes\n",
- "print(\"Tienes un total de \" + str(cantidad_de_dulces) + \" dulces\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 17. ¿Quieres más dulces?\n",
+ "\n",
+ "## El bucle `while`\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Inicializa tus variables\n",
+ "cantidad_de_dulces = 0\n",
+ "\n",
+ "# Imprime la cantidad inicial de dulces que tienes\n",
+ "print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
+ "\n",
+ "# Responde si deseas un dulce\n",
+ "respuesta = input(\"¿Quieres un dulce? (sí/no)\")\n",
+ "\n",
+ "# Mientras tu respuesta sea sí:\n",
+ "while respuesta == \"sí\":\n",
+ "\n",
+ " # Agrega un dulce a tu colección\n",
+ " cantidad_de_dulces += 1\n",
+ "\n",
+ " # Imprime la cantidad actual de dulces que tienes\n",
+ " print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
+ "\n",
+ " # Pregunta de nuevo si deseas más dulces\n",
+ " respuesta = input(\"¿Quieres más dulces? (sí/no)\")\n",
+ "\n",
+ "# Imprime la cantidad final de dulces que tienes\n",
+ "print(\"Tienes un total de \" + str(cantidad_de_dulces) + \" dulces\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/18_while_conditions.ipynb b/18_while_conditions.ipynb
index bb83b89..d7678f0 100644
--- a/18_while_conditions.ipynb
+++ b/18_while_conditions.ipynb
@@ -1,185 +1,185 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 18. Animales, números únicos y suma\n",
- "\n",
- "## Varios tipos de condiciones\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "animales = [\"jaguar\", \"manatí\", \"colibrí\"]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Crea un juego en el que la computadora elija al azar uno de los tres animales y el jugador debe adivinar el animal elegido por la computadora. Asegúrate de que el jugador siga jugando hasta que adivine el animal seleccionado por la computadora. Al final del juego, dile al jugador cuántos intentos le tomó adivinar el animal."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random\n",
- "\n",
- "# Elección de la computadora\n",
- "eleccion_computadora = random.choice(animales)\n",
- "\n",
- "# Elección del jugador\n",
- "eleccion_jugador = input(\"¡Adivina el animal! Opciones: jaguar, manatí, colibrí: \")\n",
- "\n",
- "# Inicializar el contador de intentos\n",
- "n_de_intentos = 1\n",
- "\n",
- "# Mientras la elección del jugador y la elección de la computadora sean diferentes\n",
- "while eleccion_jugador != eleccion_computadora:\n",
- "\n",
- " # Informar al jugador que no es el animal correcto\n",
- " print(\"¡Ese no es el animal correcto!\")\n",
- "\n",
- " # Imprimir el número de intentos hasta ahora\n",
- " print(\"Número de intentos hasta ahora: \" + str(n_de_intentos))\n",
- "\n",
- " # Incrementar el número de intentos\n",
- " n_de_intentos += 1\n",
- "\n",
- " # Pedir al jugador que adivine de nuevo\n",
- " eleccion_jugador = input(\"¡Inténtalo de nuevo! Adivina el animal! Opciones: jaguar, manatí, colibrí: \")\n",
- "\n",
- "# Informar al jugador que adivinó el animal correcto\n",
- "print(\"¡Bien hecho! Adivinaste \" + eleccion_computadora + \" en el intento número \" + str(n_de_intentos))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "---\n",
- "## 2. ¡Crea una lista de 8 números aleatorios únicos!\n",
- "\n",
- "- Crea una lista de 8 números aleatorios entre 0 y 10. Asegúrate de que sean únicos, es decir, que cada número esté presente solo una vez en la lista. Si el número ya está en la lista, entonces imprime lo siguiente: *El número x ya está en la lista*. ¿Cuántos números generaste antes de encontrar 8 números únicos?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random\n",
- "\n",
- "# Inicializar la lista de números únicos\n",
- "numeros_aleatorios_unicos = []\n",
- "\n",
- "# Inicializar el contador\n",
- "contador = 0\n",
- "\n",
- "# Mientras la longitud de la lista no sea 8\n",
- "while len(numeros_aleatorios_unicos) != 8:\n",
- "\n",
- " # Generar un número aleatorio entre 0 y 10\n",
- " numero = random.randint(0, 10)\n",
- "\n",
- " # Incrementar el contador en 1\n",
- " contador += 1\n",
- "\n",
- " # Si el número ya está en la lista\n",
- " if numero in numeros_aleatorios_unicos:\n",
- " # Imprime que el número ya está en la lista\n",
- " print(\"El número \" + str(numero) + \" ya está en la lista\")\n",
- " # En caso contrario\n",
- " else:\n",
- " # Agregar el nuevo número a la lista\n",
- " numeros_aleatorios_unicos.append(numero)\n",
- "\n",
- "# Imprimir la lista final y el total de números generados\n",
- "print(numeros_aleatorios_unicos)\n",
- "print(\"El total de números generados es: \" + str(contador))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "## 3. Sumar múltiplos positivos de 3\n",
- "\n",
- "- Escribe un código que siga pidiendo a un jugador que ingrese un número entero hasta que ingresen un número negativo. Al final, imprime la suma de todos los enteros ingresados que sean múltiplos de 3."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Inicializa la suma en 0\n",
- "suma_de_numeros = 0\n",
- "\n",
- "# Pide al usuario que ingrese un número entero\n",
- "numero = int(input(\"Ingresa un número entero: \"))\n",
- "\n",
- "# Mientras el número sea positivo\n",
- "while numero >= 0:\n",
- "\n",
- " # Si el número es múltiplo de 3\n",
- " if numero % 3 == 0:\n",
- " # Suma el número a la suma total\n",
- " suma_de_numeros += numero\n",
- "\n",
- " # Pide el siguiente número entero\n",
- " numero = int(input(\"Ingresa otro número entero: \"))\n",
- "\n",
- "# Imprime la suma final\n",
- "print(\"La suma de los múltiplos de 3 ingresados es: \" + str(suma_de_numeros))"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 18. Animales, números únicos y suma\n",
+ "\n",
+ "## Varios tipos de condiciones\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "animales = [\"jaguar\", \"manatí\", \"colibrí\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Crea un juego en el que la computadora elija al azar uno de los tres animales y el jugador debe adivinar el animal elegido por la computadora. Asegúrate de que el jugador siga jugando hasta que adivine el animal seleccionado por la computadora. Al final del juego, dile al jugador cuántos intentos le tomó adivinar el animal."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "# Elección de la computadora\n",
+ "eleccion_computadora = random.choice(animales)\n",
+ "\n",
+ "# Elección del jugador\n",
+ "eleccion_jugador = input(\"¡Adivina el animal! Opciones: jaguar, manatí, colibrí: \")\n",
+ "\n",
+ "# Inicializar el contador de intentos\n",
+ "n_de_intentos = 1\n",
+ "\n",
+ "# Mientras la elección del jugador y la elección de la computadora sean diferentes\n",
+ "while eleccion_jugador != eleccion_computadora:\n",
+ "\n",
+ " # Informar al jugador que no es el animal correcto\n",
+ " print(\"¡Ese no es el animal correcto!\")\n",
+ "\n",
+ " # Imprimir el número de intentos hasta ahora\n",
+ " print(\"Número de intentos hasta ahora: \" + str(n_de_intentos))\n",
+ "\n",
+ " # Incrementar el número de intentos\n",
+ " n_de_intentos += 1\n",
+ "\n",
+ " # Pedir al jugador que adivine de nuevo\n",
+ " eleccion_jugador = input(\"¡Inténtalo de nuevo! Adivina el animal! Opciones: jaguar, manatí, colibrí: \")\n",
+ "\n",
+ "# Informar al jugador que adivinó el animal correcto\n",
+ "print(\"¡Bien hecho! Adivinaste \" + eleccion_computadora + \" en el intento número \" + str(n_de_intentos))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "---\n",
+ "## 2. ¡Crea una lista de 8 números aleatorios únicos!\n",
+ "\n",
+ "- Crea una lista de 8 números aleatorios entre 0 y 10. Asegúrate de que sean únicos, es decir, que cada número esté presente solo una vez en la lista. Si el número ya está en la lista, entonces imprime lo siguiente: *El número x ya está en la lista*. ¿Cuántos números generaste antes de encontrar 8 números únicos?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "# Inicializar la lista de números únicos\n",
+ "numeros_aleatorios_unicos = []\n",
+ "\n",
+ "# Inicializar el contador\n",
+ "contador = 0\n",
+ "\n",
+ "# Mientras la longitud de la lista no sea 8\n",
+ "while len(numeros_aleatorios_unicos) != 8:\n",
+ "\n",
+ " # Generar un número aleatorio entre 0 y 10\n",
+ " numero = random.randint(0, 10)\n",
+ "\n",
+ " # Incrementar el contador en 1\n",
+ " contador += 1\n",
+ "\n",
+ " # Si el número ya está en la lista\n",
+ " if numero in numeros_aleatorios_unicos:\n",
+ " # Imprime que el número ya está en la lista\n",
+ " print(\"El número \" + str(numero) + \" ya está en la lista\")\n",
+ " # En caso contrario\n",
+ " else:\n",
+ " # Agregar el nuevo número a la lista\n",
+ " numeros_aleatorios_unicos.append(numero)\n",
+ "\n",
+ "# Imprimir la lista final y el total de números generados\n",
+ "print(numeros_aleatorios_unicos)\n",
+ "print(\"El total de números generados es: \" + str(contador))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 3. Sumar múltiplos positivos de 3\n",
+ "\n",
+ "- Escribe un código que siga pidiendo a un jugador que ingrese un número entero hasta que ingresen un número negativo. Al final, imprime la suma de todos los enteros ingresados que sean múltiplos de 3."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Inicializa la suma en 0\n",
+ "suma_de_numeros = 0\n",
+ "\n",
+ "# Pide al usuario que ingrese un número entero\n",
+ "numero = int(input(\"Ingresa un número entero: \"))\n",
+ "\n",
+ "# Mientras el número sea positivo\n",
+ "while numero >= 0:\n",
+ "\n",
+ " # Si el número es múltiplo de 3\n",
+ " if numero % 3 == 0:\n",
+ " # Suma el número a la suma total\n",
+ " suma_de_numeros += numero\n",
+ "\n",
+ " # Pide el siguiente número entero\n",
+ " numero = int(input(\"Ingresa otro número entero: \"))\n",
+ "\n",
+ "# Imprime la suma final\n",
+ "print(\"La suma de los múltiplos de 3 ingresados es: \" + str(suma_de_numeros))"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/19_combining_conditions.ipynb b/19_combining_conditions.ipynb
index c160055..64c3ec9 100644
--- a/19_combining_conditions.ipynb
+++ b/19_combining_conditions.ipynb
@@ -1,267 +1,267 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 19. And, or, not, not in\n",
- "\n",
- "## Combinando y revirtiendo condiciones\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## and \n",
- "\n",
- "- Dada la siguiente lista de enteros:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [1, 5, 7, 2, 8, 19]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los números que están entre 5 **y** 10:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(0, len(numeros)):\n",
- "\n",
- " # Si el número actual está entre 5 y 10\n",
- " if numeros[i] >= 5 and numeros[i] <= 10:\n",
- "\n",
- " # Imprime el número actual\n",
- " print(\"El número \" + str(numeros[i]) + \" está entre 5 y 10\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## or \n",
- "\n",
- "- Dada la siguiente cadena de texto: "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "mensaje = \"¡¡¡Que tengas un buen día!!!\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Y dados todos los signos de puntuación:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "puntuacion = \"\\\"/\\'()[]{}<>,.;:¿?¡!^@∼#$%&*_-\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime y cuenta el número de caracteres que son signos de puntuación **o** vocales:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Cadena de vocales\n",
- "vocales = \"aeiouáéíóú\"\n",
- "\n",
- "# Inicializa el contador\n",
- "contador = 0\n",
- "\n",
- "# Para cada posición en el mensaje\n",
- "for i in range(len(mensaje)):\n",
- "\n",
- " # Si el elemento actual es un signo de puntuación o una vocal\n",
- " if mensaje[i] in puntuacion or mensaje[i] in vocales:\n",
- "\n",
- " # Imprime un mensaje\n",
- " print(mensaje[i] + \" es una vocal o un signo de puntuación\")\n",
- "\n",
- " # Incrementa el contador\n",
- " contador += 1\n",
- "\n",
- "# Imprime la cantidad final\n",
- "print(\"El total de signos de puntuación o vocales es \" + str(contador))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## not\n",
- "\n",
- "- Dada la siguiente lista de enteros:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [4, 6, 7, 9]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los números que **no** son divisibles por 2:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(len(numeros)):\n",
- "\n",
- " # Si el número actual no es par\n",
- " if not numeros[i] % 2 == 0:\n",
- "\n",
- " # Imprime el número actual\n",
- " print(numeros[i])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Solución alternativa:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Para cada posición en la lista\n",
- "for i in range(len(numeros)):\n",
- "\n",
- " # Si el número actual es impar\n",
- " if numeros[i] % 2 != 0:\n",
- "\n",
- " # Imprime el número actual\n",
- " print(numeros[i])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## not in\n",
- "\n",
- "- Genera 5 números aleatorios entre 0 y 10. Si los números aleatorios **no** están ya **en** la siguiente lista, agrégalos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [1,4,7]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random\n",
- "\n",
- "# Repite el proceso cinco veces\n",
- "for _ in range(5):\n",
- "\n",
- " # Genera un número aleatorio entre 0 y 10\n",
- " numero = random.randint(0, 10)\n",
- " # Imprime el número como comprobación\n",
- " print(numero)\n",
- "\n",
- " # Si el nuevo número no está en la lista de números\n",
- " if numero not in numeros:\n",
- " # Agrégalo a la lista de números\n",
- " numeros.append(numero)\n",
- "\n",
- "# Imprime la lista final\n",
- "print(numeros)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 19. And, or, not, not in\n",
+ "\n",
+ "## Combinando y revirtiendo condiciones\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## and \n",
+ "\n",
+ "- Dada la siguiente lista de enteros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [1, 5, 7, 2, 8, 19]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los números que están entre 5 **y** 10:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(0, len(numeros)):\n",
+ "\n",
+ " # Si el número actual está entre 5 y 10\n",
+ " if numeros[i] >= 5 and numeros[i] <= 10:\n",
+ "\n",
+ " # Imprime el número actual\n",
+ " print(\"El número \" + str(numeros[i]) + \" está entre 5 y 10\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## or \n",
+ "\n",
+ "- Dada la siguiente cadena de texto: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mensaje = \"¡¡¡Que tengas un buen día!!!\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Y dados todos los signos de puntuación:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "puntuacion = \"\\\"/\\'()[]{}<>,.;:¿?¡!^@∼#$%&*_-\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime y cuenta el número de caracteres que son signos de puntuación **o** vocales:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Cadena de vocales\n",
+ "vocales = \"aeiouáéíóú\"\n",
+ "\n",
+ "# Inicializa el contador\n",
+ "contador = 0\n",
+ "\n",
+ "# Para cada posición en el mensaje\n",
+ "for i in range(len(mensaje)):\n",
+ "\n",
+ " # Si el elemento actual es un signo de puntuación o una vocal\n",
+ " if mensaje[i] in puntuacion or mensaje[i] in vocales:\n",
+ "\n",
+ " # Imprime un mensaje\n",
+ " print(mensaje[i] + \" es una vocal o un signo de puntuación\")\n",
+ "\n",
+ " # Incrementa el contador\n",
+ " contador += 1\n",
+ "\n",
+ "# Imprime la cantidad final\n",
+ "print(\"El total de signos de puntuación o vocales es \" + str(contador))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## not\n",
+ "\n",
+ "- Dada la siguiente lista de enteros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [4, 6, 7, 9]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los números que **no** son divisibles por 2:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(len(numeros)):\n",
+ "\n",
+ " # Si el número actual no es par\n",
+ " if not numeros[i] % 2 == 0:\n",
+ "\n",
+ " # Imprime el número actual\n",
+ " print(numeros[i])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Solución alternativa:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Para cada posición en la lista\n",
+ "for i in range(len(numeros)):\n",
+ "\n",
+ " # Si el número actual es impar\n",
+ " if numeros[i] % 2 != 0:\n",
+ "\n",
+ " # Imprime el número actual\n",
+ " print(numeros[i])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## not in\n",
+ "\n",
+ "- Genera 5 números aleatorios entre 0 y 10. Si los números aleatorios **no** están ya **en** la siguiente lista, agrégalos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [1,4,7]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "# Repite el proceso cinco veces\n",
+ "for _ in range(5):\n",
+ "\n",
+ " # Genera un número aleatorio entre 0 y 10\n",
+ " numero = random.randint(0, 10)\n",
+ " # Imprime el número como comprobación\n",
+ " print(numero)\n",
+ "\n",
+ " # Si el nuevo número no está en la lista de números\n",
+ " if numero not in numeros:\n",
+ " # Agrégalo a la lista de números\n",
+ " numeros.append(numero)\n",
+ "\n",
+ "# Imprime la lista final\n",
+ "print(numeros)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/20_booleans.ipynb b/20_booleans.ipynb
index 442fefa..5f67268 100644
--- a/20_booleans.ipynb
+++ b/20_booleans.ipynb
@@ -1,306 +1,306 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "# 20. ¿Qué hay detrás de las comparaciones y condiciones?\n",
- "\n",
- "## Booleanos\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1. Comparación o condición simple\n",
- "\n",
- "- Dada la siguiente asignación:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = 5"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Cuál es el resultado de la siguiente operación de comparación?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (numero > 3)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Asigna la operación anterior a una variable e imprímela. ¿Qué tipo de dato es?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "resultado = numero > 3\n",
- "print(resultado)\n",
- "print(type(resultado))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Cuál es el resultado de la siguiente operación de comparación?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (numero < 3)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Asigna la operación anterior a una variable e imprímela. ¿Qué tipo de dato es?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "resultado = numero < 3\n",
- "print(resultado)\n",
- "print(type(resultado))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "---\n",
- "\n",
- "### 2. Combinando comparaciones o condiciones\n",
- "\n",
- "- ¿Cuál es el resultado de las siguientes operaciones de comparación?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = 3\n",
- "print(numero > 1) \n",
- "print(numero < 5) \n",
- "print(numero > 1 and numero < 5) "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Qué sucede si cambiamos la primera condición para que sea falsa?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = 3\n",
- "print(numero > 4) \n",
- "print(numero < 5) \n",
- "print(numero > 4 and numero < 5) "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Qué sucede si cambiamos la segunda condición para que sea falsa?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = 3\n",
- "print(numero > 1) \n",
- "print(numero < 2) \n",
- "print(numero > 1 and numero < 2) "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Finalmente, ¿qué sucede si cambiamos ambas condiciones para que sean falsas?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numero = 3\n",
- "print(numero > 4) \n",
- "print(numero < 2) \n",
- "print(numero > 4 and numero < 2) "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "\n",
- "### 3. ¿Dónde más usamos booleanos?\n",
- "\n",
- "- Mira esta versión modificada del ejemplo *¿Quieres más dulces?* del Capítulo 17:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Inicializar variables\n",
- "numero_de_dulces = 0\n",
- "\n",
- "# Usar el booleano como una bandera\n",
- "bandera = True\n",
- "\n",
- "# Imprimir el número inicial de dulces\n",
- "print(\"Tienes \" + str(numero_de_dulces) + \" dulces\")\n",
- "\n",
- "# Mientras la bandera sea True (= un semáforo verde):\n",
- "while bandera == True:\n",
- "\n",
- " # Preguntar si se quiere un dulce\n",
- " respuesta = input(\"¿Quieres un dulce? (sí/no)\")\n",
- "\n",
- " # Si la respuesta es sí\n",
- " if respuesta == \"sí\":\n",
- "\n",
- " # Agregar un dulce\n",
- " numero_de_dulces += 1\n",
- "\n",
- " # Imprimir el número total de dulces\n",
- " print(\"Tienes \" + str(numero_de_dulces) + \" dulces\")\n",
- "\n",
- " # Si la respuesta es no\n",
- " else:\n",
- "\n",
- " # Imprimir el número final de dulces\n",
- " print(\"Tienes un total de \" + str(numero_de_dulces) + \" dulces\")\n",
- "\n",
- " # Detener el bucle asignando False a la bandera (= un semáforo rojo)\n",
- " bandera = False"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aquí está el código del Capítulo 17 para comparación:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Inicializa tus variables\n",
- "cantidad_de_dulces = 0\n",
- "\n",
- "# Imprime la cantidad inicial de dulces que tienes\n",
- "print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
- "\n",
- "# Responde si deseas un dulce\n",
- "respuesta = input(\"¿Quieres un dulce? (sí/no)\")\n",
- "\n",
- "# Mientras tu respuesta sea sí:\n",
- "while respuesta == \"sí\":\n",
- "\n",
- " # Agrega un dulce a tu colección\n",
- " cantidad_de_dulces += 1\n",
- "\n",
- " # Imprime la cantidad actual de dulces que tienes\n",
- " print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
- "\n",
- " # Pregunta de nuevo si deseas más dulces\n",
- " respuesta = input(\"¿Quieres más dulces? (sí/no)\")\n",
- "\n",
- "# Imprime la cantidad final de dulces que tienes\n",
- "print(\"Tienes un total de \" + str(cantidad_de_dulces) + \" dulces\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "# 20. ¿Qué hay detrás de las comparaciones y condiciones?\n",
+ "\n",
+ "## Booleanos\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1. Comparación o condición simple\n",
+ "\n",
+ "- Dada la siguiente asignación:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numero = 5"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cuál es el resultado de la siguiente operación de comparación?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (numero > 3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Asigna la operación anterior a una variable e imprímela. ¿Qué tipo de dato es?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "resultado = numero > 3\n",
+ "print(resultado)\n",
+ "print(type(resultado))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cuál es el resultado de la siguiente operación de comparación?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (numero < 3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Asigna la operación anterior a una variable e imprímela. ¿Qué tipo de dato es?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "resultado = numero < 3\n",
+ "print(resultado)\n",
+ "print(type(resultado))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "---\n",
+ "\n",
+ "### 2. Combinando comparaciones o condiciones\n",
+ "\n",
+ "- ¿Cuál es el resultado de las siguientes operaciones de comparación?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numero = 3\n",
+ "print(numero > 1) \n",
+ "print(numero < 5) \n",
+ "print(numero > 1 and numero < 5) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Qué sucede si cambiamos la primera condición para que sea falsa?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numero = 3\n",
+ "print(numero > 4) \n",
+ "print(numero < 5) \n",
+ "print(numero > 4 and numero < 5) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Qué sucede si cambiamos la segunda condición para que sea falsa?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numero = 3\n",
+ "print(numero > 1) \n",
+ "print(numero < 2) \n",
+ "print(numero > 1 and numero < 2) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Finalmente, ¿qué sucede si cambiamos ambas condiciones para que sean falsas?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numero = 3\n",
+ "print(numero > 4) \n",
+ "print(numero < 2) \n",
+ "print(numero > 4 and numero < 2) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "\n",
+ "### 3. ¿Dónde más usamos booleanos?\n",
+ "\n",
+ "- Mira esta versión modificada del ejemplo *¿Quieres más dulces?* del Capítulo 17:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Inicializar variables\n",
+ "numero_de_dulces = 0\n",
+ "\n",
+ "# Usar el booleano como una bandera\n",
+ "bandera = True\n",
+ "\n",
+ "# Imprimir el número inicial de dulces\n",
+ "print(\"Tienes \" + str(numero_de_dulces) + \" dulces\")\n",
+ "\n",
+ "# Mientras la bandera sea True (= un semáforo verde):\n",
+ "while bandera == True:\n",
+ "\n",
+ " # Preguntar si se quiere un dulce\n",
+ " respuesta = input(\"¿Quieres un dulce? (sí/no)\")\n",
+ "\n",
+ " # Si la respuesta es sí\n",
+ " if respuesta == \"sí\":\n",
+ "\n",
+ " # Agregar un dulce\n",
+ " numero_de_dulces += 1\n",
+ "\n",
+ " # Imprimir el número total de dulces\n",
+ " print(\"Tienes \" + str(numero_de_dulces) + \" dulces\")\n",
+ "\n",
+ " # Si la respuesta es no\n",
+ " else:\n",
+ "\n",
+ " # Imprimir el número final de dulces\n",
+ " print(\"Tienes un total de \" + str(numero_de_dulces) + \" dulces\")\n",
+ "\n",
+ " # Detener el bucle asignando False a la bandera (= un semáforo rojo)\n",
+ " bandera = False"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aquí está el código del Capítulo 17 para comparación:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Inicializa tus variables\n",
+ "cantidad_de_dulces = 0\n",
+ "\n",
+ "# Imprime la cantidad inicial de dulces que tienes\n",
+ "print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
+ "\n",
+ "# Responde si deseas un dulce\n",
+ "respuesta = input(\"¿Quieres un dulce? (sí/no)\")\n",
+ "\n",
+ "# Mientras tu respuesta sea sí:\n",
+ "while respuesta == \"sí\":\n",
+ "\n",
+ " # Agrega un dulce a tu colección\n",
+ " cantidad_de_dulces += 1\n",
+ "\n",
+ " # Imprime la cantidad actual de dulces que tienes\n",
+ " print(\"Tienes \" + str(cantidad_de_dulces) + \" dulces\")\n",
+ "\n",
+ " # Pregunta de nuevo si deseas más dulces\n",
+ " respuesta = input(\"¿Quieres más dulces? (sí/no)\")\n",
+ "\n",
+ "# Imprime la cantidad final de dulces que tienes\n",
+ "print(\"Tienes un total de \" + str(cantidad_de_dulces) + \" dulces\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/21_list_overview.ipynb b/21_list_overview.ipynb
index ae3d163..16d2175 100644
--- a/21_list_overview.ipynb
+++ b/21_list_overview.ipynb
@@ -1,553 +1,553 @@
{
- "cells": [
- {
- "cell_type": "markdown",
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "# 21. Visión general de las listas\n",
+ "\n",
+ "## Operaciones, métodos y trucos\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Operaciones aritméticas en elementos de listas\n",
+ "\n",
+ "- Suma dos listas elemento por elemento:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros_impares = [1, 3, 5]\n",
+ "numeros_pares = [2, 4, 6]\n",
+ "suma = []\n",
+ "\n",
+ "for i in range(len(numeros_impares)):\n",
+ " suma.append(numeros_impares[i] + numeros_pares[i])\n",
+ "\n",
+ "print(suma)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Suma un número a cada elemento de una lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [1, 2, 3]\n",
+ "numero = 3\n",
+ "\n",
+ "for i in range(len(numeros)):\n",
+ " numeros[i] += numero\n",
+ "\n",
+ "print(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "\n",
+ "## 2. Operaciones \"aritméticas\" entre listas\n",
+ "\n",
+ "- Concatenar dos listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros_impares = [1, 3, 5] # dos listas\n",
+ "numeros_pares = [2, 4, 6]\n",
+ "concatenados = numeros_impares + numeros_pares\n",
+ "print(concatenados)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Replica una lista 3 veces:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [1, 2, 3]\n",
+ "numero = 3\n",
+ "replicada = numeros * numero\n",
+ "print(replicada)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cuándo es útil la replicación?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lista_corta = [0]\n",
+ "numero = 50\n",
+ "lista_larga = lista_corta * numero\n",
+ "print(lista_larga)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "\n",
+ "## 3. Asignación de lista\n",
+ "\n",
+ "- Dada una lista que contiene algunos enteros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lista_dada = [1, 2, 3]\n",
+ "print(lista_dada)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Asigna `lista_dada` a `nueva_lista`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "nueva_lista = lista_dada\n",
+ "print(nueva_lista)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Cambia el primer elemento de `nueva_lista`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "nueva_lista[0] = 10\n",
+ "print(nueva_lista)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime `lista_dada`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(lista_dada)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cómo podemos crear una copia independiente de una lista?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lista_dada = [1, 2, 3]\n",
+ "nueva_lista = lista_dada.copy()\n",
+ "nueva_lista[0] = 40\n",
+ "print(lista_dada)\n",
+ "print(nueva_lista)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "\n",
+ "## 4. Agregar elementos o listas a una lista \n",
+ "\n",
+ "- Agregar un elemento al final de una lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [1, 2, 3]\n",
+ "numeros.append(4)\n",
+ "print(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Inserta el número 2 en la posición 1:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [1, 3, 4]\n",
+ "numeros.insert(1, 2)\n",
+ "print(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Concatena dos listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "primera_lista = [1, 2, 3]\n",
+ "segunda_lista = [4, 5, 6]\n",
+ "tercera_lista = primera_lista + segunda_lista\n",
+ "print(tercera_lista)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Agrega una lista al final de otra lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "primera_lista = [1, 2, 3]\n",
+ "segunda_lista = [4, 5, 6]\n",
+ "primera_lista.extend(segunda_lista)\n",
+ "print(primera_lista)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "\n",
+ "## 5. Eliminar elementos de una lista \n",
+ "\n",
+ "- De la siguiente lista, elimina todos los elementos `\"ciao\"`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
+ "saludos.remove(\"ciao\")\n",
+ "print(saludos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cómo eliminamos ambos `\"ciao\"` de los saludos?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
+ "while \"ciao\" in saludos:\n",
+ " saludos.remove(\"ciao\")\n",
+ "print(saludos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina la cadena `\"hola\"` en función de su posición:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
+ "saludos.pop(2)\n",
+ "print(saludos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina todos los elementos de una lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
+ "saludos.clear()\n",
+ "print(saludos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "\n",
+ "## 6. Ordenar una lista \n",
+ "\n",
+ "- Ordena la siguiente lista de enteros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [5, 7, 6]\n",
+ "numeros.sort()\n",
+ "print(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ordena la siguiente lista de enteros de manera descendente:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [5, 7, 6]\n",
+ "numeros.sort(reverse=True)\n",
+ "print(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Invierte la siguiente lista de enteros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numeros = [5, 7, 6]\n",
+ "numeros.reverse()\n",
+ "print(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "\n",
+ "## 7. Buscar elementos \n",
+ "\n",
+ "- Crea una lista y busca un elemento específico:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "letras = [\"a\", \"g\", \"c\", \"g\"]\n",
+ "posicion = letras.index(\"g\") \n",
+ "print(posicion)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cómo encontramos todas las posiciones?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "letras = [\"a\", \"g\", \"c\", \"g\"]\n",
+ "posiciones = []\n",
+ "for i in range(len(letras)):\n",
+ " if letras[i] == \"g\":\n",
+ " posiciones.append(i)\n",
+ "print(posiciones)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Contar cuántas veces está presente un elemento en una lista: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "letras = [\"a\", \"g\", \"c\", \"g\"]\n",
+ "n = letras.count(\"g\") \n",
+ "print(n)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "\n",
+ "## En más detalle"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "saludos = [\"ciao\", \"ciao\", \"hola\"] # alternativa con for\n",
+ "for i in range(len(saludos)):\n",
+ " print(\"---------------\")\n",
+ " print(\"i == \" + str(i))\n",
+ " print(\"antes del if:\")\n",
+ " print(saludos)\n",
+ " if saludos[i] == \"ciao\":\n",
+ " del saludos[i] \n",
+ " print(\"después del if:\")\n",
+ " print(saludos)"
+ ]
+ }
+ ],
"metadata": {
- "tags": []
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
},
- "source": [
- "# 21. Visión general de las listas\n",
- "\n",
- "## Operaciones, métodos y trucos\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. Operaciones aritméticas en elementos de listas\n",
- "\n",
- "- Suma dos listas elemento por elemento:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros_impares = [1, 3, 5]\n",
- "numeros_pares = [2, 4, 6]\n",
- "suma = []\n",
- "\n",
- "for i in range(len(numeros_impares)):\n",
- " suma.append(numeros_impares[i] + numeros_pares[i])\n",
- "\n",
- "print(suma)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Suma un número a cada elemento de una lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [1, 2, 3]\n",
- "numero = 3\n",
- "\n",
- "for i in range(len(numeros)):\n",
- " numeros[i] += numero\n",
- "\n",
- "print(numeros)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "\n",
- "## 2. Operaciones \"aritméticas\" entre listas\n",
- "\n",
- "- Concatenar dos listas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros_impares = [1, 3, 5] # dos listas\n",
- "numeros_pares = [2, 4, 6]\n",
- "concatenados = numeros_impares + numeros_pares\n",
- "print(concatenados)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Replica una lista 3 veces:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [1, 2, 3]\n",
- "numero = 3\n",
- "replicada = numeros * numero\n",
- "print(replicada)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Cuándo es útil la replicación?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "lista_corta = [0]\n",
- "numero = 50\n",
- "lista_larga = lista_corta * numero\n",
- "print(lista_larga)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "\n",
- "## 3. Asignación de lista\n",
- "\n",
- "- Dada una lista que contiene algunos enteros:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "lista_dada = [1, 2, 3]\n",
- "print(lista_dada)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Asigna `lista_dada` a `nueva_lista`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "nueva_lista = lista_dada\n",
- "print(nueva_lista)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Cambia el primer elemento de `nueva_lista`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "nueva_lista[0] = 10\n",
- "print(nueva_lista)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime `lista_dada`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(lista_dada)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Cómo podemos crear una copia independiente de una lista?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "lista_dada = [1, 2, 3]\n",
- "nueva_lista = lista_dada.copy()\n",
- "nueva_lista[0] = 40\n",
- "print(lista_dada)\n",
- "print(nueva_lista)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "\n",
- "## 4. Agregar elementos o listas a una lista \n",
- "\n",
- "- Agregar un elemento al final de una lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [1, 2, 3]\n",
- "numeros.append(4)\n",
- "print(numeros)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Inserta el número 2 en la posición 1:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [1, 3, 4]\n",
- "numeros.insert(1, 2)\n",
- "print(numeros)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Concatena dos listas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "primera_lista = [1, 2, 3]\n",
- "segunda_lista = [4, 5, 6]\n",
- "tercera_lista = primera_lista + segunda_lista\n",
- "print(tercera_lista)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Agrega una lista al final de otra lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "primera_lista = [1, 2, 3]\n",
- "segunda_lista = [4, 5, 6]\n",
- "primera_lista.extend(segunda_lista)\n",
- "print(primera_lista)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "\n",
- "## 5. Eliminar elementos de una lista \n",
- "\n",
- "- De la siguiente lista, elimina todos los elementos `\"ciao\"`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
- "saludos.remove(\"ciao\")\n",
- "print(saludos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Cómo eliminamos ambos `\"ciao\"` de los saludos?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
- "while \"ciao\" in saludos:\n",
- " saludos.remove(\"ciao\")\n",
- "print(saludos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Elimina la cadena `\"hola\"` en función de su posición:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
- "saludos.pop(2)\n",
- "print(saludos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Elimina todos los elementos de una lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "saludos = [\"ciao\", \"ciao\", \"hola\"]\n",
- "saludos.clear()\n",
- "print(saludos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "\n",
- "## 6. Ordenar una lista \n",
- "\n",
- "- Ordena la siguiente lista de enteros:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [5, 7, 6]\n",
- "numeros.sort()\n",
- "print(numeros)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Ordena la siguiente lista de enteros de manera descendente:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [5, 7, 6]\n",
- "numeros.sort(reverse=True)\n",
- "print(numeros)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Invierte la siguiente lista de enteros:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "numeros = [5, 7, 6]\n",
- "numeros.reverse()\n",
- "print(numeros)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "\n",
- "## 7. Buscar elementos \n",
- "\n",
- "- Crea una lista y busca un elemento específico:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "letras = [\"a\", \"g\", \"c\", \"g\"]\n",
- "posicion = letras.index(\"g\") \n",
- "print(posicion)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- ¿Cómo encontramos todas las posiciones?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "letras = [\"a\", \"g\", \"c\", \"g\"]\n",
- "posiciones = []\n",
- "for i in range(len(letras)):\n",
- " if letras[i] == \"g\":\n",
- " posiciones.append(i)\n",
- "print(posiciones)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Contar cuántas veces está presente un elemento en una lista: "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "letras = [\"a\", \"g\", \"c\", \"g\"]\n",
- "n = letras.count(\"g\") \n",
- "print(n)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "\n",
- "## En más detalle"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "saludos = [\"ciao\", \"ciao\", \"hola\"] # alternativa con for\n",
- "for i in range(len(saludos)):\n",
- " print(\"---------------\")\n",
- " print(\"i == \" + str(i))\n",
- " print(\"antes del if:\")\n",
- " print(saludos)\n",
- " if saludos[i] == \"ciao\":\n",
- " del saludos[i] \n",
- " print(\"después del if:\")\n",
- " print(saludos)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.2"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/22_for_overview.ipynb b/22_for_overview.ipynb
index a1eda68..b296ccf 100644
--- a/22_for_overview.ipynb
+++ b/22_for_overview.ipynb
@@ -1,272 +1,282 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 22. Detalles adicionales sobre el bucle for\n",
- "\n",
- "## Varias maneras para repetir comandos en listas y más\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. Repetir comandos\n",
- "\n",
- "- Imprimir 3 números aleatorios entre 1 y 10:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "import random\n",
- "\n",
- "for _ in range(3):\n",
- " numero = random.randint(1, 10)\n",
- " print(numero)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## 2. Bucles for con listas"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "### 2.1. For loop through *indices*\n",
- "\n",
- "- Capitalize each string using a for loop through *indices*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "last_names = [\"garcia\", \"smith\", \"zhang\"]\n",
- "\n",
- "for i in range (len(last_names)):\n",
- " print (\"The element in position \" + str(i) + \" is: \" + last_names[i])\n",
- " last_names[i] = last_names[i].title()\n",
- "\n",
- "print (last_names)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "### 2.2 Bucle for a través de *elementos*\n",
- "\n",
- "- Capitalizar cada cadena usando un bucle for a través de *elementos*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
- "apellidos_mayusculas = []\n",
- "\n",
- "for apellido in apellidos:\n",
- " print(\"El elemento actual es: \" + apellido)\n",
- " apellidos_mayusculas.append(apellido.title())\n",
- "\n",
- "print(apellidos_mayusculas)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 2.3 Bucle for a través de *índices* y *elementos*\n",
- "\n",
- "- Capitalizar cada cadena usando un bucle for a través de *índices y elementos*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
- "\n",
- "for i, apellido in enumerate(apellidos):\n",
- " print(\"El elemento en la posición \" + str(i) + \" es: \" + apellido)\n",
- " apellidos[i] = apellido.title()\n",
- "\n",
- "print(apellidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 2.4 Construcción de listas\n",
- "\n",
- "- Capitalizar cada cadena utilizando *construcción de listas* que contiene un bucle for a través de *índices*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
- "apellidos = [apellidos[i].title() for i in range(len(apellidos))]\n",
- "print(apellidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Capitalizar cada cadena utilizando *construcción de listas* que contiene un bucle for a través de *elementos*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
- "apellidos = [apellido.title() for apellido in apellidos]\n",
- "print(apellidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "- Conserva y capitaliza solo los elementos con menos de 6 caracteres:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
- "apellidos = [apellido.title() for apellido in apellidos if len(apellido) < 6]\n",
- "print(apellidos)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Elimina elementos que estén compuestos por 5 caracteres:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
- "apellidos = [apellido for apellido in apellidos if len(apellido) != 5]\n",
- "print(apellidos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## 3. Bucles for anidados\n",
- "\n",
- "- Dada la siguiente lista de vocales:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "vocales = [\"A\", \"E\", \"I\", \"O\", \"U\"]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Para cada vocal, imprime todas las vocales a la derecha:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for i in range(len(vocales)):\n",
- " print(\"-- \" + vocales[i])\n",
- " for j in range(i + 1, len(vocales)):\n",
- " print(vocales[j])"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 22. Detalles adicionales sobre el bucle for\n",
+ "\n",
+ "## Varias maneras para repetir comandos en listas y más\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Repetir comandos\n",
+ "\n",
+ "- Imprimir 3 números aleatorios entre 1 y 10:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "for _ in range(3):\n",
+ " numero = random.randint(1, 10)\n",
+ " print(numero)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. Bucles for con listas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### 2.1. Bucle for loop a traves de *indices*\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Capitalizar cada cadena usando un bucle for a través de *indices*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "appellidos = [\"garcia\", \"smith\", \"zhang\"]\n",
+ "\n",
+ "for i in range (len(appellidos)):\n",
+ " print (\"El elemento en posicion \" + str(i) + \" es: \" + appellidos[i])\n",
+ " appellidos[i] = appellidos[i].title()\n",
+ "\n",
+ "print (appellidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### 2.2 Bucle for a través de *elementos*\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Capitalizar cada cadena usando un bucle for a través de *elementos*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
+ "apellidos_mayusculas = []\n",
+ "\n",
+ "for apellido in apellidos:\n",
+ " print(\"El elemento actual es: \" + apellido)\n",
+ " apellidos_mayusculas.append(apellido.title())\n",
+ "\n",
+ "print(apellidos_mayusculas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2.3 Bucle for a través de *índices* y *elementos*\n",
+ "\n",
+ "- Capitalizar cada cadena usando un bucle for a través de *índices y elementos*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
+ "\n",
+ "for i, apellido in enumerate(apellidos):\n",
+ " print(\"El elemento en la posición \" + str(i) + \" es: \" + apellido)\n",
+ " apellidos[i] = apellido.title()\n",
+ "\n",
+ "print(apellidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2.4 Construcción de listas\n",
+ "\n",
+ "- Capitalizar cada cadena utilizando *construcción de listas* que contiene un bucle for a través de *índices*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
+ "apellidos = [apellidos[i].title() for i in range(len(apellidos))]\n",
+ "print(apellidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Capitalizar cada cadena utilizando *construcción de listas* que contiene un bucle for a través de *elementos*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
+ "apellidos = [apellido.title() for apellido in apellidos]\n",
+ "print(apellidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "- Conserva y capitaliza solo los elementos con menos de 6 caracteres:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
+ "apellidos = [apellido.title() for apellido in apellidos if len(apellido) < 6]\n",
+ "print(apellidos)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina elementos que estén compuestos por 5 caracteres:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "apellidos = [\"garcía\", \"smith\", \"zhang\"]\n",
+ "apellidos = [apellido for apellido in apellidos if len(apellido) != 5]\n",
+ "print(apellidos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Bucles for anidados\n",
+ "\n",
+ "- Dada la siguiente lista de vocales:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "vocales = [\"A\", \"E\", \"I\", \"O\", \"U\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Para cada vocal, imprime todas las vocales a la derecha:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for i in range(len(vocales)):\n",
+ " print(\"-- \" + vocales[i])\n",
+ " for j in range(i + 1, len(vocales)):\n",
+ " print(vocales[j])"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/23_list_of_lists.ipynb b/23_list_of_lists.ipynb
index 9b59485..5e991a5 100644
--- a/23_list_of_lists.ipynb
+++ b/23_list_of_lists.ipynb
@@ -1,266 +1,266 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 23. Lista de listas\n",
- "\n",
- "## Segmentación, bucles `for` anidados y aplanado\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. Segmentación"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dada la siguiente lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "animales = [[\"perro\", \"gato\"], [\"vaca\", \"oveja\", \"caballo\", \"pollo\", \"conejo\"], [\"panda\", \"elefante\", \"jirafa\", \"pingüino\"]]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime las sub-listas que contienen mascotas, animales de granja y animales salvajes:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (animales[0])\n",
- "print (animales[1])\n",
- "print (animales[2])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los sub-elementos \"gato\", \"conejo\" y desde \"panda\" hasta \"jirafa\":"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (animales[0][1])\n",
- "print (animales[1][-1])\n",
- "print (animales[2][:3])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "--- \n",
- "## 2. Bucles for anidados"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dadas las siguienstes listas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "deportes = [[\"esquí\", \"patinaje\", \"curling\"], [\"canotaje\", \"ciclismo\", \"natación\", \"surf\"]]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los elementos de las sub-listas uno por uno usando bucles for anidados a través de *índices*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for i in range (len(deportes)): \n",
- " for j in range (len(deportes[i])):\n",
- " print (deportes[i][j])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los elementos de las sub-listas uno por uno usando bucles for anidados a través de *valores*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for deportes_estacionales in deportes:\n",
- " for deporte in deportes_estacionales:\n",
- " print (deporte)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Aplanado"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dada la siguiente lista de listas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "instrumentos = [[\"contrabajo\", \"violonchelo\", \"clarinete\"],[\"gong\", \"guitarra\"],[\"pandereta\", \"trompeta\", \"trombón\", \"triángulo\"]]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aplana la lista usando un bucle for anidado a través de *índices*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "instrumentos_aplanados = []\n",
- "for i in range(len(instrumentos)):\n",
- " for j in range (len(instrumentos[i])):\n",
- " instrumentos_aplanados.append(instrumentos[i][j])\n",
- "print (instrumentos_aplanados)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aplana la lista usando un bucle for anidado a través de *elementos*:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "instrumentos_aplanados = []\n",
- "for grupo in instrumentos:\n",
- " for instrumento in grupo:\n",
- " instrumentos_aplanados.append(instrumento)\n",
- "print (instrumentos_aplanados)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aplana la lista usando un bucle for y concatenación de listas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "instrumentos_aplanados = []\n",
- "for grupo in instrumentos:\n",
- " instrumentos_aplanados += grupo\n",
- "print (instrumentos_aplanados)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Aplana la lista usando comprensión de listas:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "instrumentos = [instrumento for grupo in instrumentos for instrumento in grupo]\n",
- "print (instrumentos)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 23. Lista de listas\n",
+ "\n",
+ "## Segmentación, bucles `for` anidados y aplanado\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Segmentación"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "animales = [[\"perro\", \"gato\"], [\"vaca\", \"oveja\", \"caballo\", \"pollo\", \"conejo\"], [\"panda\", \"elefante\", \"jirafa\", \"pingüino\"]]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime las sub-listas que contienen mascotas, animales de granja y animales salvajes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (animales[0])\n",
+ "print (animales[1])\n",
+ "print (animales[2])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los sub-elementos \"gato\", \"conejo\" y desde \"panda\" hasta \"jirafa\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (animales[0][1])\n",
+ "print (animales[1][-1])\n",
+ "print (animales[2][:3])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 2. Bucles for anidados"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dadas las siguienstes listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "deportes = [[\"esquí\", \"patinaje\", \"curling\"], [\"canotaje\", \"ciclismo\", \"natación\", \"surf\"]]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los elementos de las sub-listas uno por uno usando bucles for anidados a través de *índices*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for i in range (len(deportes)): \n",
+ " for j in range (len(deportes[i])):\n",
+ " print (deportes[i][j])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los elementos de las sub-listas uno por uno usando bucles for anidados a través de *valores*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for deportes_estacionales in deportes:\n",
+ " for deporte in deportes_estacionales:\n",
+ " print (deporte)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Aplanado"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista de listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "instrumentos = [[\"contrabajo\", \"violonchelo\", \"clarinete\"],[\"gong\", \"guitarra\"],[\"pandereta\", \"trompeta\", \"trombón\", \"triángulo\"]]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aplana la lista usando un bucle for anidado a través de *índices*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "instrumentos_aplanados = []\n",
+ "for i in range(len(instrumentos)):\n",
+ " for j in range (len(instrumentos[i])):\n",
+ " instrumentos_aplanados.append(instrumentos[i][j])\n",
+ "print (instrumentos_aplanados)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aplana la lista usando un bucle for anidado a través de *elementos*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "instrumentos_aplanados = []\n",
+ "for grupo in instrumentos:\n",
+ " for instrumento in grupo:\n",
+ " instrumentos_aplanados.append(instrumento)\n",
+ "print (instrumentos_aplanados)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aplana la lista usando un bucle for y concatenación de listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "instrumentos_aplanados = []\n",
+ "for grupo in instrumentos:\n",
+ " instrumentos_aplanados += grupo\n",
+ "print (instrumentos_aplanados)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aplana la lista usando comprensión de listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "instrumentos = [instrumento for grupo in instrumentos for instrumento in grupo]\n",
+ "print (instrumentos)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/24_dictionaries.ipynb b/24_dictionaries.ipynb
index 8afb4b7..48d68e2 100644
--- a/24_dictionaries.ipynb
+++ b/24_dictionaries.ipynb
@@ -1,288 +1,288 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 24. Inventario en la librería española \n",
- "\n",
- "## Diccionario\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Eres el dueño de una librería española y estos son algunos de los clásicos que vendes:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "clasicos = {\"Clarín\":\"La Regenta\", \n",
- " \"Pardo-Bazán\":\"Los Pazos de Ulloa\", \n",
- " \"Laforet\":\"Nadaaaaa\"}\n",
- "print (clasicos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estás realizando un inventario y necesitas imprimir los autores y los títulos: "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# como dict_items\n",
- "print (clasicos.items())\n",
- "# como una lista de tuplas\n",
- "print (list(clasicos.items()))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- También necesitas imprimir los autores y los títulos por separado:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# autores como dict_items\n",
- "print (clasicos.keys())\n",
- "# autores como una lista \n",
- "print (list(clasicos.keys()))\n",
- "\n",
- "# títulos como dict_values\n",
- "print (clasicos.values())\n",
- "# títulos como una lista\n",
- "print (list(clasicos.values()))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Notas que el título del último libro es incorrecto así que lo corriges:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print (\"Título incorrecto: \" + clasicos[\"Laforet\"])\n",
- "clasicos[\"Laforet\"] = \"Nada\"\n",
- "print (\"Título corregido: \" + clasicos[\"Laforet\"])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Luego agregas dos nuevos libros que acaban de llegar: *Fuenteovejuna* de Lope de Vega y *Fortunata y Jacinta* de Galdós:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# agregando el primer libro (sintaxis 1)\n",
- "clasicos[\"Lope de Vega\"] = \"Fuenteovejuna\"\n",
- "print (clasicos)\n",
- "\n",
- "# agregando el segundo libro (sintaxis 2)\n",
- "clasicos.update({\"Galdós\":\"Fortunata y Jacinta\"})\n",
- "print (clasicos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Finalmente, eliminas los libros de Clarín y Laforet porque acabas de venderlos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# eliminando el primer libro (sintaxis 1)\n",
- "del clasicos[\"Clarín\"]\n",
- "print (clasicos)\n",
- "\n",
- "# eliminando el segundo libro (sintaxis 2)\n",
- "clasicos.pop(\"Laforet\")\n",
- "print (clasicos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Lista de diccionarios (sección *a fondo*)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Dada la siguiente lista de diccionarios:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "paises = [{\"nombre\": \"China\", \"capital\": \"Beijing\"},\n",
- " {\"nombre\": \"Francia\", \"capital\": \"París\"},]\n",
- "print (paises)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Agrega un elemento a la lista:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "paises.append({\"nombre\": \"Brasil\", \"capital\": \"Brasilia\"})\n",
- "print (paises)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Segmenta el segundo elemento:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "print (paises [1])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los elementos de la lista usando un bucle `for` a través de los elementos y un bucle `for` a través de los índices:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "# bucle for a través de los elementos\n",
- "print (\"-> bucle for a través de los elementos\")\n",
- "for pais in paises:\n",
- " print (pais)\n",
- "\n",
- "# bucle for a través de los índices\n",
- "print (\"-> bucle for a través de los índices\")\n",
- "for i in range (len(paises)):\n",
- " print (paises[i])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprime los nombres de los países usando un bucle `for` a través de los elementos y un bucle `for` a través de los índices:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "# bucle for a través de los elementos\n",
- "print (\"-> bucle for a través de los elementos\") \n",
- "for pais in paises:\n",
- " print (pais[\"nombre\"])\n",
- " \n",
- "# bucle for a través de los índices\n",
- "print (\"-> bucle for a través de los índices\")\n",
- "for i in range (len(paises)):\n",
- " print (paises[i][\"nombre\"])"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.4"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 24. Inventario en la librería española \n",
+ "\n",
+ "## Diccionario\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Eres el dueño de una librería española y estos son algunos de los clásicos que vendes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "clasicos = {\"Clarín\":\"La Regenta\", \n",
+ " \"Pardo-Bazán\":\"Los Pazos de Ulloa\", \n",
+ " \"Laforet\":\"Nadaaaaa\"}\n",
+ "print (clasicos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estás realizando un inventario y necesitas imprimir los autores y los títulos: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# como dict_items\n",
+ "print (clasicos.items())\n",
+ "# como una lista de tuplas\n",
+ "print (list(clasicos.items()))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- También necesitas imprimir los autores y los títulos por separado:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# autores como dict_items\n",
+ "print (clasicos.keys())\n",
+ "# autores como una lista \n",
+ "print (list(clasicos.keys()))\n",
+ "\n",
+ "# títulos como dict_values\n",
+ "print (clasicos.values())\n",
+ "# títulos como una lista\n",
+ "print (list(clasicos.values()))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Notas que el título del último libro es incorrecto así que lo corriges:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (\"Título incorrecto: \" + clasicos[\"Laforet\"])\n",
+ "clasicos[\"Laforet\"] = \"Nada\"\n",
+ "print (\"Título corregido: \" + clasicos[\"Laforet\"])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Luego agregas dos nuevos libros que acaban de llegar: *Fuenteovejuna* de Lope de Vega y *Fortunata y Jacinta* de Galdós:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# agregando el primer libro (sintaxis 1)\n",
+ "clasicos[\"Lope de Vega\"] = \"Fuenteovejuna\"\n",
+ "print (clasicos)\n",
+ "\n",
+ "# agregando el segundo libro (sintaxis 2)\n",
+ "clasicos.update({\"Galdós\":\"Fortunata y Jacinta\"})\n",
+ "print (clasicos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Finalmente, eliminas los libros de Clarín y Laforet porque acabas de venderlos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# eliminando el primer libro (sintaxis 1)\n",
+ "del clasicos[\"Clarín\"]\n",
+ "print (clasicos)\n",
+ "\n",
+ "# eliminando el segundo libro (sintaxis 2)\n",
+ "clasicos.pop(\"Laforet\")\n",
+ "print (clasicos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Lista de diccionarios (sección *a fondo*)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista de diccionarios:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "paises = [{\"nombre\": \"China\", \"capital\": \"Beijing\"},\n",
+ " {\"nombre\": \"Francia\", \"capital\": \"París\"},]\n",
+ "print (paises)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Agrega un elemento a la lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "paises.append({\"nombre\": \"Brasil\", \"capital\": \"Brasilia\"})\n",
+ "print (paises)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Segmenta el segundo elemento:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "print (paises [1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los elementos de la lista usando un bucle `for` a través de los elementos y un bucle `for` a través de los índices:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# bucle for a través de los elementos\n",
+ "print (\"-> bucle for a través de los elementos\")\n",
+ "for pais in paises:\n",
+ " print (pais)\n",
+ "\n",
+ "# bucle for a través de los índices\n",
+ "print (\"-> bucle for a través de los índices\")\n",
+ "for i in range (len(paises)):\n",
+ " print (paises[i])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime los nombres de los países usando un bucle `for` a través de los elementos y un bucle `for` a través de los índices:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# bucle for a través de los elementos\n",
+ "print (\"-> bucle for a través de los elementos\") \n",
+ "for pais in paises:\n",
+ " print (pais[\"nombre\"])\n",
+ " \n",
+ "# bucle for a través de los índices\n",
+ "print (\"-> bucle for a través de los índices\")\n",
+ "for i in range (len(paises)):\n",
+ " print (paises[i][\"nombre\"])"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.4"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/25_dictionary_list.ipynb b/25_dictionary_list.ipynb
index 226e6c6..65ddc31 100644
--- a/25_dictionary_list.ipynb
+++ b/25_dictionary_list.ipynb
@@ -1,458 +1,458 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 25. Viaje a Suiza\n",
- "\n",
- "## Diccionario con listas como valores\n",
- "\n",
- "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
- "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
- "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Tu amigo está planeando un viaje a Suiza y te ha pedido algunos consejos. Comienzas con un diccionario vacío para llenar:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "consejos = {}"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- A él le gustaría visitar algunas ciudades y probar comida típica. Por lo tanto, añades algunas recomendaciones:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "consejos[\"ciudades\"] = [\"Berna\", \"Lucerna\"]\n",
- "consejos[\"comida\"] = [\"chocolate\", \"raclette\"]\n",
- "print (consejos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Debido a que su estancia es de cuatro días, añades dos ciudades más y dos platillos más:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "consejos[\"ciudades\"].append(\"Lugano\")\n",
- "print (consejos)\n",
- "# usando [] y .append() (sintaxis 1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "consejos[\"ciudades\"] += [\"Ginebra\"]\n",
- "print (consejos)\n",
- "# usando [] y concatenación de listas (sintaxis 2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "consejos.get(\"comida\").append(\"pastel de cebolla\")\n",
- "print (consejos)\n",
- "# usando get y .append() (sintaxis 3)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "consejos[\"comida\"] = consejos.get(\"comida\") + [\"fondue\"]\n",
- "print (consejos)\n",
- "# usando get y concatenación de listas (sintaxis 4)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Quieres verificar que el diccionario es correcto, así que imprimes todos los elementos uno por uno:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k,v in consejos.items():\n",
- " print (k,v)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Finalmente, mejoras la impresión para una mejor legibilidad:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k,v in consejos.items():\n",
- " print (\"{:>6}: {}\".format(k,v))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Juegos Olímpicos"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Eres un periodista deportivo y tienes que recoger listas de deportes de verano e invierno en los Juegos Olímpicos. Empiezas con un diccionario vacío:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "juegos_olimpicos = {}"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Luego añades dos deportes de verano y dos deportes de invierno:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "juegos_olimpicos[\"verano\"] = [\"buceo\", \"natación\"]\n",
- "juegos_olimpicos[\"invierno\"] = [\"esquí alpino\", \"patinaje artístico\"]\n",
- "print (juegos_olimpicos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Las listas parecen un poco cortas, así que quieres añadir dos deportes de verano más y dos deportes de invierno más:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# usando [] y .append() (sintaxis 1)\n",
- "juegos_olimpicos[\"verano\"].append(\"remo\")\n",
- "juegos_olimpicos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# usando [] y la concatenación de listas (sintaxis 2)\n",
- "juegos_olimpicos[\"verano\"] += [\"vela\"]\n",
- "print (juegos_olimpicos)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# usando get y .append() (sintaxis 3)\n",
- "juegos_olimpicos.get(\"invierno\").append(\"snowboard\")\n",
- "print (juegos_olimpicos)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# usando get y la concatenación de listas (sintaxis 4)\n",
- "juegos_olimpicos[\"invierno\"] = juegos_olimpicos.get(\"invierno\") + [\"bobsleigh\"]\n",
- "print (juegos_olimpicos)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprimes todos los elementos uno por uno de dos maneras diferentes:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k,v in juegos_olimpicos.items():\n",
- " print (\"-> \",k,v)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k,v in juegos_olimpicos.items(): \n",
- " print (\"{:>20}: {}\".format(k,v))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Y finalmente quieres imprimir solo las listas de deportes:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for v in juegos_olimpicos.values():\n",
- " print (v)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "---\n",
- "## Enseñando python"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Estás enseñando python a algunos estudiantes y quieres listar sus nombres de acuerdo al curso que están tomando. Empiezas creando un diccionario:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "estudiantes = {}"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Hasta ahora tienes dos estudiantes para el curso básico y tres estudiantes para el curso avanzado. Añades sus nombres al diccionario:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "estudiantes[\"básico\"] = [\"Pablo\", \"Laura\"]\n",
- "estudiantes[\"avanzado\"] = [\"Mohamed\", \"Gita\", \"María\"]\n",
- "print (estudiantes)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Acabas de recibir cuatro nuevas inscripciones, tres para el curso básico y una para el curso avanzado. Añades los nombres de los nuevos estudiantes al diccionario:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# usando [] y .append() (sintaxis 1)\n",
- "estudiantes[\"básico\"].append(\"Tomás\")\n",
- "estudiantes"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# usando [] y la concatenación de listas (sintaxis 2)\n",
- "estudiantes[\"básico\"] += [\"Juhui\"]\n",
- "print (estudiantes)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# utilizando get y .append() (sintaxis 3)\n",
- "estudiantes.get(\"avanzado\").append(\"Mateo\")\n",
- "print (estudiantes)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# utilizando get y concatenación de listas (sintaxis 4)\n",
- "estudiantes[\"básico\"] = estudiantes.get(\"básico\") + [\"Marco\"]\n",
- "print (estudiantes)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Después de revisar el historial de uno de tus estudiantes del curso básico, te das cuenta de que él/ella no necesita el curso básico. Por lo tanto, lo mueves del curso básico al curso avanzado:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "estudiantes[\"básico\"].remove(\"Laura\")\n",
- "estudiantes[\"avanzado\"].append(\"Laura\")\n",
- "print (estudiantes)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Imprimes todos los elementos uno por uno de dos maneras diferentes:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k,v in estudiantes.items():\n",
- " print (\"->\",k,v)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k,v in estudiantes.items():\n",
- " print (\"{:>8}: {}\".format(k,v))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "- Y finalmente imprimes solo los nombres de los cursos:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for k in estudiantes.keys():\n",
- " print (k)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 25. Viaje a Suiza\n",
+ "\n",
+ "## Diccionario con listas como valores\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) (Aprende Python con Jupyter): [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Tradución al español mexicano (es-MX): [Rodrigo Ernesto Álvarez Aguilera](https://incognia.github.io/) \n",
+ "Licencia de contenido: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Tu amigo está planeando un viaje a Suiza y te ha pedido algunos consejos. Comienzas con un diccionario vacío para llenar:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "consejos = {}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- A él le gustaría visitar algunas ciudades y probar comida típica. Por lo tanto, añades algunas recomendaciones:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "consejos[\"ciudades\"] = [\"Berna\", \"Lucerna\"]\n",
+ "consejos[\"comida\"] = [\"chocolate\", \"raclette\"]\n",
+ "print (consejos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Debido a que su estancia es de cuatro días, añades dos ciudades más y dos platillos más:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "consejos[\"ciudades\"].append(\"Lugano\")\n",
+ "print (consejos)\n",
+ "# usando [] y .append() (sintaxis 1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "consejos[\"ciudades\"] += [\"Ginebra\"]\n",
+ "print (consejos)\n",
+ "# usando [] y concatenación de listas (sintaxis 2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "consejos.get(\"comida\").append(\"pastel de cebolla\")\n",
+ "print (consejos)\n",
+ "# usando get y .append() (sintaxis 3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "consejos[\"comida\"] = consejos.get(\"comida\") + [\"fondue\"]\n",
+ "print (consejos)\n",
+ "# usando get y concatenación de listas (sintaxis 4)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Quieres verificar que el diccionario es correcto, así que imprimes todos los elementos uno por uno:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k,v in consejos.items():\n",
+ " print (k,v)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Finalmente, mejoras la impresión para una mejor legibilidad:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k,v in consejos.items():\n",
+ " print (\"{:>6}: {}\".format(k,v))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Juegos Olímpicos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Eres un periodista deportivo y tienes que recoger listas de deportes de verano e invierno en los Juegos Olímpicos. Empiezas con un diccionario vacío:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "juegos_olimpicos = {}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Luego añades dos deportes de verano y dos deportes de invierno:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "juegos_olimpicos[\"verano\"] = [\"buceo\", \"natación\"]\n",
+ "juegos_olimpicos[\"invierno\"] = [\"esquí alpino\", \"patinaje artístico\"]\n",
+ "print (juegos_olimpicos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Las listas parecen un poco cortas, así que quieres añadir dos deportes de verano más y dos deportes de invierno más:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# usando [] y .append() (sintaxis 1)\n",
+ "juegos_olimpicos[\"verano\"].append(\"remo\")\n",
+ "juegos_olimpicos"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# usando [] y la concatenación de listas (sintaxis 2)\n",
+ "juegos_olimpicos[\"verano\"] += [\"vela\"]\n",
+ "print (juegos_olimpicos)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# usando get y .append() (sintaxis 3)\n",
+ "juegos_olimpicos.get(\"invierno\").append(\"snowboard\")\n",
+ "print (juegos_olimpicos)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# usando get y la concatenación de listas (sintaxis 4)\n",
+ "juegos_olimpicos[\"invierno\"] = juegos_olimpicos.get(\"invierno\") + [\"bobsleigh\"]\n",
+ "print (juegos_olimpicos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprimes todos los elementos uno por uno de dos maneras diferentes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k,v in juegos_olimpicos.items():\n",
+ " print (\"-> \",k,v)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k,v in juegos_olimpicos.items(): \n",
+ " print (\"{:>20}: {}\".format(k,v))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Y finalmente quieres imprimir solo las listas de deportes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for v in juegos_olimpicos.values():\n",
+ " print (v)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Enseñando python"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Estás enseñando python a algunos estudiantes y quieres listar sus nombres de acuerdo al curso que están tomando. Empiezas creando un diccionario:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "estudiantes = {}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Hasta ahora tienes dos estudiantes para el curso básico y tres estudiantes para el curso avanzado. Añades sus nombres al diccionario:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "estudiantes[\"básico\"] = [\"Pablo\", \"Laura\"]\n",
+ "estudiantes[\"avanzado\"] = [\"Mohamed\", \"Gita\", \"María\"]\n",
+ "print (estudiantes)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Acabas de recibir cuatro nuevas inscripciones, tres para el curso básico y una para el curso avanzado. Añades los nombres de los nuevos estudiantes al diccionario:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# usando [] y .append() (sintaxis 1)\n",
+ "estudiantes[\"básico\"].append(\"Tomás\")\n",
+ "estudiantes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# usando [] y la concatenación de listas (sintaxis 2)\n",
+ "estudiantes[\"básico\"] += [\"Juhui\"]\n",
+ "print (estudiantes)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# utilizando get y .append() (sintaxis 3)\n",
+ "estudiantes.get(\"avanzado\").append(\"Mateo\")\n",
+ "print (estudiantes)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# utilizando get y concatenación de listas (sintaxis 4)\n",
+ "estudiantes[\"básico\"] = estudiantes.get(\"básico\") + [\"Marco\"]\n",
+ "print (estudiantes)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Después de revisar el historial de uno de tus estudiantes del curso básico, te das cuenta de que él/ella no necesita el curso básico. Por lo tanto, lo mueves del curso básico al curso avanzado:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "estudiantes[\"básico\"].remove(\"Laura\")\n",
+ "estudiantes[\"avanzado\"].append(\"Laura\")\n",
+ "print (estudiantes)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprimes todos los elementos uno por uno de dos maneras diferentes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k,v in estudiantes.items():\n",
+ " print (\"->\",k,v)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k,v in estudiantes.items():\n",
+ " print (\"{:>8}: {}\".format(k,v))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Y finalmente imprimes solo los nombres de los cursos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for k in estudiantes.keys():\n",
+ " print (k)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
},
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.12"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/26_dictionary_use.ipynb b/26_dictionary_use.ipynb
new file mode 100644
index 0000000..4cfac50
--- /dev/null
+++ b/26_dictionary_use.ipynb
@@ -0,0 +1,277 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 26. Contando, comprimiendo y ordenando\n",
+ "\n",
+ "\n",
+ "## ¿Para qué sirven los diccionarios?\n",
+ "\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia narrativa: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/) \n",
+ "Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 1. Contando elementos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "saludos = \"¡hola! ¿cómo estás?\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Crea un diccionario donde las claves sean las letras del alfabeto encontradas en la cadena, y los valores correspondientes sean el número de veces que cada letra está presente. Escribe el código de dos maneras: (1) usando `if`/`else`, y (2) usando `.get()` \n",
+ "\n",
+ "1. Usando `if`/`else`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "contador_letras = {}\n",
+ "\n",
+ "for letra in saludos:\n",
+ " if letra not in contador_letras.keys():\n",
+ " contador_letras[letra] = 1\n",
+ " else:\n",
+ " contador_letras[letra] += 1 \n",
+ "\n",
+ "for k, v in contador_letras.items():\n",
+ " print (k, v)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "2. Usando `.get()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "contador_letras = {}\n",
+ "\n",
+ "for letra in saludos:\n",
+ " contador_letras[letra] = contador_letras.get(letra, 0) + 1\n",
+ "\n",
+ "for k, v in contador_letras.items():\n",
+ " print (k, v) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. Comprimiendo información"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "vector_dispar = [0,0,0,1,0,7,0,0,4,0,0,0,8,0,0,0,6,0,0,0,0,0,0,0,9,0,0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Conviértela en un diccionario:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# crea el diccionario\n",
+ "diccionario_dispar = {}\n",
+ "for i in range(len(vector_dispar)):\n",
+ " if vector_dispar[i] != 0:\n",
+ " diccionario_dispar[i] = vector_dispar[i]\n",
+ "\n",
+ "# guarda la longitud de la lista \n",
+ "diccionario_dispar[\"longitud\"] = len(vector_dispar) \n",
+ " \n",
+ "# imprime\n",
+ "for k,v in diccionario_dispar.items():\n",
+ " print (k,v) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- ¿Cómo volvemos al vector disperso? "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# crea una lista de ceros\n",
+ "vector_dispar_de_vuelta = [0] * diccionario_dispar[\"longitud\"]\n",
+ "\n",
+ "# añade valores no nulos\n",
+ "for k,v in diccionario_dispar.items():\n",
+ " if k != \"longitud\":\n",
+ " vector_dispar_de_vuelta[k] = v \n",
+ "\n",
+ "# imprime\n",
+ "print (vector_dispar_de_vuelta)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Ordenando diccionario"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dado el siguiente diccionario:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "registro = {\"Shaili\":4, \"Chris\":90, \"Maria\":70}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ordena los elementos del diccionario según sus *claves*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# crea un nuevo diccionario\n",
+ "registro_ordenado= {}\n",
+ "\n",
+ "# ordena las claves\n",
+ "claves_ordenadas = list(registro.keys())\n",
+ "claves_ordenadas.sort()\n",
+ "\n",
+ "# llena el nuevo diccionario\n",
+ "for k in claves_ordenadas:\n",
+ " registro_ordenado[k] = registro[k]\n",
+ " \n",
+ "print (registro_ordenado)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Ordena los elementos del diccionario según sus *valores*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# crea un nuevo diccionario\n",
+ "registro_ordenado = {}\n",
+ "\n",
+ "# ordena las claves según los valores \n",
+ "claves_ordenadas = sorted(registro, key=registro.get) \n",
+ "\n",
+ "# llena el nuevo diccionario\n",
+ "for k in claves_ordenadas:\n",
+ " registro_ordenado[k] = registro[k]\n",
+ " \n",
+ "print (registro_ordenado)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.7"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/27_strings_overview.ipynb b/27_strings_overview.ipynb
new file mode 100644
index 0000000..fd82eca
--- /dev/null
+++ b/27_strings_overview.ipynb
@@ -0,0 +1,613 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 27. Descripción general de las cadenas (strings)\n",
+ "\n",
+ "## Operaciones, métodos e impresión\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) by [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Narrative license: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Code license: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 1. Rebanado de cadenas (String slicing)\n",
+ "\n",
+ "El rebanado de cadenas es lo mismo que el rebanado de listas.\n",
+ "\n",
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "dos_caminos = \"rsecwyadrkd\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Extrae cada segundo carácter:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (dos_caminos[::2])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Extrae cada segundo carácter e invierte el resultado:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print (dos_caminos[::-2])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 2. Operaciones \"aritméticas\" entre cadenas\n",
+ "\n",
+ "En Python, solo dos operaciones \"aritméticas\" son posibles en cadenas (igual que para las listas):\n",
+ "- Concatenaciones (`+`)\n",
+ "- Auto-replicación (`*`)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Concatena dos cadenas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "primero = \"sol\"\n",
+ "segundo = \"pantalla\"\n",
+ "combinacion = primero + segundo\n",
+ "print (combinacion)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Replica una cadena 5 veces:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "una_sonrisa = \":-)\"\n",
+ "cinco_sonrisas = una_sonrisa * 5\n",
+ "print (cinco_sonrisas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 3. Reemplazar o eliminar partes de cadenas\n",
+ "\n",
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "favoritos = \"Me gusta cocinar, mi familia y mis amigos\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- **Reemplaza** el carácter en la posición 0 con `U` usando rebanado y asignación. ¿Qué pasa?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "favoritos[0] = \"U\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Rehace la misma tarea usando rebanado y concatenación:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "desde_posicion_uno = favoritos[1:]\n",
+ "favoritos = \"U\" + desde_posicion_uno\n",
+ "print (favoritos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Rehace la misma tarea usando el método de cadena `.split()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "favoritos = \"Me gusta cocinar, mi familia y mis amigos\"\n",
+ "\n",
+ "partes = favoritos.split(\"Me\")\n",
+ "print (partes)\n",
+ "\n",
+ "favoritos = \"U\" + partes[1]\n",
+ "print (favoritos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- **Reemplaza** las comas con punto y comas usando el método `.replace()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "favoritos = \"Me gusta cocinar, mi familia y mis amigos\"\n",
+ "favoritos = favoritos.replace(\",\", \";\") #reasignación\n",
+ "print (favoritos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- **Elimina** las comas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "favoritos = \"Me gusta cocinar, mi familia y mis amigos\"\n",
+ "favoritos = favoritos.replace(\",\", \"\") # dos cosas a la vez: reemplazar y eliminar (o usar reemplazar para eliminar)\n",
+ "print (favoritos)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 4. Buscar una subcadena en una cadena\n",
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "nosotros = \"nosotros somos\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Encuentra las posiciones del carácter `e` usando el método `.find()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "posiciones = nosotros.find(\"e\")\n",
+ "print (posiciones)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Encuentra todas las posiciones del carácter *e* usando una forma alternativa:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# inicializando posiciones\n",
+ "posiciones = []\n",
+ "\n",
+ "# encuentra todas las posiciones de e\n",
+ "for i in range(len(nosotros)):\n",
+ " if nosotros[i] == \"e\":\n",
+ " posiciones.append(i)\n",
+ "print (posiciones)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Encuentra la posición del carácter `f` usando el método `.find()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "posiciones = nosotros.find(\"f\")\n",
+ "print (posiciones)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 5. Contar el número de subcadenas en una cadena"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pasatiempos = \"Me gusta ir al cine, viajar y cantar\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Cuenta el número de subcadenas `ando` usando el método `.count()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "n_subcadenas = pasatiempos.count(\"ar\")\n",
+ "print (n_subcadenas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 6. Cadena a lista y viceversa\n",
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cadena = \"Cómo estás\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Transforma la cadena en una lista de cadenas donde cada elemento es una palabra:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lista_de_cadenas = cadena.split()\n",
+ "print (lista_de_cadenas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Transforma la lista de cadenas de nuevo a una cadena usando el método `.join()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cadena_desde_lista = \" \".join(lista_de_cadenas)\n",
+ "print (cadena_desde_lista)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 7. Cambiar mayúsculas y minúsculas\n",
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "saludo = \"¡Hola! ¿Cómo estás?\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Modifica la cadena a mayúsculas y minúsculas; cambia a mayúscula solo el primer carácter de la cadena, y luego cada palabra de la cadena; finalmente, invierte los casos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# mayúsculas\n",
+ "print (saludo.upper())\n",
+ "# minúsculas\n",
+ "print (saludo.lower())\n",
+ "# cambia el primer carácter a mayúscula\n",
+ "print (saludo.capitalize())\n",
+ "# cambia el primer carácter de cada palabra a mayúscula\n",
+ "print (saludo.title())\n",
+ "# invierte casos\n",
+ "print (saludo.swapcase())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 8. Imprimir variables"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente cadena:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "parte_del_dia = \"mañana\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime `¡Buenos días!` de 4 maneras, usando (1) concatenación de cadenas, (2) separación por comas, (3) el método `.format()` y (4) *f-strings*, y observa las diferencias:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# (1) concatenación de cadenas\n",
+ "print (\"¡Buenos \" + parte_del_dia + \"!\")\n",
+ "# (2) separación de variables por coma\n",
+ "print (\"Buenos\", parte_del_dia, \"!\")\n",
+ "# (3) el método .format()\n",
+ "print (\"¡Buenos {}!\".format(parte_del_dia))\n",
+ "# (4) f-strings\n",
+ "print (f\"\"\"¡Buenos {parte_del_dia}!\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dadas una cadena y una variable numérica:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "parte_del_dia = \"mañana\"\n",
+ "hora_del_dia = 10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime\n",
+ " `¡Buenos días!`\n",
+ " `Son las 10 a.m.`\n",
+ "usando las mismas cuatro formas que antes (ten en cuenta que las frases están en dos líneas separadas):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# (1) concatenación de cadenas\n",
+ "print (\"¡Buenos \" + parte_del_dia + \"!\\nSon las \" + str(hora_del_dia) + \"a.m.\")\n",
+ "# (2) separación de variables por coma\n",
+ "print (\"Buenos\", parte_del_dia, \"!\\nSon las\", hora_del_dia, \"a.m\")\n",
+ "# (3) el método .format()\n",
+ "print (\"¡Buenos {}!\\nSon las {}a.m.\".format(parte_del_dia, hora_del_dia))\n",
+ "# (4) f-strings\n",
+ "print (f\"\"\"¡Buenos {parte_del_dia}! \\n\n",
+ "Son las {hora_del_dia}a.m.\"\"\")\n",
+ "# notas:\n",
+ "# - apóstrofe con comilla simple requiere \\' (ver primera línea Son las)\n",
+ "# - uso de \\n\n",
+ "# - con f-strings uno puede ir a una nueva línea si usa triples comillas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la variable numérica:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "numero = 1.2345"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime `El número es 1.23` (solo los dos primeros decimales) usando los cuatro métodos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# (1) concatenación de cadenas\n",
+ "print(\"El número es \" + str(round(numero, 2)))\n",
+ "# (2) separación de variables por coma\n",
+ "print(\"El número es\", round(numero, 2))\n",
+ "# (3) el método .format()\n",
+ "print(\"El número es {:.2f}\".format(numero))\n",
+ "# (4) f-strings\n",
+ "print(f\"\"\"El número es {numero:.2f}\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/28_function_inputs.ipynb b/28_function_inputs.ipynb
new file mode 100644
index 0000000..4b3372d
--- /dev/null
+++ b/28_function_inputs.ipynb
@@ -0,0 +1,285 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 28. Imprimiendo tarjetas de *Agradecimiento*\n",
+ "\n",
+ "## Entradas de la función\n",
+ "\n",
+ "[Learn Python with Jupyter](https://learnpythonwithjupyter.com/) by [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Narrative license: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Code license: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Tarjetas básicas de *Agradecimiento*\n",
+ "- Recientemente organizaste una fiesta y quieres enviar tarjetas de *Agradecimiento* a los que asistieron. Crea\n",
+ "una función que tome un nombre como argumento e imprima un mensaje de *Agradecimiento* que contenga el\n",
+ "nombre del asistente (p. ej., *Gracias Maria*): "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def imprimir_agradecimiento(nombre):\n",
+ " \"\"\"Imprime una cadena que contiene \"Gracias\" y un nombre\n",
+ " \n",
+ " Parámetros\n",
+ " ----------\n",
+ " nombre: string\n",
+ " Nombre de una persona\n",
+ " \"\"\"\n",
+ " \n",
+ " print (\"Gracias\", nombre)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime dos tarjetas de *Agradecimiento*: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(\"Maria\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(\"Xiao\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. Tarjetas formales de *Agradecimiento*\n",
+ "- Después de pensarlo mejor, decides que es más apropiado imprimir tarjetas formales de Agradecimiento. Modifica\n",
+ "la función anterior para que tome tres argumentos: prefijo, nombre y apellido, e imprima\n",
+ "un mensaje de agradecimiento que los contenga (p. ej., *Gracias Sra. Maria Lopez*): "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def imprimir_agradecimiento(prefijo, nombre, apellido):\n",
+ " \"\"\"Imprime una cadena que contiene \"Gracias\" y las entradas\n",
+ " \n",
+ " Parámetros\n",
+ " ----------\n",
+ " prefijo: string\n",
+ " Normalmente Sr, Sra, Srta\n",
+ " nombre: string\n",
+ " Nombre de una persona\n",
+ " apellido: string\n",
+ " Apellido de una persona\n",
+ " \"\"\"\n",
+ "\n",
+ " print (\"Gracias\", prefijo, nombre, apellido)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime dos tarjetas formales de *Agradecimiento*: "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(\"Sra\", \"Maria\", \"Lopez\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(\"Sr\", \"Xiao\", \"Li\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. ¡Apellido faltante! \n",
+ "- Estás muy contento con las tarjetas de *Agradecimiento*, ¡pero de repente te das cuenta de que algunos participantes no\n",
+ "proporcionaron sus apellidos! Adapta la función para que el apellido tenga una cadena vacía como\n",
+ "valor predeterminado:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def imprimir_agradecimiento(prefijo, nombre, apellido=\"\"):\n",
+ " \"\"\"Imprime una cadena que contiene \"Gracias\" y las entradas\n",
+ " \n",
+ " Parámetros\n",
+ " ----------\n",
+ " prefijo: string\n",
+ " Normalmente Sr, Sra, Srta\n",
+ " nombre: string\n",
+ " Nombre de una persona\n",
+ " apellido: string\n",
+ " Apellido de una persona. El valor predeterminado es una cadena vacía\n",
+ " \"\"\"\n",
+ " \n",
+ " print (\"Gracias\", prefijo, nombre, apellido)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime dos tarjetas de *Agradecimiento*, una con apellido y otra sin apellido:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(\"Sra\", \"Maria\", \"Lopez\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(\"Sr\", \"Xiao\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 4. ¡Prefijo y/o nombre faltantes! \n",
+ "- Finalmente, te das cuenta de que el prefijo y/o el nombre también faltan para algunos invitados. Modifica la función en consecuencia:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def imprimir_agradecimiento(prefijo=\"\", nombre=\"\", apellido=\"\"):\n",
+ " \"\"\"Imprime cada entrada y una cadena que contiene \"Gracias\" y las entradas\n",
+ " \n",
+ " Parámetros\n",
+ " ----------\n",
+ " prefijo: string\n",
+ " Normalmente Sr, Sra, Srta. El valor predeterminado es una cadena vacía\n",
+ " nombre: string\n",
+ " Nombre de una persona. El valor predeterminado es una cadena vacía\n",
+ " apellido: string\n",
+ " Apellido de una persona. El valor predeterminado es una cadena vacía\n",
+ " \"\"\"\n",
+ " \n",
+ " print (\"Prefijo:\", prefijo)\n",
+ " print (\"Nombre:\", nombre)\n",
+ " print (\"Apellido:\", apellido)\n",
+ " print (\"Gracias\", prefijo, nombre, apellido)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime una tarjeta de *Agradecimiento* donde falta el *nombre*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(prefijo=\"Sra\", apellido=\"Lopez\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Imprime una tarjeta de *Agradecimiento* donde falta el *prefijo*:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "imprimir_agradecimiento(nombre=\"Xiao\", apellido=\"Li\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/29_function_outputs.ipynb b/29_function_outputs.ipynb
new file mode 100644
index 0000000..6e8a92d
--- /dev/null
+++ b/29_function_outputs.ipynb
@@ -0,0 +1,297 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 29. Base de datos de inicio de sesión para una tienda online\n",
+ "\n",
+ "## Salidas de funciones y diseño modular\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia de narrativa: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Eres el propietario de una tienda online y necesitas almacenar de forma segura los nombres de usuario y contraseñas de tus clientes. Crea una base de datos donde los nombres de usuario estén compuestos por la inicial del nombre del cliente seguida de su apellido (por ejemplo, \"jsmith\"), y las contraseñas consistan en un código de cuatro dígitos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 1. Creando un nombre de usuario"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Escribe una función que cree un nombre de usuario compuesto por la inicial del nombre y el apellido completo:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def crear_usuario (nombre, appelido):\n",
+ " \"\"\"Crea un nombre de usuario en minúsculas formado por la inicial del nombre y el apellido completo\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " nombre: string\n",
+ " Nombre de una persona\n",
+ " apellido: string\n",
+ " Apellido de una persona\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " username: string\n",
+ " Nombre de usuario creado\n",
+ " \"\"\"\n",
+ "\n",
+ " # concatenar la inicial del nombre y el apellido\n",
+ " usuario = nombre[0] + appelido\n",
+ " # asegurar que el nombre de usuario esté en minúsculas\n",
+ " usuario = usuario.lower()\n",
+ "\n",
+ " # retornar nombre de usuario\n",
+ " return usuario"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Prueba la función para dos clientes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "usuario_1 = crear_usuario (\"Julia\", \"Smith\")\n",
+ "print (usuario_1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "usuario_2 = crear_usuario (\"Mohammed\", \"Seid\")\n",
+ "print (usuario_2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. Creando una contraseña\n",
+ "- Escribe una función que cree una contraseña compuesta por cuatro enteros aleatorios:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import random\n",
+ "\n",
+ "def crear_contrasena():\n",
+ " \"\"\"Crea una contraseña compuesta por cuatro enteros aleatorios\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " password: string\n",
+ " Contraseña creada\n",
+ " \"\"\"\n",
+ "\n",
+ " # crear un número aleatorio con cuatro dígitos\n",
+ " contrasena = str(random.randint(1000,9999))\n",
+ "\n",
+ " # retornar contraseña\n",
+ " return contrasena"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Prueba la función para dos clientes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "contrasena_1 = crear_contrasena()\n",
+ "print (contrasena_1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "contrasena_2 = crear_contrasena()\n",
+ "print (contrasena_2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Creando una base de datos\n",
+ "\n",
+ "- Escribe una función que, dada una lista de listas de clientes, cree y devuelva una base de datos (es decir, un diccionario) de nombres de usuario y contraseñas. La función también devuelve el número de clientes en la\n",
+ "base de datos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def crear_base_datos (clientes):\n",
+ " \"\"\"Crea una base de datos como un diccionario con nombres de usuario como claves y contraseñas como valores\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " customers : lista de listas\n",
+ " Cada sublista contiene nombre y apellido de un cliente\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " db : diccionario\n",
+ " Base de datos creada (abreviado como db)\n",
+ " n_customers : entero\n",
+ " Número de clientes en la base de datos\n",
+ " \"\"\"\n",
+ "\n",
+ " # inicializar diccionario (es decir, base de datos)\n",
+ " db = {}\n",
+ "\n",
+ " # para cada cliente\n",
+ " for cliente in clientes:\n",
+ "\n",
+ " # crear nombre de usuario\n",
+ " usuario = crear_usuario (cliente[0], cliente[1])\n",
+ "\n",
+ " # crear contraseña\n",
+ " contrasena = crear_contrasena()\n",
+ "\n",
+ " # agregar nombre de usuario y contraseña a db\n",
+ " db[usuario] = contrasena\n",
+ "\n",
+ " # calcular número de clientes\n",
+ " n_clientes = len(db)\n",
+ "\n",
+ " # retornar diccionario y su longitud\n",
+ " return db, n_clientes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista de clientes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "clientes = [[\"Maria\", \"Lopez\"], [\"Julia\", \"Smith\"], [\"Mohammed\", \"Seid\"]]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Crea la base de datos utilizando dos sintaxis diferentes:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# crear la base de datos - retornos separados\n",
+ "database, n_clientes = crear_base_datos(clientes)\n",
+ "\n",
+ "# imprimir las salidas\n",
+ "print (\"Base de datos:\", database)\n",
+ "print (\"Número de clientes:\", n_clientes)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# crear la base de datos - retorno único\n",
+ "outputs = crear_base_datos(clientes)\n",
+ "print (\"Tupla de salida:\", outputs)\n",
+ "\n",
+ "# obtener e imprimir la base de datos\n",
+ "database = outputs[0]\n",
+ "print(\"Base de datos:\", database)\n",
+ "\n",
+ "# obtener e imprimir el número de clientes\n",
+ "n_clientes = outputs[1]\n",
+ "print (\"Número de clientes:\", n_clientes)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/30_function_io_extra.ipynb b/30_function_io_extra.ipynb
new file mode 100644
index 0000000..dcedc79
--- /dev/null
+++ b/30_function_io_extra.ipynb
@@ -0,0 +1,228 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 30. Entrada gratuita al museo\n",
+ "\n",
+ "## Validación de entrada y variaciones de salida\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia de narrativa: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Trabajas en un museo y tienes que actualizar el sistema en línea para comprar entradas. La actualización es que las personas de 65 años o más ahora califican para una entrada gratuita. Escribe una función que pida a los visitantes que ingresen su prefijo, apellido y edad; verifique los *tipos* y *valores* de estas entradas; y devuelva un mensaje que le diga al visitante si es elegible para una entrada gratuita."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def entrada_gratuita_mueso(prefijo, appelido, edad):\n",
+ " \"\"\"Retorna un mensaje que contiene las entradas y la elegibilidad para una entrada gratuita al museo basada en la edad\n",
+ " Por ejemplo: Sra. Holmes, usted es elegible para una entrada gratuita al museo porque tiene 66 años\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " prefijo : string\n",
+ " Srta, Sra, Sr\n",
+ " appelido : string\n",
+ " Apellido de un visitante\n",
+ " edad : entero\n",
+ " Edad de un visitante\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " string\n",
+ " Mensaje que contiene información del visitante y su elegibilidad\n",
+ " \"\"\"\n",
+ "\n",
+ " # --- verificando tipos de parámetros ---\n",
+ "\n",
+ " # el tipo de prefijo debe ser string\n",
+ " if not isinstance (prefijo, str):\n",
+ " raise TypeError (\"prefijo debe ser una cadena de texto\")\n",
+ "\n",
+ " # el tipo de last_name debe ser string\n",
+ " if not isinstance (appelido, str):\n",
+ " raise TypeError (\"last_name debe ser una cadena de texto\")\n",
+ "\n",
+ " # el tipo de edad debe ser entero\n",
+ " if not isinstance (edad, int):\n",
+ " raise TypeError (\"edad debe ser un entero\")\n",
+ "\n",
+ "\n",
+ " # --- verificando valores de parámetros ---\n",
+ "\n",
+ " # prefijo debe ser Srta, Sra, o Sr\n",
+ " if prefijo not in [\"Srta\", \"Sra\", \"Sr\"]:\n",
+ " raise ValueError (\"prefijo debe ser Srta, Sra, o Sr\")\n",
+ "\n",
+ " # last_name debe contener solo caracteres\n",
+ " if not appelido.isalpha():\n",
+ " raise ValueError (\"last_name debe contener solo letras\")\n",
+ "\n",
+ " # edad tiene que estar entre 0 y 125\n",
+ " if edad < 0 or edad > 125:\n",
+ " raise ValueError (\"edad debe estar entre 0 y 125\")\n",
+ "\n",
+ "\n",
+ " # --- retornando salida ---\n",
+ "\n",
+ " if edad >= 65:\n",
+ " return prefijo + \". \" + appelido + \", usted es elegible para una entrada gratuita al museo porque tiene \" + str(edad) + \" años\"\n",
+ " else:\n",
+ " return prefijo + \". \" + appelido + \", usted no es elegible para una entrada gratuita al museo porque tiene \" + str(edad) + \" años\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "- Llama a la función comprobando los *tipos* de parámetros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# verificando tipo de prefijo\n",
+ "mensaje = entrada_gratuita_mueso(1, \"Holmes\", 66)\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# verificando tipo de last_name\n",
+ "mensaje = entrada_gratuita_mueso(\"Sra\", 1.2, 66)\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# verificando tipo de edad\n",
+ "mensaje = entrada_gratuita_mueso(\"Sra\", \"Holmes\", \"Hola\")\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "- Llama a la función comprobando *valores* de parámetros:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# verificando valor de prefijo\n",
+ "mensaje = entrada_gratuita_mueso(\"Dr\", \"Holmes\", 66)\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# verificando valor de last_name\n",
+ "mensaje = entrada_gratuita_mueso(\"Sra\", \"82\", 66)\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# verificando valor de edad\n",
+ "mensaje = entrada_gratuita_mueso(\"Sra\", \"Holmes\", 130)\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "- Llama a la función probando los dos posibles retornos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# persona es elegible\n",
+ "mensaje = entrada_gratuita_mueso(\"Sra\", \"Holmes\", 66)\n",
+ "print (mensaje)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# persona no es elegible\n",
+ "mensaje = entrada_gratuita_mueso(\"Sra\", \"Choi\", 38)\n",
+ "print (mensaje)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.2"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/31_recursion.ipynb b/31_recursion.ipynb
new file mode 100644
index 0000000..a30c008
--- /dev/null
+++ b/31_recursion.ipynb
@@ -0,0 +1,130 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 31. Factoriales\n",
+ "\n",
+ "## Funciones recursivas\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia de narrativa: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia de código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Escribe una función que calcule el factorial de un número entero dado utilizando un bucle for:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def factorial_for (n):\n",
+ " \"\"\"Calcula el factorial de un número entero dado utilizando un bucle for\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " n : entero\n",
+ " El número entero de entrada\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " factorial : entero\n",
+ " El factorial del número entero de entrada\n",
+ " \"\"\"\n",
+ "\n",
+ " # inicializar el resultado en uno\n",
+ " factorial = 1\n",
+ "\n",
+ " # para cada entero entre 2 y el número entero de entrada\n",
+ " for i in range (2, n+1):\n",
+ " # multiplicar el resultado actual por el entero actual\n",
+ " factorial *= i\n",
+ "\n",
+ " # retornar el resultado\n",
+ " return factorial\n",
+ "\n",
+ "# llamar a la función\n",
+ "fact = factorial_for (4)\n",
+ "print (fact)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Compara la función iterativa anterior con la siguiente función recursiva:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def factorial_rec (n):\n",
+ " \"\"\"Calcula el factorial de un número entero dado utilizando recursión\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " n : entero\n",
+ " El número entero de entrada\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " entero\n",
+ " El factorial del número entero de entrada\n",
+ " \"\"\"\n",
+ "\n",
+ " # si n es mayor que 1\n",
+ " if n > 1:\n",
+ " # ejecutar la recursión\n",
+ " return factorial_rec(n-1) * n\n",
+ " # de lo contrario\n",
+ " else:\n",
+ " # retornar 1\n",
+ " return 1\n",
+ "\n",
+ "# llamar a la función\n",
+ "fact = factorial_rec (4)\n",
+ "print (fact)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.6"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/32_modules.ipynb b/32_modules.ipynb
new file mode 100644
index 0000000..0b6e60a
--- /dev/null
+++ b/32_modules.ipynb
@@ -0,0 +1,401 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 32. ¿Cómo puedo reutilizar funciones?\n",
+ "\n",
+ "## Trabajando con Jupyter Notebooks y módulos de Python\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia del texto: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia del código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Creando un módulo\n",
+ "\n",
+ "- ¡Aprende los pasos en el Capítulo 32!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 2. Importar un módulo y ejecutar una función\n",
+ " \n",
+ "- Import the module as is, then call the function:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "import setup_database\n",
+ "\n",
+ "usuario = setup_database.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Importa un módulo y crea un alias, luego llama a la función:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "import setup_database as bdd\n",
+ "\n",
+ "usuario = bdd.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Importa una sola función de un módulo, luego llama a la función:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "from setup_database import crear_usuario\n",
+ "\n",
+ "usuario = crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Importa la función de un módulo y crea un alias, luego llama a la función:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "from setup_database import crear_usuario as cu\n",
+ "\n",
+ "usuario = cu (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Importar un módulo desde otra carpeta\n",
+ "- Reinicia el kernel, luego agrega la carpeta del módulo e importa el módulo:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sys\n",
+ "sys.path.append(\"\") # escribe la ubicación del módulo entre comillas\n",
+ "import setup_database"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Llama a la función:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "usuario = setup_database.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 4. Cambiar una función en un módulo y llamarla en un Notebook"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Reinicia el kernel, luego llama a la función *antes* del cambio:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "import setup_database\n",
+ "\n",
+ "usuario = setup_database.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Llama a la función *después* del cambio:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "usuario = setup_database.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Reinicia el kernel, luego ejecuta autoreload:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%load_ext autoreload\n",
+ "%autoreload 2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Llama a la función *antes* del cambio:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "import setup_database\n",
+ "\n",
+ "usuario = setup_database.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Llama a la función *después* del cambio:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "jgelb\n"
+ ]
+ }
+ ],
+ "source": [
+ "usuario = setup_database.crear_usuario (\"John\", \"Gelb\")\n",
+ "print (usuario)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 5. Agregar funciones a un módulo"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Llama a `create_password()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1899\n"
+ ]
+ }
+ ],
+ "source": [
+ "contrasena = setup_database.crear_contrasena()\n",
+ "print (contrasena)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Llama a `create_database()`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Base de datos: {'mlopez': '4575', 'jsmith': '1785', 'mseid': '8816'}\n",
+ "Número de clientes: 3\n"
+ ]
+ }
+ ],
+ "source": [
+ "clientes = [[\"Maria\", \"Lopez\"], [\"Julia\", \"Smith\"], [\"Mohammed\", \"Seid\"]]\n",
+ "bdd, n = setup_database.crear_base_de_datos(clientes)\n",
+ "print (\"Base de datos:\", bdd)\n",
+ "print (\"Número de clientes:\", n)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.5"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/33_purchases.txt b/33_purchases.txt
new file mode 100644
index 0000000..a9be8c1
--- /dev/null
+++ b/33_purchases.txt
@@ -0,0 +1,4 @@
+20.00
+15.74
+19.10
+
diff --git a/33_purchases_stats.txt b/33_purchases_stats.txt
new file mode 100644
index 0000000..e58b70b
--- /dev/null
+++ b/33_purchases_stats.txt
@@ -0,0 +1,3 @@
+mínimo: 15.74
+máximo: 20.0
+total: 54.84
\ No newline at end of file
diff --git a/33_rw_txt_file.ipynb b/33_rw_txt_file.ipynb
new file mode 100644
index 0000000..bc6a33b
--- /dev/null
+++ b/33_rw_txt_file.ipynb
@@ -0,0 +1,299 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 33. Regalos de cumpleaños\n",
+ "\n",
+ "## Leer y escribir archivos *.txt*\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia del texto: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia del código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Tres de tus amigos celebraron su cumpleaños este mes y les compraste regalos en línea. Ahora es momento de analizar las compras y guardarlas en tus registros. Los montos de las compras están en el archivo *33_purchases.txt*"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 1. Leer un archivo .txt\n",
+ "\n",
+ "- Escribe una función que lea un archivo `.txt` que contenga un número por fila y almacene los números en una lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "línea leída: 20.00\n",
+ "\n",
+ "línea sin salto: 20.00\n",
+ "-----\n",
+ "línea leída: 15.74 \n",
+ "\n",
+ "línea sin salto: 15.74 \n",
+ "-----\n",
+ "línea leída: 19.10\n",
+ "\n",
+ "línea sin salto: 19.10\n",
+ "-----\n",
+ "línea leída: \n",
+ "\n",
+ "línea sin salto: \n",
+ "-----\n",
+ "compras: [20.0, 15.74, 19.1]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def leer_txt (nombre_archivo):\n",
+ " \"\"\"Lee un archivo .txt con un número por fila y los devuelve como una lista\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " nombre_archivo: string\n",
+ " Nombre del archivo a leer\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " numeros : list\n",
+ " Contenido del archivo en una lista de números\n",
+ " \"\"\"\n",
+ "\n",
+ " # inicializar salida\n",
+ " numeros = []\n",
+ "\n",
+ " # abrir el archivo\n",
+ " with open(nombre_archivo, \"r\") as archivo:\n",
+ "\n",
+ " # leer el archivo\n",
+ " for linea in archivo:\n",
+ " print (\"línea leída:\", linea)\n",
+ "\n",
+ " # quitar \"\\n\" de la línea\n",
+ " linea = linea.rstrip(\"\\n\")\n",
+ " print (\"línea sin salto:\", linea)\n",
+ " print (\"-----\")\n",
+ "\n",
+ " # obtener solo las líneas no vacías\n",
+ " if linea != \"\":\n",
+ "\n",
+ " # transformar el número a float\n",
+ " numero = float(linea)\n",
+ "\n",
+ " # agregar a la lista de salida\n",
+ " numeros.append(numero)\n",
+ "\n",
+ " # retornar la salida\n",
+ " return numeros\n",
+ "\n",
+ "# llamar la función e imprimir la salida\n",
+ "compras = leer_txt(\"33_purchases.txt\")\n",
+ "print (\"compras:\", compras)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Alternativa más compacta:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "compras: [20.0, 15.74, 19.1]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def leer_txt_compacto (nombre_archivo):\n",
+ " \"\"\"Lee un archivo .txt que contiene una columna de números\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " nombre_archivo : string\n",
+ " Nombre del archivo a leer\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " numeros : list\n",
+ " Contenido del archivo en una lista de números\n",
+ " \"\"\"\n",
+ "\n",
+ " # abrir el archivo\n",
+ " with open(nombre_archivo, \"r\") as archivo:\n",
+ "\n",
+ " # leer los números y transformarlos en floats\n",
+ " numeros = [float(numero) for numero in archivo.read().split()]\n",
+ "\n",
+ " # retornar la salida\n",
+ " return numeros\n",
+ "\n",
+ "# llamar la función e imprimir la salida\n",
+ "compras_compacto = leer_txt_compacto(\"33_purchases.txt\")\n",
+ "print (\"compras:\", compras_compacto)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 2. Analizando los números"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Escribe una función que tome una lista de números como entrada y devuelva el mínimo, máximo y suma como variables separadas."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "mínimo: 15.74\n",
+ "máximo: 20.0\n",
+ "total: 54.84\n"
+ ]
+ }
+ ],
+ "source": [
+ "def calcular_estadisticas(numeros):\n",
+ " \"\"\"Devuelve el mínimo, máximo y suma de una lista de números\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " numeros: list\n",
+ " Contiene números\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " minimo : float\n",
+ " Mínimo de la lista\n",
+ " maximo : float\n",
+ " Máximo de la lista\n",
+ " total : float\n",
+ " Suma de los números de la lista\n",
+ " \"\"\"\n",
+ "\n",
+ " # calcular el mínimo\n",
+ " minimo = min(numeros)\n",
+ "\n",
+ " # calcular el máximo\n",
+ " maximo = max(numeros)\n",
+ "\n",
+ " # calcular la suma\n",
+ " total = sum(numeros)\n",
+ "\n",
+ " # retornar los resultados\n",
+ " return minimo, maximo, total\n",
+ "\n",
+ "# llamar la función\n",
+ "mn, mx, tot = calcular_estadisticas(compras)\n",
+ "print (\"mínimo:\", mn)\n",
+ "print (\"máximo:\", mx)\n",
+ "print (\"total:\", tot)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Guardando el análisis\n",
+ "\n",
+ "- Crea una función que, dado el mínimo, máximo y total, los escriba en un archivo en tres líneas consecutivas, especificando qué representan:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def escribir_txt(nombre_archivo, minimo, maximo, total):\n",
+ " \"\"\"Escribe el mínimo, máximo y suma en un archivo\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " nombre_archivo: string\n",
+ " Nombre del archivo a escribir\n",
+ " minimo: float\n",
+ " Mínimo de la lista\n",
+ " maximo: float\n",
+ " Máximo de la lista\n",
+ " total: float\n",
+ " Suma de los números en la lista\n",
+ " \"\"\"\n",
+ "\n",
+ " # abrir el archivo para escribir\n",
+ " with open(nombre_archivo, \"w\") as archivo:\n",
+ "\n",
+ " # escribir el contenido del archivo\n",
+ " archivo.write (\"mínimo: \" + str(minimo) + \"\\n\")\n",
+ " archivo.write (\"máximo: \" + str(maximo) + \"\\n\")\n",
+ " archivo.write (\"total: \" + str(total))\n",
+ "\n",
+ "# llamar la función\n",
+ "escribir_txt(\"33_purchases_stats.txt\", mn, mx, tot)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.5"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/34_python_more.ipynb b/34_python_more.ipynb
new file mode 100644
index 0000000..88b51e0
--- /dev/null
+++ b/34_python_more.ipynb
@@ -0,0 +1,526 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 34. ¿Qué más hay en Python?\n",
+ "\n",
+ "## Tipos adicionales, palabras clave, funciones integradas y módulos\n",
+ "\n",
+ "[Aprende Python con Jupyter](https://learnpythonwithjupyter.com/) por [Serena Bonaretti](https://sbonaretti.github.io/) \n",
+ "Licencia del texto: [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/2.0/). Licencia del código: [GNU-GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html) \n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Tipos de datos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1.1 Tuplas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente tupla:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(256, 256, 3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "tamano_imagen = (256, 256, 3)\n",
+ "print (tamano_imagen)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Calcula cuántas veces aparece 256:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(tamano_imagen.count(256))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Calcula la posición de 3:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(tamano_imagen.index(3))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1.2 Conjuntos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dado el siguiente conjunto, imprímelo:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'Praga', 'Delhi', 'Buenos Aires'}\n",
+ "El número de elementos es: 3\n"
+ ]
+ }
+ ],
+ "source": [
+ "ciudades = {\"Buenos Aires\", \"Praga\", \"Delhi\", \"Delhi\"}\n",
+ "print (ciudades)\n",
+ "print (\"El número de elementos es:\", len(ciudades))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dada la siguiente lista:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ciudades = [\"San Francisco\", \"Melbourne\", \"San Francisco\", \"Milán\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Elimina los duplicados:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['Milán', 'San Francisco', 'Melbourne']\n"
+ ]
+ }
+ ],
+ "source": [
+ "ciudades = list(set(ciudades))\n",
+ "print (ciudades)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Dadas las siguientes listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ciudades_1 = [\"Santiago\", \"Bangkok\", \"El Cairo\", \"Santiago\"]\n",
+ "ciudades_2 = [\"El Cairo\", \"Ciudad del Cabo\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Crea una nueva lista que contenga los elementos únicos de ambas listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['El Cairo', 'Bangkok', 'Santiago', 'Ciudad del Cabo']\n"
+ ]
+ }
+ ],
+ "source": [
+ "todas_las_ciudades = list(set(ciudades_1).union(set(ciudades_2)))\n",
+ "print (todas_las_ciudades)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Crea una nueva lista que contenga los elementos comunes a ambas listas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['El Cairo']\n"
+ ]
+ }
+ ],
+ "source": [
+ "ciudades_comunes = list(set(ciudades_1).intersection(set(ciudades_2)))\n",
+ "print (ciudades_comunes)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "--- \n",
+ "## 2. Palabras clave"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2.1 `lambda`\n",
+ "\n",
+ "### 2.1 `lambda`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aquí está la función regular:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "10\n"
+ ]
+ }
+ ],
+ "source": [
+ "def duplicar_numero (numero):\n",
+ " \"\"\"Devuelve el doble de un número\n",
+ "\n",
+ " Parámetros\n",
+ " ----------\n",
+ " numero : float\n",
+ " El número de entrada\n",
+ "\n",
+ " Retorna\n",
+ " -------\n",
+ " float\n",
+ " El doble del número de entrada\n",
+ " \"\"\"\n",
+ "\n",
+ " return numero * 2\n",
+ "\n",
+ "print (duplicar_numero(5))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Aquí está la función lambda correspondiente:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "10\n"
+ ]
+ }
+ ],
+ "source": [
+ "duplicar_numero = lambda numero: numero * 2\n",
+ "print(duplicar_numero(5))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 3. Funciones integradas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 3.1 `map()`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Duplica cada elemento de la lista usando una función lambda:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[6, 10, 14]\n"
+ ]
+ }
+ ],
+ "source": [
+ "numeros = [3,5,7]\n",
+ "dobles = list(map(duplicar_numero, numeros))\n",
+ "print(dobles)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## 4. Módulos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Genera un número entero aleatorio entre 1 y 10 dos veces:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n: 1\n",
+ "n: 5\n"
+ ]
+ }
+ ],
+ "source": [
+ "import random\n",
+ "\n",
+ "n = random.randint(1,10)\n",
+ "print (\"n:\", n)\n",
+ "n = random.randint(1,10)\n",
+ "print (\"n:\", n)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Genera un número entero aleatorio entre 1 y 10 dos veces, usando una semilla:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n: 3\n",
+ "n: 3\n"
+ ]
+ }
+ ],
+ "source": [
+ "import random\n",
+ "\n",
+ "random.seed(18)\n",
+ "n = random.randint(1,10)\n",
+ "print (\"n:\", n)\n",
+ "\n",
+ "random.seed(18)\n",
+ "n = random.randint(1,10)\n",
+ "print (\"n:\", n)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Compara el tiempo que toma crear una lista con diez, cien y mil ceros, usando un bucle for vs. replicación de listas. ¿Qué crees que pasará con la diferencia de tiempo?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "N. de ceros: 3\n",
+ "Bucle for: 0.000005 seg\n",
+ "Replicación: 0.000003 seg\n",
+ "\n",
+ "N. de ceros: 10\n",
+ "Bucle for: 0.000006 seg\n",
+ "Replicación: 0.000001 seg\n",
+ "\n",
+ "N. de ceros: 100\n",
+ "Bucle for: 0.000035 seg\n",
+ "Replicación: 0.000001 seg\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "import time\n",
+ "\n",
+ "# longitudes de listas\n",
+ "n_elementos = [10, 100, 1000]\n",
+ "\n",
+ "# para cada longitud\n",
+ "for n in n_elementos:\n",
+ "\n",
+ " print (\"N. de ceros:\", len(numeros))\n",
+ "\n",
+ " # crear la lista usando el bucle for\n",
+ " inicio = time.time()\n",
+ " numeros = []\n",
+ " for _ in range (n):\n",
+ " numeros.append(0)\n",
+ " fin = time.time()\n",
+ " print (\"Bucle for: {:.6f} seg\".format(fin-inicio))\n",
+ "\n",
+ " # crear la lista usando replicación\n",
+ " inicio = time.time()\n",
+ " numeros = [0]*n\n",
+ " fin = time.time()\n",
+ " print (\"Replicación: {:.6f} seg\\n\".format(fin-inicio) )"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.5"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {},
+ "version_major": 2,
+ "version_minor": 0
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/README.md b/README.md
index 49b373c..f8025e1 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,15 @@
# Cuadernos de Aprende Python con Jupyter
-En este repositorio puedes encontrar todas los cuadernos (notebooks) del libro [Learn Python with Jupyter](https://learnpythonwithjupyter.com) traducidos al español de México.
+En este repositorio puedes encontrar todas los cuadernos (notebooks) del libro [Learn Python with Jupyter](https://learnpythonwithjupyter.com) traducidos al español de México.
-## Cómo descargar los cuadernos
+## Cómo descargar los cuadernos
Haz clic en el botón verde `< > Code` en la parte superior derecha de esta página. Luego, haz clic en `Download ZIP`
## Cuadernos traducidos
- Progreso del libro 25/38
+ Progreso del libro 25/38
- Progreso de la traducción 25/38
+ Progreso de la traducción 25/38
### PARTE 1: CREANDO LOS FUNDAMENTOS
1. [x] [Texto, preguntas y arte](01_string_input_print.ipynb)
@@ -74,22 +74,45 @@ Haz clic en el botón verde `< > Code` en la parte superior derecha de esta pág
*Diccionarios*
25. [x] [Viaje a Suiza](25_dictionary_list.ipynb)
*Diccionario con listas como valores*
-26. [ ] Counting, compressing, and sorting
-27. [ ] Overview of strings
+26. [x] [Conteo, compresión y ordenamiento](26_count_compress_sort.ipynb)
+
*Contar, comprimir y ordenar datos*
+27. [x] [Resumen de cadenas de caracteres](27_string_overview.ipynb)
+
*Visión general de las cadenas*
### PARTE 8: FUNCIONES
-28. [ ] Stationary for a party
-29. [ ] Username and password
-30. [ ] People's age and odd numbers
-31. [ ] Factorials
-32. [ ] Jupyter notebooks and modules
+28. [x] [Papelería para una fiesta](28_functions.ipynb)
+
*Funciones*
+29. [x] [Nombre de usuario y contraseña](29_input_validation.ipynb)
+
*Validación de entrada*
+30. [x] [La edad de las personas y números impares](30_return.ipynb)
+
*Retorno de valores en funciones*
+31. [x] [Factoriales](31_recursion.ipynb)
+
*Recursión*
+
+### PARTE 8: FUNCIONES
+28. [x] [Papelería para una fiesta](28_functions.ipynb)
+
*Funciones y parámetros*
+29. [x] [Nombre de usuario y contraseña](29_input_validation.ipynb)
+
*Validación de entrada y variaciones de salida*
+30. [x] [La edad de las personas y números impares](30_return.ipynb)
+
*Salidas de funciones y diseño modular*
+31. [x] [Factoriales](31_recursion.ipynb)
+
*Funciones recursivas*
+32. [ ] [Cuadernos de Jupyter y módulos](32_jupyter_modules.ipynb)
+
*Trabajando con Jupyter Notebook y un IDE*
### PARTE 9: VARIOS
-33. [ ] Online shopping
-34. [ ] Final Python tricks
+33. [ ] [Compras en línea](33_online_shopping.ipynb)
+
*Lectura y escritura de archivos de texto*
+34. [ ] [Trucos finales de Python](34_final_python_tricks.ipynb)
+
*Qué más hay en Python*
### PARTE 10: PROGRAMACIÓN ORIENTADA A OBJETOS
-35. [ ] I need a bank account!
-36. [ ] Improving a bank account
-37. [ ] What if I need a checking account?
-38. [ ] I also need a savings account
\ No newline at end of file
+35. [ ] [¡Necesito una cuenta bancaria!](35_bank_account.ipynb)
+
*Clases y objetos*
+36. [ ] [Mejorando una cuenta bancaria](36_improving_bank_account.ipynb)
+
*Encapsulación*
+37. [ ] [¿Y si necesito una cuenta corriente?](37_checking_account.ipynb)
+
*Herencia*
+38. [ ] [También necesito una cuenta de ahorros](38_savings_account.ipynb)
+
*Polimorfismo*
diff --git a/__pycache__/setup_database.cpython-313.pyc b/__pycache__/setup_database.cpython-313.pyc
new file mode 100644
index 0000000..5d9a3dd
Binary files /dev/null and b/__pycache__/setup_database.cpython-313.pyc differ
diff --git a/actors.txt b/actors.txt
new file mode 100644
index 0000000..9c8cebf
--- /dev/null
+++ b/actors.txt
@@ -0,0 +1,13 @@
+Timothée Chalamet
+Julia Roberts
+Denzel Washington
+Tom Hanks
+Morgan Freeman
+ Audrey Hepburn
+Priyanka Chopra
+ Sandra Bullock
+Sean Connery
+Jackie Chan
+
+
+
diff --git a/mise.toml b/mise.toml
new file mode 100644
index 0000000..e69de29
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..4918e9c
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,14 @@
+[project]
+name = "jupyternotebooksspanish"
+version = "0.1.0"
+description = "Add your description here"
+readme = "README.md"
+requires-python = ">=3.13"
+dependencies = [
+ "ipykernel>=6.29.5",
+]
+
+[dependency-groups]
+dev = [
+ "ipykernel>=6.29.5",
+]
diff --git a/setup_database.py b/setup_database.py
new file mode 100644
index 0000000..75adf00
--- /dev/null
+++ b/setup_database.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Creado el Mié 29 Ene 12:25:45 2025
+
+@author: serenabonaretti
+
+Este módulo contiene funciones para crear nombres de usuario y contraseñas
+"""
+
+import random
+
+
+def crear_usuario (nombre, apellido):
+ """Crea un nombre de usuario en minúsculas formado por la inicial del nombre y el apellido
+
+ Parámetros
+ ----------
+ nombre: string
+ Nombre de la persona
+ apellido: string
+ Apellido de la persona
+
+ Retorna
+ -------
+ usuario: string
+ Nombre de usuario creado
+ """
+
+ # concatenar inicial del nombre y apellido
+ usuario = nombre[0] + apellido
+ # asegurar que el nombre de usuario esté en minúsculas
+ usuario = usuario.lower()
+
+ # retornar nombre de usuario
+ return usuario
+
+
+def crear_contrasena():
+ """Crea una contraseña compuesta por cuatro dígitos aleatorios
+
+ Retorna
+ -------
+ contrasena: string
+ Contraseña creada
+ """
+
+ # crear un número aleatorio de cuatro dígitos
+ contrasena = str(random.randint(1000,9999))
+
+ # retornar contraseña
+ return contrasena
+
+
+def crear_base_de_datos (clientes):
+ """Crea una base de datos como diccionario con nombres de usuario como claves y contraseñas como valores
+
+ Parámetros
+ ----------
+ clientes : lista de listas
+ Cada sublista contiene nombre y apellido de un cliente
+
+ Retorna
+ -------
+ bdd : diccionario
+ Base de datos creada (abreviado como bdd)
+ n_clientes : int
+ Número de clientes en la base de datos
+ """
+
+ # inicializar diccionario (es decir, base de datos)
+ bdd = {}
+
+ # para cada cliente
+ for cliente in clientes:
+
+ # crear nombre de usuario
+ usuario = crear_usuario (cliente[0], cliente[1])
+
+ # crear contraseña
+ contrasena = crear_contrasena()
+
+ # agregar nombre de usuario y contraseña a la base de datos
+ bdd[usuario] = contrasena
+
+ # calcular número de clientes
+ n_clientes = len(bdd)
+
+ # retornar diccionario y su longitud
+ return bdd, n_clientes
+
+
+if __name__ == "__main__":
+
+ # entrada para la función principal
+ clientes = [["Maria", "Lopez"], ["Julia", "Smith"], ["Mohammed", "Seid"]]
+
+ # crear la base de datos
+ base_de_datos, numero_clientes = crear_base_de_datos(clientes)
+
+ # imprimir los resultados
+ print ("Base de datos:", base_de_datos)
+ print ("Número de clientes:", numero_clientes)
+
+
+
+
+
+
+
diff --git a/uv.lock b/uv.lock
new file mode 100644
index 0000000..6eaaf5a
--- /dev/null
+++ b/uv.lock
@@ -0,0 +1,449 @@
+version = 1
+revision = 2
+requires-python = ">=3.13"
+
+[[package]]
+name = "appnope"
+version = "0.1.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" },
+]
+
+[[package]]
+name = "asttokens"
+version = "3.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" },
+]
+
+[[package]]
+name = "cffi"
+version = "1.17.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pycparser" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" },
+ { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" },
+ { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
+]
+
+[[package]]
+name = "comm"
+version = "0.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload-time = "2024-03-12T16:53:41.133Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" },
+]
+
+[[package]]
+name = "debugpy"
+version = "1.8.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193, upload-time = "2025-03-05T01:02:22.807Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416, upload-time = "2025-03-05T01:02:50.558Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784, upload-time = "2025-03-05T01:02:53.535Z" },
+ { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270, upload-time = "2025-03-05T01:02:56.241Z" },
+ { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621, upload-time = "2025-03-05T01:02:57.845Z" },
+ { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306, upload-time = "2025-03-05T01:03:16.51Z" },
+]
+
+[[package]]
+name = "decorator"
+version = "5.2.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" },
+]
+
+[[package]]
+name = "executing"
+version = "2.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" },
+]
+
+[[package]]
+name = "ipykernel"
+version = "6.29.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "appnope", marker = "sys_platform == 'darwin'" },
+ { name = "comm" },
+ { name = "debugpy" },
+ { name = "ipython" },
+ { name = "jupyter-client" },
+ { name = "jupyter-core" },
+ { name = "matplotlib-inline" },
+ { name = "nest-asyncio" },
+ { name = "packaging" },
+ { name = "psutil" },
+ { name = "pyzmq" },
+ { name = "tornado" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload-time = "2024-07-01T14:07:22.543Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload-time = "2024-07-01T14:07:19.603Z" },
+]
+
+[[package]]
+name = "ipython"
+version = "9.0.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "decorator" },
+ { name = "ipython-pygments-lexers" },
+ { name = "jedi" },
+ { name = "matplotlib-inline" },
+ { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "prompt-toolkit" },
+ { name = "pygments" },
+ { name = "stack-data" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102, upload-time = "2025-03-08T15:04:52.885Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524, upload-time = "2025-03-08T15:04:50.667Z" },
+]
+
+[[package]]
+name = "ipython-pygments-lexers"
+version = "1.1.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pygments" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" },
+]
+
+[[package]]
+name = "jedi"
+version = "0.19.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "parso" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" },
+]
+
+[[package]]
+name = "jupyter-client"
+version = "8.6.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "jupyter-core" },
+ { name = "python-dateutil" },
+ { name = "pyzmq" },
+ { name = "tornado" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" },
+]
+
+[[package]]
+name = "jupyter-core"
+version = "5.7.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "platformdirs" },
+ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629, upload-time = "2024-03-12T12:37:35.652Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965, upload-time = "2024-03-12T12:37:32.36Z" },
+]
+
+[[package]]
+name = "jupyternotebooksspanish"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+ { name = "ipykernel" },
+]
+
+[package.dev-dependencies]
+dev = [
+ { name = "ipykernel" },
+]
+
+[package.metadata]
+requires-dist = [{ name = "ipykernel", specifier = ">=6.29.5" }]
+
+[package.metadata.requires-dev]
+dev = [{ name = "ipykernel", specifier = ">=6.29.5" }]
+
+[[package]]
+name = "matplotlib-inline"
+version = "0.1.7"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" },
+]
+
+[[package]]
+name = "nest-asyncio"
+version = "1.6.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" },
+]
+
+[[package]]
+name = "packaging"
+version = "24.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" },
+]
+
+[[package]]
+name = "parso"
+version = "0.8.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" },
+]
+
+[[package]]
+name = "pexpect"
+version = "4.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ptyprocess" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" },
+]
+
+[[package]]
+name = "platformdirs"
+version = "4.3.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302, upload-time = "2024-09-17T19:06:50.688Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439, upload-time = "2024-09-17T19:06:49.212Z" },
+]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.50"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "wcwidth" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087, upload-time = "2025-01-20T15:55:35.072Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816, upload-time = "2025-01-20T15:55:29.98Z" },
+]
+
+[[package]]
+name = "psutil"
+version = "7.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" },
+ { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" },
+ { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" },
+ { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" },
+]
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" },
+]
+
+[[package]]
+name = "pure-eval"
+version = "0.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" },
+]
+
+[[package]]
+name = "pycparser"
+version = "2.22"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" },
+]
+
+[[package]]
+name = "pygments"
+version = "2.19.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
+]
+
+[[package]]
+name = "pywin32"
+version = "309"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6c/c3/51aca6887cc5e410aa4cdc55662cf8438212440c67335c3f141b02eb8d52/pywin32-309-cp313-cp313-win32.whl", hash = "sha256:008bffd4afd6de8ca46c6486085414cc898263a21a63c7f860d54c9d02b45c8d", size = 8789700, upload-time = "2025-03-09T18:04:08.937Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/66/330f265140fa814b4ed1bf16aea701f9d005f8f4ab57a54feb17f53afe7e/pywin32-309-cp313-cp313-win_amd64.whl", hash = "sha256:bd0724f58492db4cbfbeb1fcd606495205aa119370c0ddc4f70e5771a3ab768d", size = 9496714, upload-time = "2025-03-09T18:04:10.619Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/84/9a51e6949a03f25cd329ece54dbf0846d57fadd2e79046c3b8d140aaa132/pywin32-309-cp313-cp313-win_arm64.whl", hash = "sha256:8fd9669cfd41863b688a1bc9b1d4d2d76fd4ba2128be50a70b0ea66b8d37953b", size = 8453052, upload-time = "2025-03-09T18:04:12.812Z" },
+]
+
+[[package]]
+name = "pyzmq"
+version = "26.2.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "cffi", marker = "implementation_name == 'pypy'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5a/e3/8d0382cb59feb111c252b54e8728257416a38ffcb2243c4e4775a3c990fe/pyzmq-26.2.1.tar.gz", hash = "sha256:17d72a74e5e9ff3829deb72897a175333d3ef5b5413948cae3cf7ebf0b02ecca", size = 278433, upload-time = "2025-01-30T11:42:00.757Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4f/2e/fa7a91ce349975971d6aa925b4c7e1a05abaae99b97ade5ace758160c43d/pyzmq-26.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:099b56ef464bc355b14381f13355542e452619abb4c1e57a534b15a106bf8e23", size = 942331, upload-time = "2025-01-30T11:39:10.936Z" },
+ { url = "https://files.pythonhosted.org/packages/64/2b/1f10b34b6dc7ff4b40f668ea25ba9b8093ce61d874c784b90229b367707b/pyzmq-26.2.1-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:651726f37fcbce9f8dd2a6dab0f024807929780621890a4dc0c75432636871be", size = 1345831, upload-time = "2025-01-30T11:39:14.136Z" },
+ { url = "https://files.pythonhosted.org/packages/4c/8d/34884cbd4a8ec050841b5fb58d37af136766a9f95b0b2634c2971deb09da/pyzmq-26.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57dd4d91b38fa4348e237a9388b4423b24ce9c1695bbd4ba5a3eada491e09399", size = 670773, upload-time = "2025-01-30T11:39:16.881Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/f4/d4becfcf9e416ad2564f18a6653f7c6aa917da08df5c3760edb0baa1c863/pyzmq-26.2.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d51a7bfe01a48e1064131f3416a5439872c533d756396be2b39e3977b41430f9", size = 908836, upload-time = "2025-01-30T11:39:19.68Z" },
+ { url = "https://files.pythonhosted.org/packages/07/fa/ab105f1b86b85cb2e821239f1d0900fccd66192a91d97ee04661b5436b4d/pyzmq-26.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7154d228502e18f30f150b7ce94f0789d6b689f75261b623f0fdc1eec642aab", size = 865369, upload-time = "2025-01-30T11:39:23.038Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/48/15d5f415504572dd4b92b52db5de7a5befc76bb75340ba9f36f71306a66d/pyzmq-26.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:f1f31661a80cc46aba381bed475a9135b213ba23ca7ff6797251af31510920ce", size = 865676, upload-time = "2025-01-30T11:39:25.173Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/35/2d91bcc7ccbb56043dd4d2c1763f24a8de5f05e06a134f767a7fb38e149c/pyzmq-26.2.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:290c96f479504439b6129a94cefd67a174b68ace8a8e3f551b2239a64cfa131a", size = 1201457, upload-time = "2025-01-30T11:39:27.022Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/bb/aa7c5119307a5762b8dca6c9db73e3ab4bccf32b15d7c4f376271ff72b2b/pyzmq-26.2.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f2c307fbe86e18ab3c885b7e01de942145f539165c3360e2af0f094dd440acd9", size = 1513035, upload-time = "2025-01-30T11:39:29.756Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/4c/527e6650c2fccec7750b783301329c8a8716d59423818afb67282304ce5a/pyzmq-26.2.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:b314268e716487bfb86fcd6f84ebbe3e5bec5fac75fdf42bc7d90fdb33f618ad", size = 1411881, upload-time = "2025-01-30T11:39:32.631Z" },
+ { url = "https://files.pythonhosted.org/packages/89/9f/e4412ea1b3e220acc21777a5edba8885856403d29c6999aaf00a9459eb03/pyzmq-26.2.1-cp313-cp313-win32.whl", hash = "sha256:edb550616f567cd5603b53bb52a5f842c0171b78852e6fc7e392b02c2a1504bb", size = 581354, upload-time = "2025-01-30T11:39:34.568Z" },
+ { url = "https://files.pythonhosted.org/packages/55/cd/f89dd3e9fc2da0d1619a82c4afb600c86b52bc72d7584953d460bc8d5027/pyzmq-26.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:100a826a029c8ef3d77a1d4c97cbd6e867057b5806a7276f2bac1179f893d3bf", size = 643560, upload-time = "2025-01-30T11:39:36.905Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/99/5de4f8912860013f1116f818a0047659bc20d71d1bc1d48f874bdc2d7b9c/pyzmq-26.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:6991ee6c43e0480deb1b45d0c7c2bac124a6540cba7db4c36345e8e092da47ce", size = 558037, upload-time = "2025-01-30T11:39:38.753Z" },
+ { url = "https://files.pythonhosted.org/packages/06/0b/63b6d7a2f07a77dbc9768c6302ae2d7518bed0c6cee515669ca0d8ec743e/pyzmq-26.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:25e720dba5b3a3bb2ad0ad5d33440babd1b03438a7a5220511d0c8fa677e102e", size = 938580, upload-time = "2025-01-30T11:39:40.536Z" },
+ { url = "https://files.pythonhosted.org/packages/85/38/e5e2c3ffa23ea5f95f1c904014385a55902a11a67cd43c10edf61a653467/pyzmq-26.2.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:9ec6abfb701437142ce9544bd6a236addaf803a32628d2260eb3dbd9a60e2891", size = 1339670, upload-time = "2025-01-30T11:39:42.492Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/87/da5519ed7f8b31e4beee8f57311ec02926822fe23a95120877354cd80144/pyzmq-26.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e1eb9d2bfdf5b4e21165b553a81b2c3bd5be06eeddcc4e08e9692156d21f1f6", size = 660983, upload-time = "2025-01-30T11:39:44.503Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/e8/1ca6a2d59562e04d326a026c9e3f791a6f1a276ebde29da478843a566fdb/pyzmq-26.2.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90dc731d8e3e91bcd456aa7407d2eba7ac6f7860e89f3766baabb521f2c1de4a", size = 896509, upload-time = "2025-01-30T11:39:46.388Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/e5/0b4688f7c74bea7e4f1e920da973fcd7d20175f4f1181cb9b692429c6bb9/pyzmq-26.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6a93d684278ad865fc0b9e89fe33f6ea72d36da0e842143891278ff7fd89c3", size = 853196, upload-time = "2025-01-30T11:39:48.192Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/35/c17241da01195001828319e98517683dad0ac4df6fcba68763d61b630390/pyzmq-26.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c1bb37849e2294d519117dd99b613c5177934e5c04a5bb05dd573fa42026567e", size = 855133, upload-time = "2025-01-30T11:39:50.097Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/14/268ee49bbecc3f72e225addeac7f0e2bd5808747b78c7bf7f87ed9f9d5a8/pyzmq-26.2.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:632a09c6d8af17b678d84df442e9c3ad8e4949c109e48a72f805b22506c4afa7", size = 1191612, upload-time = "2025-01-30T11:39:52.05Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/02/6394498620b1b4349b95c534f3ebc3aef95f39afbdced5ed7ee315c49c14/pyzmq-26.2.1-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:fc409c18884eaf9ddde516d53af4f2db64a8bc7d81b1a0c274b8aa4e929958e8", size = 1500824, upload-time = "2025-01-30T11:39:54.148Z" },
+ { url = "https://files.pythonhosted.org/packages/17/fc/b79f0b72891cbb9917698add0fede71dfb64e83fa3481a02ed0e78c34be7/pyzmq-26.2.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:17f88622b848805d3f6427ce1ad5a2aa3cf61f12a97e684dab2979802024d460", size = 1399943, upload-time = "2025-01-30T11:39:58.293Z" },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
+]
+
+[[package]]
+name = "stack-data"
+version = "0.6.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asttokens" },
+ { name = "executing" },
+ { name = "pure-eval" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" },
+]
+
+[[package]]
+name = "tornado"
+version = "6.4.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135, upload-time = "2024-11-22T03:06:38.036Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299, upload-time = "2024-11-22T03:06:20.162Z" },
+ { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253, upload-time = "2024-11-22T03:06:22.39Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602, upload-time = "2024-11-22T03:06:24.214Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972, upload-time = "2024-11-22T03:06:25.559Z" },
+ { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173, upload-time = "2024-11-22T03:06:27.584Z" },
+ { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892, upload-time = "2024-11-22T03:06:28.933Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334, upload-time = "2024-11-22T03:06:30.428Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261, upload-time = "2024-11-22T03:06:32.458Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463, upload-time = "2024-11-22T03:06:34.71Z" },
+ { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907, upload-time = "2024-11-22T03:06:36.71Z" },
+]
+
+[[package]]
+name = "traitlets"
+version = "5.14.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" },
+]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" },
+]