diff --git a/ejercicio2.html b/ejercicio2.html index d8f52911b4209dc5bd190e861e0da3e65ff71275..2ae4455323fd04feaba78ef8932543fa75c27744 100644 --- a/ejercicio2.html +++ b/ejercicio2.html @@ -14280,9 +14280,8 @@ a.anchor-link { </div> <div class="jp-Cell-inputWrapper"><div class="jp-InputPrompt jp-InputArea-prompt"> </div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput " data-mime-type="text/markdown"> -<p>Los números en la <em>n-ésima</em> (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\choose 0},\,{n\choose 1},\,...,\,{n\choose n}$ donde -$$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$</p> - +<p>Los números en la <em>n-ésima</em> (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\choose 0},\,{n\choose 1},\,...,\,{n\choose n}$ donde</p> +$$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$ </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> <div class="jp-Cell-inputWrapper"> @@ -14641,6 +14640,124 @@ $$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$</p> </div> +</div> +<div class="jp-Cell-inputWrapper"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput " data-mime-type="text/markdown"> +<p>Modifique la rutina anterior para que reciba un número variable de argumentos: <em>n1</em>, <em>n2</em>, <em>n3</em>,...y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila <em>n1</em> del triángulo de Pascal, el segundo elemento una lista con los números en la fila <em>n2</em>, y asà sucesivamente.</p> + +</div> +</div> +<div class="jp-Cell-inputWrapper"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput " data-mime-type="text/markdown"> +<p>Para este caso la estrategia será buscar el número más alto de los brindados por el usuario y la estructura de la rutina es la misma, la única diferencia es que se guardan algunas de las filas intermedias.</p> + +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [12]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">multipascal</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span> + <span class="n">nmax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span> + <span class="n">rows</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="o">==</span> <span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">args</span><span class="p">):</span> <span class="c1"># usando all() para verificar que todos los números sean enteros</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Error: uno o más de los números ingresados no es entero'</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">nmax</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># sabemos que la primera fila es un 1</span> + <span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="mi">1</span><span class="p">)])</span> + <span class="k">return</span> <span class="n">rows</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">prow</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="c1"># guardando la primera fila, se usan tuplas para que sea inmutable</span> + <span class="n">row</span> <span class="o">=</span><span class="p">[]</span> <span class="c1"># lista donde se crearán las filas</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">nmax</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># iterando sobre el número de filas</span> + <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># segunda iteración (shame on me) para moverse en "columnas"</span> + <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">k</span> <span class="o">==</span> <span class="n">i</span><span class="p">:</span> + <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="c1"># el primer y el último número es 1</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prow</span><span class="p">[</span><span class="n">k</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">prow</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="c1"># elementos interiores como suma de elementos de la fila anterior</span> + <span class="n">prow</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="c1"># re asigno la fila anterior (como una tupla) para la nueva iteración</span> + <span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="c1"># guardo la fila actual</span> + <span class="n">row</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># vacÃo la fila para volverla a llenar</span> + <span class="k">return</span> <span class="n">rows</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="n">multipascal</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span> +</pre></div> + + </div> +</div> +</div> +</div> + +<div class="jp-Cell-outputWrapper"> + + +<div class="jp-OutputArea jp-Cell-outputArea"> + +<div class="jp-OutputArea-child"> + + + <div class="jp-OutputPrompt jp-OutputArea-prompt">Out[13]:</div> + + + + +<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain"> +<pre>[[1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="n">multipascal</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mf">4.1</span><span class="p">)</span> +</pre></div> + + </div> +</div> +</div> +</div> + +<div class="jp-Cell-outputWrapper"> + + +<div class="jp-OutputArea jp-Cell-outputArea"> + +<div class="jp-OutputArea-child"> + + + <div class="jp-OutputPrompt jp-OutputArea-prompt"></div> + + +<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain"> +<pre>Error: uno o más de los números ingresados no es entero +</pre> +</div> +</div> + +</div> + +</div> + </div> </body> diff --git a/ejercicio2.ipynb b/ejercicio2.ipynb index 1b4a548782da1c4cf724e91baf7dea9560096466..495d75442c14ac75d6a07f13bf9c4b5db6fc46d3 100644 --- a/ejercicio2.ipynb +++ b/ejercicio2.ipynb @@ -33,6 +33,7 @@ "metadata": {}, "source": [ "Los números en la *n-ésima* (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\\choose 0},\\,{n\\choose 1},\\,...,\\,{n\\choose n}$ donde\n", + "\n", "$$ {n\\choose k} = \\frac{n!}{k!(n-k)!} .$$" ] }, @@ -236,6 +237,86 @@ "source": [ "pascal2(3.1)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para este caso la estrategia será buscar el número más alto de los brindados por el usuario y la estructura de la rutina es la misma, la única diferencia es que se guardan algunas de las filas intermedias." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def multipascal(*args):\n", + " nmax = max(*args)\n", + " rows = []\n", + " if not all(int(n) == n for n in args): # usando all() para verificar que todos los números sean enteros\n", + " print('Error: uno o más de los números ingresados no es entero')\n", + " elif nmax == 0: # sabemos que la primera fila es un 1\n", + " rows.append([int(1)])\n", + " return rows\n", + " else:\n", + " prow = (int(1)) # guardando la primera fila, se usan tuplas para que sea inmutable\n", + " row =[] # lista donde se crearán las filas\n", + " for i in range(1,nmax+1): # iterando sobre el número de filas\n", + " for k in range(i+1): # segunda iteración (shame on me) para moverse en \"columnas\"\n", + " if k == 0 or k == i:\n", + " row.append(int(1)) # el primer y el último número es 1\n", + " else:\n", + " row.append(prow[k-1]+prow[k]) # elementos interiores como suma de elementos de la fila anterior\n", + " prow = tuple(row) # re asigno la fila anterior (como una tupla) para la nueva iteración\n", + " rows.append(row) # guardo la fila actual\n", + " row = [] # vacÃo la fila para volverla a llenar\n", + " return rows" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "multipascal(1,2,3,4)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error: uno o más de los números ingresados no es entero\n" + ] + } + ], + "source": [ + "multipascal(1,2,3,4.1)" + ] } ], "metadata": {