diff --git a/ejercicio2.ipynb b/ejercicio2.ipynb index 05c71f5a23eac52d4d6a9b9cce7048233fbd6fc0..1b2b3d2ded35035711fabcbbe9662fe2ebf00d66 100644 --- a/ejercicio2.ipynb +++ b/ejercicio2.ipynb @@ -29,14 +29,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "La funcion ``corazon_pascal`` es una funcion que usa recursión para retornar la fila ``n`` del triangulo de Pascal.\n", + "La funcion ``corazon_pascal(n)`` es una funcion que usa recursión para retornar la fila ``n`` del triangulo de Pascal.\n", "\n", - "El resultado fundamental\n" + "El \"algoritmo\" para llevar a cabo esta tarea se puede resumir en los siguientes pasos:\n", + "\n", + "* Se crea una lista vacia llamada ``lista`` donde se guardarán los elementos del trianglo de Pascal.\n", + "\n", + "* En el caso donde el entero introducido ``n`` es _cero_, se imprime un mensaje solicitando al ususario un numero entero diferente de _cero_.\n", + "\n", + "* En el caso donde el entero introdcido ``n``es _uno_, se concatena la lista vacia``lista`` con la lista ``[1]`` y este resultado se guarda en la variable ``lista``.\n", + "\n", + "* Cuando el entero introducido ``n`` es mayor a uno, se \"llama\" a la funcion ``corazon_pascal(n)`` cuando el argumento es ``n-1``, esto retorna la fila ``n-1`` del triangulo de Pascal en una lista. Sumamos los elementos consecutivos de esta lista y añadimos cada una de estas sumas a una nueva lista; esta ultima la creamos usando _list comprehension_." ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ @@ -47,19 +55,35 @@ " Retorna una lista con los numeros de la fila n del triangulo de Pascal\n", " \"\"\"\n", " lista=[]\n", - " if n==1:\n", + " \n", + " if n==0:\n", + " print(\"\"\"\n", + " Estamos etiquetando las filas del triangulo de Pascal\n", + " desde el 1. La fila 1 es [1], la fila 2 es [1,1], etc\n", + " \"\"\")\n", + " elif n==1:\n", " lista=lista+[1]\n", " #elif n==2:\n", " #lista=lista+[1,1]\n", " else:\n", " lista_antes=corazon_pascal(n-1)\n", + " # La condicion if i<len(lista_antes)-1 es para evitar evaluar indices mayores \n", + " # que la longitud de la lista lista_antes, ya que en lo que se apenda esta \n", + " # lista_antes[i+1]. \n", " lista=[1]+[lista_antes[i]+lista_antes[i+1] for i,_ in enumerate(lista_antes) if i<len(lista_antes)-1]+[1]\n", " return lista \n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Falta explicacion" + ] + }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -79,14 +103,12 @@ " print(\"\"\"El numero introducido NO es un numero entero, \n", " por favor introduzca un numero ENTERO\"\"\")\n", " \n", - " return \"\"\n", - " \n", - " " + " return \"\" " ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 68, "metadata": {}, "outputs": [ { @@ -97,7 +119,7 @@ "Introduzca un numero entero mayor que cero,\n", "se retornará la fila n del triangulo de Pascal\n", "\n", - " 5\n" + " 3\n" ] }, { @@ -105,7 +127,7 @@ "output_type": "stream", "text": [ "\n", - "[1, 4, 6, 4, 1]\n" + "[1, 2, 1]\n" ] } ], @@ -123,6 +145,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "# --> Falta explicacion\n", + "\n", "## Triangulo de Pascal modificado\n", "\n", "Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,... y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila n1 del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y asà sucesivamente." @@ -130,45 +154,70 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 79, "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stdin", "output_type": "stream", "text": [ - "El numero no es entero\n" + "\n", + "Introduzca una secuencia de numeros ENTEROS separados por comas,\n", + "e.g. n1,n2,n3\n", + "Se retornará una lista que contiene las filas n1,n2 y n3 del\n", + "triangulo de Pascal\n", + " 2,4,6\n" ] - } - ], - "source": [ - "def f(x):\n", - " aux=0\n", - " try:\n", - " print(int(x))\n", - " except:\n", - " print(\"El numero no es entero\")\n", - "\n", - "f(3+4j)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ + }, { "name": "stdout", "output_type": "stream", "text": [ - "1\n" + "\n", + "\n", + "[\n", + "[1, 1]\n", + "[1, 3, 3, 1]\n", + "[1, 5, 10, 10, 5, 1]\n", + "]\n" ] } ], "source": [ - "print(6//4)" + "varios_numeros=input(\"\"\"\n", + "Introduzca una secuencia de numeros ENTEROS separados por comas,\n", + "e.g. n1,n2,n3\n", + "Se retornará una lista que contiene las filas n1,n2 y n3 del\n", + "triangulo de Pascal\n", + "\"\"\")\n", + "\n", + "lista_de_numeros_string=varios_numeros.split(\",\")\n", + "\n", + "# lista_de_numeros_int=[int(x) for x in lista_de_numeros_string]\n", + "\n", + "# print(lista_con_numeros_int)\n", + "\n", + "# Comprobamos que los numeros en la lista lista_con_numeros_int sean de tipo int\n", + "#for i in lista_con_numeros_int:\n", + "# print(type(i))\n", + "\n", + "filas_del_tri_pascal=[triangulo_pascal(h) for h in lista_de_numeros_string]\n", + "print(\"\")\n", + "print(\"\")\n", + "print(\"[\")\n", + "for s in filas_del_tri_pascal:\n", + " print(s)\n", + "print(\"]\") \n", + " \n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -177,7 +226,7 @@ "\n", "+ https://stackoverflow.com/questions/44891070/whats-the-difference-between-str-isdigit-isnumeric-and-isdecimal-in-python\n", "\n", - "+ " + "+ https://www.w3schools.com/python/ref_string_split.asp" ] }, {