Content for Decem's Python course.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 743 lines 78 kB view raw
1{ 2 "cells": [ 3 { 4 "cell_type": "markdown", 5 "metadata": { 6 "slideshow": { 7 "slide_type": "slide" 8 } 9 }, 10 "source": [ 11 "## 5. Estructuras de control de flujo" 12 ] 13 }, 14 { 15 "cell_type": "markdown", 16 "metadata": { 17 "slideshow": { 18 "slide_type": "slide" 19 } 20 }, 21 "source": [ 22 "En general, las estructurasa de control de flujo permiten modificar el flujo de ejecución de un programa.\n", 23 "\n", 24 "Este flujo lo podemos modificar de las siguientes formas\n", 25 "\n", 26 "- De acuerdo con una condición, ejecutar un bloque u otro de código\n", 27 "- Ejecutar un bloque mientras se cumpla una condición\n", 28 "- Ejecutar un bloque un número determinado de veces" 29 ] 30 }, 31 { 32 "attachments": { 33 "image.png": { 34 "image/png": "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" 35 } 36 }, 37 "cell_type": "markdown", 38 "metadata": { 39 "slideshow": { 40 "slide_type": "slide" 41 } 42 }, 43 "source": [ 44 "### Instrucción `if`\n", 45 "\n", 46 "La instrucción para **ejecutar bloques de forma condicional**. \n", 47 "\n", 48 "![image.png](attachment:image.png)" 49 ] 50 }, 51 { 52 "cell_type": "markdown", 53 "metadata": { 54 "slideshow": { 55 "slide_type": "slide" 56 } 57 }, 58 "source": [ 59 "Puede estar compuesta a su vez de cero o más partes de `elif`, que son las diferentes alternativas. \n", 60 "\n", 61 "En Python no hay instrucción `switch` como en otros lenguajes, y la sucesión de diferentes `elif` partes lo sustituyen." 62 ] 63 }, 64 { 65 "cell_type": "code", 66 "execution_count": 2, 67 "metadata": { 68 "slideshow": { 69 "slide_type": "slide" 70 } 71 }, 72 "outputs": [ 73 { 74 "name": "stdout", 75 "output_type": "stream", 76 "text": [ 77 "Introduce un entero: 1.3\n" 78 ] 79 }, 80 { 81 "ename": "ValueError", 82 "evalue": "invalid literal for int() with base 10: '1.3'", 83 "output_type": "error", 84 "traceback": [ 85 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 86 "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", 87 "\u001b[0;32m<ipython-input-2-aeca75f7f533>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Introduce un entero: \"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Negativo cambiado a cero'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 88 "\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: '1.3'" 89 ] 90 } 91 ], 92 "source": [ 93 "x = int(input(\"Introduce un entero: \"))\n", 94 "if x < 0:\n", 95 " x = 0\n", 96 " print('Negativo cambiado a cero')\n", 97 "elif x == 0:\n", 98 " print('Cero')\n", 99 "elif x == 1:\n", 100 " print('Simple')\n", 101 "else:\n", 102 " print('Más')" 103 ] 104 }, 105 { 106 "cell_type": "markdown", 107 "metadata": { 108 "slideshow": { 109 "slide_type": "slide" 110 } 111 }, 112 "source": [ 113 "#### Evita la repetición de variables en una instrucción `if`\n", 114 "\n", 115 "**Dañino**\n", 116 "\n", 117 "```python\n", 118 "is_generic_name = False\n", 119 "name = 'Tom”\n", 120 "if name == 'Tom' or name == 'Dick' or name == 'Harry':\n", 121 " is_generic_name = True\n", 122 "```\n", 123 "\n", 124 "**Idiomático**\n", 125 "\n", 126 "```python\n", 127 "name = 'Tom'\n", 128 "is_generic_name = name in ('Tom', 'Dick', 'Harry')\n", 129 "```" 130 ] 131 }, 132 { 133 "cell_type": "markdown", 134 "metadata": { 135 "slideshow": { 136 "slide_type": "slide" 137 } 138 }, 139 "source": [ 140 "#### Usa un `dict` para sustituir una instrucción `switch...case`\n", 141 "\n", 142 "**Dañino**\n", 143 "\n", 144 "```python\n", 145 "def apply_operation(left_operand, right_operand, operator):\n", 146 " if operator == '+':\n", 147 " return left_operand + right_operand\n", 148 " elif operator == '-':\n", 149 " return left_operand - right_operand\n", 150 " elif operator == '*':\n", 151 " return left_operand * right_operand\n", 152 " elif operator == '/':\n", 153 " return left_operand / right_operand\n", 154 "```\n", 155 "\n", 156 "**Idiomático**\n", 157 "\n", 158 "```python\n", 159 "def apply_operation(left_operand, right_operand, operator):\n", 160 " import operator as op\n", 161 " operator_mapper = {\n", 162 " '+': op.add, \n", 163 " '-': op.sub, \n", 164 " '*': op.mul, \n", 165 " '/': op.truediv\n", 166 " }\n", 167 " return operator_mapper[operator](left_operand, right_operand)\n", 168 "```" 169 ] 170 }, 171 { 172 "attachments": { 173 "image.png": { 174 "image/png": "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" 175 } 176 }, 177 "cell_type": "markdown", 178 "metadata": { 179 "slideshow": { 180 "slide_type": "slide" 181 } 182 }, 183 "source": [ 184 "### Instrucción `while`\n", 185 "\n", 186 "La instrucción `while` se utiliza para que un bloque de código se ejecute mientras una condición se cumpla.\n", 187 "\n", 188 "![image.png](attachment:image.png)" 189 ] 190 }, 191 { 192 "cell_type": "code", 193 "execution_count": 3, 194 "metadata": { 195 "slideshow": { 196 "slide_type": "slide" 197 } 198 }, 199 "outputs": [ 200 { 201 "name": "stdout", 202 "output_type": "stream", 203 "text": [ 204 "a\n", 205 "b\n", 206 "c\n" 207 ] 208 } 209 ], 210 "source": [ 211 "my_items = ['a', 'b', 'c']\n", 212 "\n", 213 "i = 0\n", 214 "while i < len(my_items):\n", 215 " print(my_items[i])\n", 216 " i += 1" 217 ] 218 }, 219 { 220 "attachments": { 221 "image.png": { 222 "image/png": "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" 223 } 224 }, 225 "cell_type": "markdown", 226 "metadata": { 227 "slideshow": { 228 "slide_type": "slide" 229 } 230 }, 231 "source": [ 232 "### Instrucción `for`\n", 233 "\n", 234 "La instrucción `for` permite repetir un bloque de código un número determinado de veces.\n", 235 "\n", 236 "![image.png](attachment:image.png)" 237 ] 238 }, 239 { 240 "cell_type": "markdown", 241 "metadata": { 242 "slideshow": { 243 "slide_type": "slide" 244 } 245 }, 246 "source": [ 247 "La instrucción para realizar bucles `for` es un poco diferente de otros lenguajes de programación.\n", 248 "\n", 249 "En vez de iterar sobre una progresión aritmética de números, dando al usuario la posibilidad de establecer el incremento en cada iteración, el bucle `for` de Python **itera sobre los elementos de cualquier secuencia** (lista, cadena de texto, etc.) en el orden que estos elementos aparecen en la secuencia." 250 ] 251 }, 252 { 253 "cell_type": "code", 254 "execution_count": 4, 255 "metadata": { 256 "slideshow": { 257 "slide_type": "slide" 258 } 259 }, 260 "outputs": [ 261 { 262 "name": "stdout", 263 "output_type": "stream", 264 "text": [ 265 "cat 3\n", 266 "window 6\n", 267 "defenestrate 12\n" 268 ] 269 } 270 ], 271 "source": [ 272 "words = ['cat', 'window', 'defenestrate']\n", 273 "for word in words:\n", 274 " print(word, len(word))" 275 ] 276 }, 277 { 278 "cell_type": "code", 279 "execution_count": 5, 280 "metadata": { 281 "slideshow": { 282 "slide_type": "fragment" 283 } 284 }, 285 "outputs": [ 286 { 287 "name": "stdout", 288 "output_type": "stream", 289 "text": [ 290 "p\n", 291 "n\n", 292 "e\n", 293 "u\n", 294 "m\n", 295 "o\n", 296 "n\n", 297 "o\n", 298 "u\n", 299 "l\n", 300 "t\n", 301 "r\n", 302 "a\n", 303 "m\n", 304 "i\n", 305 "c\n", 306 "r\n", 307 "o\n", 308 "s\n", 309 "c\n", 310 "o\n", 311 "p\n", 312 "i\n", 313 "c\n", 314 "s\n", 315 "i\n", 316 "l\n", 317 "i\n", 318 "c\n", 319 "o\n", 320 "v\n", 321 "o\n", 322 "l\n", 323 "c\n", 324 "a\n", 325 "n\n", 326 "o\n", 327 "c\n", 328 "o\n", 329 "n\n", 330 "i\n", 331 "o\n", 332 "s\n", 333 "i\n", 334 "s\n" 335 ] 336 } 337 ], 338 "source": [ 339 "word = 'pneumonoultramicroscopicsilicovolcanoconiosis'\n", 340 "for letter in word:\n", 341 " print(letter)" 342 ] 343 }, 344 { 345 "cell_type": "markdown", 346 "metadata": { 347 "slideshow": { 348 "slide_type": "slide" 349 } 350 }, 351 "source": [ 352 "#### Usa la función `enumerate` en los bucles en vez de crear una variable de índice\n", 353 "\n", 354 "**Dañino**\n", 355 "\n", 356 "```python\n", 357 "my_container = ['Larry', 'Moe', 'Curly']\n", 358 "index = 0\n", 359 "for element in my_container:\n", 360 " print ('{} {}'.format(index, element))\n", 361 " index += 1\n", 362 "```\n", 363 "\n", 364 "**Idiomático**\n", 365 "\n", 366 "```python\n", 367 "my_container = ['Larry', 'Moe', 'Curly']\n", 368 "for index, element in enumerate(my_container):\n", 369 " print ('{} {}'.format(index, element))\n", 370 "```" 371 ] 372 }, 373 { 374 "cell_type": "markdown", 375 "metadata": { 376 "slideshow": { 377 "slide_type": "slide" 378 } 379 }, 380 "source": [ 381 "#### Instrucción `range`\n", 382 "\n", 383 "La función `range()` permite generar secuencias de números. Se puede utilizar para iterar sobre los índices de una lista de la siguiente forma.\n", 384 "\n", 385 "```python\n", 386 "range([start,] stop [, step])\n", 387 "```\n", 388 "\n", 389 "- `start`: por dónde empieza la secuencia (opcional)\n", 390 "- `stop`: donde acaba la secuencia (no se incluye en el resultado)\n", 391 "- `step`: incremento de cada uno de los elementos de la secuencia\n" 392 ] 393 }, 394 { 395 "cell_type": "code", 396 "execution_count": 6, 397 "metadata": { 398 "slideshow": { 399 "slide_type": "slide" 400 } 401 }, 402 "outputs": [ 403 { 404 "name": "stdout", 405 "output_type": "stream", 406 "text": [ 407 "0 Mary\n", 408 "1 had\n", 409 "2 a\n", 410 "3 little\n", 411 "4 lamb\n" 412 ] 413 } 414 ], 415 "source": [ 416 "a = ['Mary', 'had', 'a', 'little', 'lamb']\n", 417 "for i in range(len(a)):\n", 418 " print(i, a[i])" 419 ] 420 }, 421 { 422 "cell_type": "markdown", 423 "metadata": { 424 "slideshow": { 425 "slide_type": "slide" 426 } 427 }, 428 "source": [ 429 "#### Usa una lista por compresión para crear una versión transformada de una lista existente\n", 430 "\n", 431 "\n", 432 "**Dañino**\n", 433 "\n", 434 "```python\n", 435 "some_other_list = range(10)\n", 436 "some_list = list()\n", 437 "for element in some_other_list:\n", 438 " if is_prime(element):\n", 439 " some_list.append(element + 5)\n", 440 "```\n", 441 "\n", 442 "**Idiomático**\n", 443 "\n", 444 "```python\n", 445 "some_other_list = range(10)\n", 446 "some_list = [element + 5\n", 447 " for element in some_other_list\n", 448 " if is_prime(element)]\n", 449 "```" 450 ] 451 }, 452 { 453 "cell_type": "markdown", 454 "metadata": { 455 "slideshow": { 456 "slide_type": "slide" 457 } 458 }, 459 "source": [ 460 "#### Instrucciones `break`, `continue` y `else` en los bucles\n", 461 "\n", 462 "La instrucción `break`, como en otros lenguajes, rompe la ejecución de la iteración más interna, mientras que `continue` pasa a la siguiente iteración del bucle.\n", 463 "\n", 464 "En un bucle se puede definir la instrucción `else`, que se ejecutará siempre que el bucle termine sin que se salga usando una instrucción `break`" 465 ] 466 }, 467 { 468 "cell_type": "code", 469 "execution_count": 12, 470 "metadata": { 471 "slideshow": { 472 "slide_type": "slide" 473 } 474 }, 475 "outputs": [ 476 { 477 "name": "stdout", 478 "output_type": "stream", 479 "text": [ 480 "<map object at 0x106fd79e8>\n", 481 "Despues del continue\n", 482 "Despues del continue\n", 483 "Despues del continue\n", 484 "9\n" 485 ] 486 } 487 ], 488 "source": [ 489 "elements = map(lambda x: x **2, range(10))\n", 490 "print(elements)\n", 491 "n = 5\n", 492 "for element in elements:\n", 493 " if element > n:\n", 494 " print(element)\n", 495 " break\n", 496 " print(\"Despues del if \")\n", 497 "else:\n", 498 " print(f\"No hay un número mayor que {n}\")" 499 ] 500 }, 501 { 502 "cell_type": "markdown", 503 "metadata": { 504 "slideshow": { 505 "slide_type": "slide" 506 } 507 }, 508 "source": [ 509 "### Instrucción `pass`\n", 510 "\n", 511 "La instrucción `pass` no hace nada, y se usa para cuando necesitamos que un programa sea sintácticamente correcto pero no requiere ninguna acción.\n", 512 "\n", 513 "```python\n", 514 "while True:\n", 515 " pass # Espera infinita, hasta que se cancele la ejecución desde teclado (Ctrl + C)\n", 516 "```" 517 ] 518 }, 519 { 520 "cell_type": "markdown", 521 "metadata": { 522 "slideshow": { 523 "slide_type": "slide" 524 } 525 }, 526 "source": [ 527 "### Iteradores\n", 528 "\n", 529 "La mayoría de los contenedores y estructuras de datos que hemos visto hasta ahora pueden ser recorridas usando un bucle `for`.\n", 530 "\n", 531 "```python\n", 532 "for element in [1, 2, 3]:\n", 533 " print(element)\n", 534 "for element in (1, 2, 3):\n", 535 " print(element)\n", 536 "for key in {'one':1, 'two':2}:\n", 537 " print(key)\n", 538 "for char in \"123\":\n", 539 " print(char)\n", 540 "for line in open(\"myfile.txt\"):\n", 541 " print(line, end='')\n", 542 "```" 543 ] 544 }, 545 { 546 "cell_type": "markdown", 547 "metadata": { 548 "slideshow": { 549 "slide_type": "slide" 550 } 551 }, 552 "source": [ 553 "Cuando se ejecuta un bucle `for`, internamente se llama a la función `iter()` pasandole el contenedor. Esta función devuelve un objeto **iterador**." 554 ] 555 }, 556 { 557 "cell_type": "markdown", 558 "metadata": { 559 "slideshow": { 560 "slide_type": "slide" 561 } 562 }, 563 "source": [ 564 "#### Módulo `itertools`\n", 565 "\n", 566 "El módulo de `itertools` implementa una serie de constructores para crear iteradores, inspirados en lenguajes funcionales. Estandariza una serie de herramientas rápidas y eficientes en memoria que son útiles por si mismas o combinadas." 567 ] 568 }, 569 { 570 "cell_type": "markdown", 571 "metadata": { 572 "slideshow": { 573 "slide_type": "slide" 574 } 575 }, 576 "source": [ 577 "##### Iteradores infinitos\n", 578 "\n", 579 "Iterador | Argumentos | Resultado | Ejemplo\n", 580 "---------|------------|-----------|--------\n", 581 "count() | start, [step] | start, start+step, start+2\\*step, … | count(10) --> 10 11 12 13 14 ...\n", 582 "cycle() | p | p0, p1, … plast, p0, p1, … | cycle('ABCD') --> A B C D A B C D ...\n", 583 "repeat() | elem [,n] | elem, elem, elem, … sin fin o hasta n veces | repeat(10, 3) --> 10 10 10\n" 584 ] 585 }, 586 { 587 "cell_type": "code", 588 "execution_count": 13, 589 "metadata": { 590 "slideshow": { 591 "slide_type": "slide" 592 } 593 }, 594 "outputs": [ 595 { 596 "name": "stdout", 597 "output_type": "stream", 598 "text": [ 599 "5\n", 600 "8\n", 601 "11\n", 602 "14\n", 603 "17\n", 604 "20\n" 605 ] 606 } 607 ], 608 "source": [ 609 "from itertools import count\n", 610 "\n", 611 "\n", 612 "for value in count(5, 3):\n", 613 " print(value)\n", 614 " if value == 20:\n", 615 " break" 616 ] 617 }, 618 { 619 "cell_type": "code", 620 "execution_count": 1, 621 "metadata": { 622 "slideshow": { 623 "slide_type": "slide" 624 } 625 }, 626 "outputs": [ 627 { 628 "name": "stdout", 629 "output_type": "stream", 630 "text": [ 631 "P\n", 632 "y\n", 633 "t\n", 634 "h\n", 635 "o\n", 636 "n\n", 637 "P\n", 638 "y\n", 639 "t\n", 640 "h\n", 641 "o\n", 642 "n\n" 643 ] 644 } 645 ], 646 "source": [ 647 "from itertools import cycle\n", 648 "\n", 649 "\n", 650 "counter = 0 \n", 651 "for element in cycle(\"Python\"):\n", 652 " print(element)\n", 653 " counter += 1\n", 654 " if counter == 12: \n", 655 " break" 656 ] 657 }, 658 { 659 "cell_type": "code", 660 "execution_count": 1, 661 "metadata": { 662 "slideshow": { 663 "slide_type": "slide" 664 } 665 }, 666 "outputs": [], 667 "source": [ 668 "from itertools import repeat\n", 669 "\n", 670 "\n", 671 "for element in repeat(3, 5):\n", 672 " print(element)" 673 ] 674 }, 675 { 676 "cell_type": "markdown", 677 "metadata": { 678 "slideshow": { 679 "slide_type": "slide" 680 } 681 }, 682 "source": [ 683 "##### Iteradores que terminan en la secuencia de entrada más corta\n", 684 "\n", 685 "Iterador | Argumentos | Resultado | Ejemplo\n", 686 "---------|------------|-----------|--------\n", 687 "accumulate() | p [,func]|p0, p0+p1, p0+p1+p2, …|accumulate([1,2,3,4,5]) --> 1 3 6 10 15\n", 688 "chain() |p, q, …|p0, p1, … plast, q0, q1, … |chain('ABC', 'DEF') --> A B C D E F\n", 689 "chain.from_iterable() |iterable |p0, p1, … plast, q0, q1, … |chain.from_iterable(['ABC', 'DEF']) --> A B C D E F\n", 690 "compress() |data, selectors |(d[0] if s[0]), (d[1] if s[1]), … |compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F\n", 691 "dropwhile() |pred, seq |seq[n], seq[n+1], emezando cuando pred falle |dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1\n", 692 "filterfalse() |pred, seq |elementos de seq donde pred(elem) es False | filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8\n", 693 "groupby() |iterable[, key] |sub-iteradores agrupados por valor de key(v) |\n", 694 "islice() |seq, [start,] stop [, step] |elementos de seq[start:stop:step] |islice('ABCDEFG', 2, None) --> C D E F G\n", 695 "starmap() |func, seq |func(*seq[0]), func(*seq[1]), … |starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000\n", 696 "takewhile() | pred, seq |seq[0], seq[1], hasta que pred falla |takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4\n", 697 "tee() |it, n |it1, it2, … itn divide un iterador en n | \n", 698 "zip_longest() |p, q, … |(p[0], q[0]), (p[1], q[1]), … |zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-\n", 699 "\n" 700 ] 701 }, 702 { 703 "cell_type": "markdown", 704 "metadata": { 705 "slideshow": { 706 "slide_type": "slide" 707 } 708 }, 709 "source": [ 710 "##### Iteradores de combinatoria\n", 711 "\n", 712 "Iterador | Argumentos | Resultado | Ejemplo\n", 713 "---------|------------|-----------|--------\n", 714 "product() |p, q, … [repeat=1] | producto cartesianso, equivalente a un bucle for anidado | product('ABCD', repeat=2) --> AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD\n", 715 "permutations() |p[, r] |tuplas de longitud r, con todos los ordenes posibles, sin elementos repetidos | permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC\n", 716 "combinations() |p, r | tuplas de longitud r, ordenadas, sin elementos repetidos | combinations('ABCD', 2) --> AB AC AD BC BD CD\n", 717 "combinations_with_replacement()|p, r|tuplas de longitud r, ordenadas, con elementos repetidos | combinations_with_replacement('ABCD', 2) --> AA AB AC AD BB BC BD CC CD DD\n" 718 ] 719 } 720 ], 721 "metadata": { 722 "celltoolbar": "Slideshow", 723 "kernelspec": { 724 "display_name": "Python 3", 725 "language": "python", 726 "name": "python3" 727 }, 728 "language_info": { 729 "codemirror_mode": { 730 "name": "ipython", 731 "version": 3 732 }, 733 "file_extension": ".py", 734 "mimetype": "text/x-python", 735 "name": "python", 736 "nbconvert_exporter": "python", 737 "pygments_lexer": "ipython3", 738 "version": "3.7.1" 739 } 740 }, 741 "nbformat": 4, 742 "nbformat_minor": 2 743}