diff --git a/ejercicio1.ipynb b/ejercicio1.ipynb
index c76d39436a64605f52c2d53c3b5b39203a5fc7ca..b5a5d8ebc99e339ef55b05d28fa90ec2b9fad5cc 100644
--- a/ejercicio1.ipynb
+++ b/ejercicio1.ipynb
@@ -23,33 +23,30 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "naranja-avión-melodía-tupla-avión\n",
       "avión-melodía-naranja-tupla\n"
      ]
     }
    ],
    "source": [
-    "txt=input()\n",
+    "#Se ingresa el ejemplo en este caso\n",
+    "txt='naranja-avión-melodía-tupla-avión'\n",
+    "#Se convierte en una lista utilizando la función split a partir del caracter '-'\n",
     "txt=txt.split('-')\n",
+    "#Se utiliza la función sorted() para organizarlos alfabeticamente\n",
     "txt=sorted(txt)\n",
-    "prev=''\n",
-    "ret=''\n",
-    "for i in range(len(txt)):\n",
-    "    if txt[i]==prev:\n",
-    "        continue\n",
-    "    else:\n",
-    "        ret+=txt[i]\n",
-    "    if i<len(txt)-1:\n",
-    "        ret+='-'\n",
-    "    prev=txt[i]\n",
-    "print(ret)"
+    "#Utilizando la función fromkeys() que genera un diccionario con las palabras de la lista como llaves\n",
+    "#se obtienen los elementos sin repetir y se extraen nuevamente\n",
+    "txt=list(dict.fromkeys(txt))\n",
+    "#Por último se unen utilizando la función join y se imprimen\n",
+    "txt='-'.join(txt)\n",
+    "print(txt)"
    ]
   }
  ],
diff --git a/ejercicio2.ipynb b/ejercicio2.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..f79b3a91173cbfa509df1660eab7bf8cf3560a27
--- /dev/null
+++ b/ejercicio2.ipynb
@@ -0,0 +1,82 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Nombre: Juan Manuel Moreno Pérez\n",
+    "# Usuario: morenoj"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "• Escriba una rutina en python que reciba como entrada un número entero, n, e imprima los\n",
+    "números en la n-ésima fila del triángulo de Pascal. El programa debe verificar si el número\n",
+    "n es entero, o arrojar un mensaje informando que ha habido un error del usuario en caso\n",
+    "contrario.\n",
+    "\n",
+    "• Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,...\n",
+    "y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila n1\n",
+    "del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y así\n",
+    "sucesivamente."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[1, 3, 3, 1]\n",
+      "[1, 2, 1]\n",
+      "[1]\n",
+      "9.5 no es un entero\n"
+     ]
+    }
+   ],
+   "source": [
+    "#Se importa la función comb del módulo math que resulta útil en el cálculo de los coeficientes del triángulo de pascal\n",
+    "from math import comb\n",
+    "#Se entrega el argumento como una lista\n",
+    "n=[3,2,0,9.5]\n",
+    "#Se itera sobre esta lista\n",
+    "for x in n:\n",
+    "    #Se utiliza la función isinstance para verificar el tipo de elemento y enviar un mensaje de no ser un entero\n",
+    "    if not isinstance(x,int):\n",
+    "        print('{} no es un entero'.format(x))\n",
+    "    else:\n",
+    "        pascal=[]\n",
+    "        #Se define una corta rutina para calcular los coeficientes del triángulo de Pascal\n",
+    "        for i in range(x+1):\n",
+    "            pascal+=[comb(x,x-i)]\n",
+    "        print(pascal)"
+   ]
+  }
+ ],
+ "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.8.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/ejercicio3.ipynb b/ejercicio3.ipynb
index f28703b31f35cc83cdbe0177971f6e263ef0003c..e117482711176e81adda3579d7d0898bfa7827c6 100644
--- a/ejercicio3.ipynb
+++ b/ejercicio3.ipynb
@@ -39,7 +39,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 122,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -126,23 +126,33 @@
     "}"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Se escribe una función que reciba las 2 cosas que se solicitan, se itera sobre las llaves el diccionario y posteriormente se verifica que el país de origen sea el deseado en caso de serlo se procede a imprimir toda la información utilizando la característica format de la función print."
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 135,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
+    "\n",
     "def informacion(compas,pais):\n",
+    "    universidades=[]\n",
     "    for key in list(compas.keys()):\n",
     "        if compas[key]['País_Origen']==pais:\n",
     "            print('Nombres: {0[Nombres]:<15} Apellidos: {0[Apellidos]:<20} Edad: {0[Edad]:<5} País de origen: {0[País_Origen]:<15}'.format(compas[key]))\n",
     "            print('Ciudad de residencia: {0[Ciudad_Residencia]:<20} Especialidad Científica: {0[Especialidad_Científica]:<20}'.format(compas[key]))\n",
-    "            print('Instituto : {0[Instituto]:<40} Hobbies: {0[Hobbies]:<15}\\n'.format(compas[key]))"
+    "            print('Instituto : {0[Instituto]:<40} Hobbies: {0[Hobbies]:<15}\\n'.format(compas[key]))\n",
+    "        universidades+=[compas[key]['Instituto']]\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 136,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
@@ -176,6 +186,83 @@
     "informacion(compas,'Colombia')"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Se calcula la edad promedio sumando todas las edades y diviendolo sobre el largo del diccionario, se itera sobre las personas de la misma forma que en la anterior función. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def edad_promedio(compas):\n",
+    "    age=0\n",
+    "    for key in list(compas.keys()):\n",
+    "        age+=compas[key]['Edad']\n",
+    "    age=age/len(list(compas.keys()))\n",
+    "    print(age)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "25.8\n"
+     ]
+    }
+   ],
+   "source": [
+    "edad_promedio(compas)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Se extrae la lista de universidades iterando como se ha venido realizando y replicando el procedimiento para eliminar duplicados del punto uno se imprimen las universidades una sola vez."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def universidad(compas):\n",
+    "    universidades=[]\n",
+    "    for key in list(compas.keys()):\n",
+    "        universidades+=[compas[key]['Instituto']]\n",
+    "    universidades=sorted(universidades)\n",
+    "    universidades=list(dict.fromkeys(universidades))\n",
+    "    print(universidades)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['LAPP-Laboratoire d´Annecy de Physique des Particules', 'Universidad Central de Venezuela', 'Universidad Nacional Mayor de San Marcos', 'Universidad Nacional de Colombia']\n"
+     ]
+    }
+   ],
+   "source": [
+    "universidad(compas)"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,