diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..445d6dfd5dedbe77a0a7e3f627e6d01dc47bf231
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+.ipynb_checkpoints
+
+
+
+
+
+/
diff --git a/TareasClase2.ipynb b/TareasClase2.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..20816336a7523acbd6cdaf77b9afa433f4be77c2
--- /dev/null
+++ b/TareasClase2.ipynb
@@ -0,0 +1,426 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Ejercicio 1\n",
+ "En la primera celda tomamos una lista de entrada del usuario. En la segunda usamos la función `.split` para crear una lista con cada palabra, la ordenamos con `sorted`, y finalmente la juntamos de nuevo con `.join` (siempre tenemos en cuenta que el separador es -)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Palabras de entrada (separadas por guiones): último-intento-ya-después-de-haber-renombrado-la-variable\n"
+ ]
+ }
+ ],
+ "source": [
+ "inStr = str(input(r\"Palabras de entrada (separadas por guiones): \"))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "inStr = \"-\".join(sorted(inStr.split(\"-\")))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "de-después-haber-intento-la-renombrado-variable-ya-último\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(inStr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Ejercicio 2\n",
+ "## Parte 1\n",
+ "Para la primera parte importamos la función `factorial` y definimos una función que retorna el coeficiente binomial $n\\choose k$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from math import factorial"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "binomCoef = lambda n, k: factorial(n)/(factorial(k)*factorial(n-k))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "El usuario inserta $n$ deseado: si el valor de la entrada es igual sin importar si se transforma a un float o a un int, entonces podemos concluir que $n \\in \\mathbb{Z}$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "¿Número de la fila?8\n"
+ ]
+ }
+ ],
+ "source": [
+ "N = float(input(r\"¿Número de la fila?\"))\n",
+ "if N != int(N):\n",
+ " print(\"Error: n no es entero\")\n",
+ "N = int(N)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finamente, poblamos la lista `nRow` con los coeficientes de la fila correspondiente en el triángulo de Pascal e imprimimos."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1.0, 8.0, 28.0, 56.0, 70.0, 56.0, 28.0, 8.0, 1.0]\n"
+ ]
+ }
+ ],
+ "source": [
+ "nRow = []\n",
+ "for k in range(N+1):\n",
+ " nRow.append(binomCoef(N, k))\n",
+ "print(nRow)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Parte 2\n",
+ "Para la segunda parte reusamos una lÃnea del primer punto, e insertamos los números de las filas separados por puntos; esto ayuda a que no se puedan insertar números no enteros. Luego convertimos cada elemento en un int."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Inserte los números de las filas separados por puntos: 0.1.2.3.4.5\n"
+ ]
+ }
+ ],
+ "source": [
+ "manyN = input(\"Inserte los números de las filas separados por puntos: \")\n",
+ "manyN = [int(n) for n in manyN.split(\".\")]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Reusamos el código de la parte anterior, salvo que esta vez está dentro de otro loop que itera sobre cada fila $n_i$. Las filas que se obtienen se adicionan a una lista `rows`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "rows = []\n",
+ "for N in manyN:\n",
+ " nRow=[]\n",
+ " for k in range(N+1):\n",
+ " nRow.append(binomCoef(N, k))\n",
+ " rows.append(nRow)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finalmente imprimimos cada fila en orden de entrada. En este caso se muestran las filas de la 0 a la 5"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1.0]\n",
+ "[1.0, 1.0]\n",
+ "[1.0, 2.0, 1.0]\n",
+ "[1.0, 3.0, 3.0, 1.0]\n",
+ "[1.0, 4.0, 6.0, 4.0, 1.0]\n",
+ "[1.0, 5.0, 10.0, 10.0, 5.0, 1.0]\n"
+ ]
+ }
+ ],
+ "source": [
+ "for i in range(len(manyN)):\n",
+ " print(rows[i])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Ejercicio 3\n",
+ "Con la función `newEntry` se puede poblar el diccionario.\n",
+ "\n",
+ "* reyesf/Felipe/Reyes/Colombia/Cali/22/Univalle/Gimnasio\n",
+ "* varelaj/Jalil/Varela/Colombia/Palmira/21/Univalle/Age of mythology\n",
+ "* vargass/Sasiri/Vargas/Colombia/Cali/20/Univalle/Bailar"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 105,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def newEntry(d):\n",
+ " info = input(r\"Info de nueva entrada (sep. por /)\")\n",
+ " info = info.split(\"/\")\n",
+ " print(info)\n",
+ " #info = matter/nombre/apellido/pais/residencia/edad/institucion/hobbie\n",
+ " subd = {\"nombre\": info[1], \"apellido\":info[2], \"paÃs\":info[3], \"residencia\":info[4], \"edad\":info[5], \"institución\":info[6], \"hobbie\":info[7]}\n",
+ " d[info[0]] = subd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 106,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "compas = {}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 109,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Info de nueva entrada (sep. por /)vargass/Sasiri/Vargas/Colombia/Cali/20/Univalle/Bailar\n",
+ "['vargass', 'Sasiri', 'Vargas', 'Colombia', 'Cali', '20', 'Univalle', 'Bailar']\n"
+ ]
+ }
+ ],
+ "source": [
+ "newEntry(compas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Definimos las tres funciones que se piden. Todas usan el mismo principio de iterar sobre las llaves de `compas`, e inspeccionar los contenidos de cada una. En la función que retorna las instituciones usamos un set para evitar entradas duplicadas."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 113,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sortPais(d, pais):\n",
+ " names = []\n",
+ " for matter in d:\n",
+ " if d[matter][\"paÃs\"] == pais: \n",
+ " names.append(matter)\n",
+ " ## En caso de necesitar tabular de otra manera se deja asÃ.\n",
+ " ## De lo contrario se puede hacer un solo loop.\n",
+ " for matter in names:\n",
+ " print(d[matter])\n",
+ " \n",
+ "def edadMedia(d):\n",
+ " prom = []\n",
+ " for matter in d:\n",
+ " prom.append(float(compas[matter][\"edad\"]))\n",
+ " print(sum(prom)/len(prom)) \n",
+ " \n",
+ "def instit(d):\n",
+ " instituciones = set()\n",
+ " for matter in d:\n",
+ " instituciones.add(compas[matter][\"institución\"])\n",
+ " print(instituciones) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 114,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'nombre': 'Felipe', 'apellido': 'Reyes', 'paÃs': 'Colombia', 'residencia': 'Cali', 'edad': '22', 'institución': 'Univalle', 'hobbie': 'Gimnasio'}\n",
+ "{'nombre': 'Jalil', 'apellido': 'Varela', 'paÃs': 'Colombia', 'residencia': 'Palmira', 'edad': '21', 'institución': 'Univalle', 'hobbie': 'Age of mythology'}\n",
+ "{'nombre': 'Sasiri', 'apellido': 'Vargas', 'paÃs': 'Colombia', 'residencia': 'Cali', 'edad': '20', 'institución': 'Univalle', 'hobbie': 'Bailar'}\n"
+ ]
+ }
+ ],
+ "source": [
+ "sortPais(compas, \"Colombia\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 122,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "21.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "edadMedia(compas)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 126,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'Univalle'}\n"
+ ]
+ }
+ ],
+ "source": [
+ "instit(compas)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}