├── .gitignore ├── 01_variaveis_e_tipos.ipynb ├── 02_funcoes.ipynb ├── 03_condicionais.ipynb ├── 04_loops.ipynb ├── 05_lists.ipynb ├── 06_strings.ipynb ├── 07_tuplas.ipynb ├── 08_dicionarios.ipynb ├── 09_bibliotecas_externas.ipynb ├── README.md ├── codigos_base ├── 01_variaveis_e_tipos.ipynb ├── 02_funcoes.ipynb ├── 03_condicionais.ipynb ├── 04_loops.ipynb ├── 05_lists.ipynb ├── 06_strings.ipynb ├── 07_tuplas.ipynb ├── 08_dicionarios.ipynb └── 09_bibliotecas_externas.ipynb ├── hello_world.py └── imagens └── exemplo_lista_indices.png /.gitignore: -------------------------------------------------------------------------------- 1 | preparacao -------------------------------------------------------------------------------- /01_variaveis_e_tipos.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding
\n", 10 | "\n", 11 | "Neste tutorial, vamos aprender os conceitos básicos para desenvolvermos nossos primeiros programas em Python!
\n", 12 | "Boa parte dos exemplos deste tutorial é inspirado no [curso de Python do Kaggle](https://www.kaggle.com/learn/python).

\n", 13 | "\n", 14 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "data": { 24 | "text/html": [ 25 | "\n" 28 | ], 29 | "text/plain": [ 30 | "" 31 | ] 32 | }, 33 | "metadata": {}, 34 | "output_type": "display_data" 35 | } 36 | ], 37 | "source": [ 38 | "%%html\n", 39 | "" 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "## Variáveis\n", 49 | "\n", 50 | "### Tipos\n", 51 | "Python tem diferentes tipos de dados, mas no fundo, *tudo é um objeto*.
\n", 52 | "Variáveis podem ser definidas em qualquer lugar.\n", 53 | "\n", 54 | "Veja alguns tipos:\n", 55 | "\n", 56 | "| Tipo | Exemplo |\n", 57 | "|---------|-------------------|\n", 58 | "| Integer | 1 10 -4 |\n", 59 | "| Float | 1.0 -0.223 3.1415 |\n", 60 | "| String | \"Hello world\" |" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "## Instanciando variáveis" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 9, 73 | "metadata": {}, 74 | "outputs": [], 75 | "source": [ 76 | "nome = 'Luke skywalker'\n", 77 | "idade = 18\n", 78 | "peso = 70.5" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 10, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "data": { 88 | "text/plain": [ 89 | "'Luke skywalker'" 90 | ] 91 | }, 92 | "execution_count": 10, 93 | "metadata": {}, 94 | "output_type": "execute_result" 95 | } 96 | ], 97 | "source": [ 98 | "nome" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": 11, 104 | "metadata": {}, 105 | "outputs": [ 106 | { 107 | "data": { 108 | "text/plain": [ 109 | "18" 110 | ] 111 | }, 112 | "execution_count": 11, 113 | "metadata": {}, 114 | "output_type": "execute_result" 115 | } 116 | ], 117 | "source": [ 118 | "idade" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 12, 124 | "metadata": {}, 125 | "outputs": [ 126 | { 127 | "data": { 128 | "text/plain": [ 129 | "70.5" 130 | ] 131 | }, 132 | "execution_count": 12, 133 | "metadata": {}, 134 | "output_type": "execute_result" 135 | } 136 | ], 137 | "source": [ 138 | "peso" 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": 14, 144 | "metadata": {}, 145 | "outputs": [ 146 | { 147 | "name": "stdout", 148 | "output_type": "stream", 149 | "text": [ 150 | "Luke skywalker\n" 151 | ] 152 | } 153 | ], 154 | "source": [ 155 | "print(nome)" 156 | ] 157 | }, 158 | { 159 | "cell_type": "raw", 160 | "metadata": {}, 161 | "source": [ 162 | "print(nome, idade, peso)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "markdown", 167 | "metadata": {}, 168 | "source": [ 169 | "### Type()\n", 170 | "Use a função type() para descobrir o tipo de uma variável." 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 16, 176 | "metadata": {}, 177 | "outputs": [ 178 | { 179 | "data": { 180 | "text/plain": [ 181 | "str" 182 | ] 183 | }, 184 | "execution_count": 16, 185 | "metadata": {}, 186 | "output_type": "execute_result" 187 | } 188 | ], 189 | "source": [ 190 | "type(nome)" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 17, 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "data": { 200 | "text/plain": [ 201 | "int" 202 | ] 203 | }, 204 | "execution_count": 17, 205 | "metadata": {}, 206 | "output_type": "execute_result" 207 | } 208 | ], 209 | "source": [ 210 | "type(idade)" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": 18, 216 | "metadata": {}, 217 | "outputs": [ 218 | { 219 | "data": { 220 | "text/plain": [ 221 | "float" 222 | ] 223 | }, 224 | "execution_count": 18, 225 | "metadata": {}, 226 | "output_type": "execute_result" 227 | } 228 | ], 229 | "source": [ 230 | "type(peso)" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 19, 236 | "metadata": {}, 237 | "outputs": [ 238 | { 239 | "data": { 240 | "text/plain": [ 241 | "float" 242 | ] 243 | }, 244 | "execution_count": 19, 245 | "metadata": {}, 246 | "output_type": "execute_result" 247 | } 248 | ], 249 | "source": [ 250 | "type(10.0)" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 20, 256 | "metadata": {}, 257 | "outputs": [ 258 | { 259 | "data": { 260 | "text/plain": [ 261 | "int" 262 | ] 263 | }, 264 | "execution_count": 20, 265 | "metadata": {}, 266 | "output_type": "execute_result" 267 | } 268 | ], 269 | "source": [ 270 | "type(10)" 271 | ] 272 | }, 273 | { 274 | "cell_type": "markdown", 275 | "metadata": {}, 276 | "source": [ 277 | "### Dir()\n", 278 | "Use a função dir() para descobrir **todos os métodos** associados a um objeto:" 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "execution_count": 22, 284 | "metadata": {}, 285 | "outputs": [ 286 | { 287 | "data": { 288 | "text/plain": [ 289 | "['__add__',\n", 290 | " '__class__',\n", 291 | " '__contains__',\n", 292 | " '__delattr__',\n", 293 | " '__dir__',\n", 294 | " '__doc__',\n", 295 | " '__eq__',\n", 296 | " '__format__',\n", 297 | " '__ge__',\n", 298 | " '__getattribute__',\n", 299 | " '__getitem__',\n", 300 | " '__getnewargs__',\n", 301 | " '__gt__',\n", 302 | " '__hash__',\n", 303 | " '__init__',\n", 304 | " '__init_subclass__',\n", 305 | " '__iter__',\n", 306 | " '__le__',\n", 307 | " '__len__',\n", 308 | " '__lt__',\n", 309 | " '__mod__',\n", 310 | " '__mul__',\n", 311 | " '__ne__',\n", 312 | " '__new__',\n", 313 | " '__reduce__',\n", 314 | " '__reduce_ex__',\n", 315 | " '__repr__',\n", 316 | " '__rmod__',\n", 317 | " '__rmul__',\n", 318 | " '__setattr__',\n", 319 | " '__sizeof__',\n", 320 | " '__str__',\n", 321 | " '__subclasshook__',\n", 322 | " 'capitalize',\n", 323 | " 'casefold',\n", 324 | " 'center',\n", 325 | " 'count',\n", 326 | " 'encode',\n", 327 | " 'endswith',\n", 328 | " 'expandtabs',\n", 329 | " 'find',\n", 330 | " 'format',\n", 331 | " 'format_map',\n", 332 | " 'index',\n", 333 | " 'isalnum',\n", 334 | " 'isalpha',\n", 335 | " 'isascii',\n", 336 | " 'isdecimal',\n", 337 | " 'isdigit',\n", 338 | " 'isidentifier',\n", 339 | " 'islower',\n", 340 | " 'isnumeric',\n", 341 | " 'isprintable',\n", 342 | " 'isspace',\n", 343 | " 'istitle',\n", 344 | " 'isupper',\n", 345 | " 'join',\n", 346 | " 'ljust',\n", 347 | " 'lower',\n", 348 | " 'lstrip',\n", 349 | " 'maketrans',\n", 350 | " 'partition',\n", 351 | " 'replace',\n", 352 | " 'rfind',\n", 353 | " 'rindex',\n", 354 | " 'rjust',\n", 355 | " 'rpartition',\n", 356 | " 'rsplit',\n", 357 | " 'rstrip',\n", 358 | " 'split',\n", 359 | " 'splitlines',\n", 360 | " 'startswith',\n", 361 | " 'strip',\n", 362 | " 'swapcase',\n", 363 | " 'title',\n", 364 | " 'translate',\n", 365 | " 'upper',\n", 366 | " 'zfill']" 367 | ] 368 | }, 369 | "execution_count": 22, 370 | "metadata": {}, 371 | "output_type": "execute_result" 372 | } 373 | ], 374 | "source": [ 375 | "dir(nome)" 376 | ] 377 | }, 378 | { 379 | "cell_type": "markdown", 380 | "metadata": {}, 381 | "source": [ 382 | "### Usando métodos\n", 383 | "Métodos podem ser acessados usando: objeto.metodo" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": 25, 389 | "metadata": {}, 390 | "outputs": [ 391 | { 392 | "data": { 393 | "text/plain": [ 394 | "'Luke skywalker'" 395 | ] 396 | }, 397 | "execution_count": 25, 398 | "metadata": {}, 399 | "output_type": "execute_result" 400 | } 401 | ], 402 | "source": [ 403 | "nome" 404 | ] 405 | }, 406 | { 407 | "cell_type": "code", 408 | "execution_count": 26, 409 | "metadata": {}, 410 | "outputs": [ 411 | { 412 | "data": { 413 | "text/plain": [ 414 | "'LUKE SKYWALKER'" 415 | ] 416 | }, 417 | "execution_count": 26, 418 | "metadata": {}, 419 | "output_type": "execute_result" 420 | } 421 | ], 422 | "source": [ 423 | "nome.upper()" 424 | ] 425 | }, 426 | { 427 | "cell_type": "markdown", 428 | "metadata": {}, 429 | "source": [ 430 | "### Atribuição Múltipla" 431 | ] 432 | }, 433 | { 434 | "cell_type": "code", 435 | "execution_count": 27, 436 | "metadata": {}, 437 | "outputs": [], 438 | "source": [ 439 | "nome, idade, peso = 'Yoda', 1000, 10.5" 440 | ] 441 | }, 442 | { 443 | "cell_type": "code", 444 | "execution_count": 28, 445 | "metadata": {}, 446 | "outputs": [ 447 | { 448 | "name": "stdout", 449 | "output_type": "stream", 450 | "text": [ 451 | "Yoda 1000 10.5\n" 452 | ] 453 | } 454 | ], 455 | "source": [ 456 | "print(nome, idade, peso)" 457 | ] 458 | }, 459 | { 460 | "cell_type": "markdown", 461 | "metadata": {}, 462 | "source": [ 463 | "### Python é uma linguagem *case-sensitive*" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 29, 469 | "metadata": {}, 470 | "outputs": [ 471 | { 472 | "name": "stdout", 473 | "output_type": "stream", 474 | "text": [ 475 | "15\n" 476 | ] 477 | } 478 | ], 479 | "source": [ 480 | "a = 10\n", 481 | "b = 5\n", 482 | "c = a + b\n", 483 | "print(c)" 484 | ] 485 | }, 486 | { 487 | "cell_type": "code", 488 | "execution_count": 30, 489 | "metadata": {}, 490 | "outputs": [ 491 | { 492 | "name": "stdout", 493 | "output_type": "stream", 494 | "text": [ 495 | "11\n" 496 | ] 497 | } 498 | ], 499 | "source": [ 500 | "B = 1\n", 501 | "d = a + B\n", 502 | "print(d)" 503 | ] 504 | }, 505 | { 506 | "cell_type": "markdown", 507 | "metadata": {}, 508 | "source": [ 509 | "### Dinamicamente e Fortemente tipada\n", 510 | "\n", 511 | "**Dinamicamente:** o tipo é definido no momento da atribuição
\n", 512 | "**Fortemente:** o interpretador não muda o tipo de uma variável inesperadamente" 513 | ] 514 | }, 515 | { 516 | "cell_type": "code", 517 | "execution_count": 34, 518 | "metadata": {}, 519 | "outputs": [ 520 | { 521 | "data": { 522 | "text/plain": [ 523 | "10" 524 | ] 525 | }, 526 | "execution_count": 34, 527 | "metadata": {}, 528 | "output_type": "execute_result" 529 | } 530 | ], 531 | "source": [ 532 | "a" 533 | ] 534 | }, 535 | { 536 | "cell_type": "code", 537 | "execution_count": 36, 538 | "metadata": {}, 539 | "outputs": [ 540 | { 541 | "name": "stdout", 542 | "output_type": "stream", 543 | "text": [ 544 | "\n", 545 | "\n" 546 | ] 547 | } 548 | ], 549 | "source": [ 550 | "print(type(a))\n", 551 | "\n", 552 | "a = '10'\n", 553 | "print(type(a))" 554 | ] 555 | }, 556 | { 557 | "cell_type": "code", 558 | "execution_count": 38, 559 | "metadata": {}, 560 | "outputs": [ 561 | { 562 | "ename": "TypeError", 563 | "evalue": "can only concatenate str (not \"int\") to str", 564 | "output_type": "error", 565 | "traceback": [ 566 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 567 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 568 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 569 | "\u001b[0;31mTypeError\u001b[0m: can only concatenate str (not \"int\") to str" 570 | ] 571 | } 572 | ], 573 | "source": [ 574 | "c = a + b" 575 | ] 576 | }, 577 | { 578 | "cell_type": "code", 579 | "execution_count": 39, 580 | "metadata": {}, 581 | "outputs": [ 582 | { 583 | "data": { 584 | "text/plain": [ 585 | "'Luke Skywalker'" 586 | ] 587 | }, 588 | "execution_count": 39, 589 | "metadata": {}, 590 | "output_type": "execute_result" 591 | } 592 | ], 593 | "source": [ 594 | "'Luke ' + 'Skywalker'" 595 | ] 596 | }, 597 | { 598 | "cell_type": "markdown", 599 | "metadata": {}, 600 | "source": [ 601 | "### Conversão de Tipos (*Casting*)" 602 | ] 603 | }, 604 | { 605 | "cell_type": "code", 606 | "execution_count": 40, 607 | "metadata": {}, 608 | "outputs": [ 609 | { 610 | "data": { 611 | "text/plain": [ 612 | "'10'" 613 | ] 614 | }, 615 | "execution_count": 40, 616 | "metadata": {}, 617 | "output_type": "execute_result" 618 | } 619 | ], 620 | "source": [ 621 | "a" 622 | ] 623 | }, 624 | { 625 | "cell_type": "code", 626 | "execution_count": 41, 627 | "metadata": {}, 628 | "outputs": [ 629 | { 630 | "data": { 631 | "text/plain": [ 632 | "5" 633 | ] 634 | }, 635 | "execution_count": 41, 636 | "metadata": {}, 637 | "output_type": "execute_result" 638 | } 639 | ], 640 | "source": [ 641 | "b" 642 | ] 643 | }, 644 | { 645 | "cell_type": "code", 646 | "execution_count": 43, 647 | "metadata": {}, 648 | "outputs": [ 649 | { 650 | "name": "stdout", 651 | "output_type": "stream", 652 | "text": [ 653 | "15\n" 654 | ] 655 | } 656 | ], 657 | "source": [ 658 | "# a função retorna uma cópia convertida do que foi passado pra ela, ou seja, ela não altera\n", 659 | "# a variável (ou valor) que foi passado pra ela\n", 660 | "c = int(a) + b\n", 661 | "print(c)" 662 | ] 663 | }, 664 | { 665 | "cell_type": "code", 666 | "execution_count": 44, 667 | "metadata": {}, 668 | "outputs": [ 669 | { 670 | "data": { 671 | "text/plain": [ 672 | "'10'" 673 | ] 674 | }, 675 | "execution_count": 44, 676 | "metadata": {}, 677 | "output_type": "execute_result" 678 | } 679 | ], 680 | "source": [ 681 | "a" 682 | ] 683 | }, 684 | { 685 | "cell_type": "markdown", 686 | "metadata": {}, 687 | "source": [ 688 | "### Operadores Aritméticos\n", 689 | "\n", 690 | "| Operador | Nome | Descrição |\n", 691 | "|--------------|----------------------|--------------------------------------------------------------------------------------|\n", 692 | "| ``a + b`` | Adição | Soma de ``a`` e ``b`` |\n", 693 | "| ``a - b`` | Subtração | Diferença de ``a`` e ``b`` |\n", 694 | "| ``a * b`` | Multiplicação | Produto de ``a`` e ``b`` |\n", 695 | "| ``a / b`` | Divisão 'verdadeira' | Quociente de ``a`` e ``b`` |\n", 696 | "| ``a // b`` | Piso da Divisão | Quociente de ``a`` e ``b``, removendo partes fracionadas (arredondamento para baixo) |\n", 697 | "| ``a % b`` | Módulo | Resto da divisão de a ``a`` por ``b`` |\n", 698 | "| ``a ** b`` | Exponenciação | ``a`` elevado a ``b`` |\n", 699 | "| ``-a`` | Negação | Negativo de ``a`` |" 700 | ] 701 | }, 702 | { 703 | "cell_type": "code", 704 | "execution_count": 46, 705 | "metadata": {}, 706 | "outputs": [ 707 | { 708 | "name": "stdout", 709 | "output_type": "stream", 710 | "text": [ 711 | "2.5\n", 712 | "3.0\n", 713 | "3.0\n" 714 | ] 715 | } 716 | ], 717 | "source": [ 718 | "# Divisão 'verdadeira'\n", 719 | "print(5 / 2)\n", 720 | "print(6 / 2)\n", 721 | "print(6 / 2.0)" 722 | ] 723 | }, 724 | { 725 | "cell_type": "code", 726 | "execution_count": 48, 727 | "metadata": {}, 728 | "outputs": [ 729 | { 730 | "name": "stdout", 731 | "output_type": "stream", 732 | "text": [ 733 | "2\n", 734 | "2.0\n", 735 | "3\n", 736 | "3.0\n" 737 | ] 738 | } 739 | ], 740 | "source": [ 741 | "# Piso da divisão - ignora os decimais do resultado\n", 742 | "print(5 // 2)\n", 743 | "print(5 // 2.0)\n", 744 | "print(6 // 2)\n", 745 | "print(6 // 2.0)" 746 | ] 747 | }, 748 | { 749 | "cell_type": "markdown", 750 | "metadata": {}, 751 | "source": [ 752 | "### A função print()\n", 753 | "A função _print()_ imprime uma string na tela/console.
\n", 754 | "Uma string pode ser definida com **aspas simples ''** ou **aspas duplas \"\"**.\n", 755 | "\n", 756 | "Por convenção, a comunidade usa **aspas simples ''**" 757 | ] 758 | }, 759 | { 760 | "cell_type": "code", 761 | "execution_count": 49, 762 | "metadata": {}, 763 | "outputs": [ 764 | { 765 | "name": "stdout", 766 | "output_type": "stream", 767 | "text": [ 768 | "Imprimindo com aspas simples!\n", 769 | "Imprimindo com aspas duplas!\n" 770 | ] 771 | } 772 | ], 773 | "source": [ 774 | "print('Imprimindo com aspas simples!')\n", 775 | "print(\"Imprimindo com aspas duplas!\")" 776 | ] 777 | }, 778 | { 779 | "cell_type": "markdown", 780 | "metadata": {}, 781 | "source": [ 782 | "
Para imprimir valores de _variáveis_ junto com uma _string/texto_, utilize a letra **_f_** antes das primeiras aspas, e coloque a variável entre **_{}_** (Python 3.6+):" 783 | ] 784 | }, 785 | { 786 | "cell_type": "code", 787 | "execution_count": 50, 788 | "metadata": {}, 789 | "outputs": [ 790 | { 791 | "data": { 792 | "text/plain": [ 793 | "('Yoda', 1000, 10.5)" 794 | ] 795 | }, 796 | "execution_count": 50, 797 | "metadata": {}, 798 | "output_type": "execute_result" 799 | } 800 | ], 801 | "source": [ 802 | "nome, idade, peso" 803 | ] 804 | }, 805 | { 806 | "cell_type": "code", 807 | "execution_count": 51, 808 | "metadata": {}, 809 | "outputs": [ 810 | { 811 | "name": "stdout", 812 | "output_type": "stream", 813 | "text": [ 814 | "Meu nome eh Yoda\n", 815 | "Tenho 1000 anos\n", 816 | "Peso 10.5 kg\n" 817 | ] 818 | } 819 | ], 820 | "source": [ 821 | "print(f'Meu nome eh {r}')\n", 822 | "print(f'Tenho {idade} anos')\n", 823 | "print(f'Peso {peso} kg')" 824 | ] 825 | }, 826 | { 827 | "cell_type": "code", 828 | "execution_count": 52, 829 | "metadata": {}, 830 | "outputs": [ 831 | { 832 | "name": "stdout", 833 | "output_type": "stream", 834 | "text": [ 835 | "Meu nome eh Yoda\n", 836 | "Tenho 1000 anos\n", 837 | "Peso 10.5 kg\n" 838 | ] 839 | } 840 | ], 841 | "source": [ 842 | "print(f'Meu nome eh {nome}\\nTenho {idade} anos\\nPeso {peso} kg')" 843 | ] 844 | }, 845 | { 846 | "cell_type": "markdown", 847 | "metadata": {}, 848 | "source": [ 849 | "
\n", 850 | "Alternativa, temos outras formas de impressão vindas de versões mais antigas do Python, porém ainda válidas:" 851 | ] 852 | }, 853 | { 854 | "cell_type": "code", 855 | "execution_count": 57, 856 | "metadata": {}, 857 | "outputs": [ 858 | { 859 | "name": "stdout", 860 | "output_type": "stream", 861 | "text": [ 862 | "Meu nome eh Yoda\n", 863 | "Tenho 1000 anos\n", 864 | "Peso 10.5 kg\n", 865 | "\n", 866 | "Meu nome eh Yoda\n", 867 | "Tenho 1000 anos\n", 868 | "Peso 10.5 kg\n" 869 | ] 870 | } 871 | ], 872 | "source": [ 873 | "# usando .format\n", 874 | "print('Meu nome eh {}'.format(nome))\n", 875 | "print('Tenho {} anos'.format(idade))\n", 876 | "print('Peso {} kg\\n'.format(peso))\n", 877 | "\n", 878 | "print('Meu nome eh {0}\\nTenho {1} anos\\nPeso {2} kg'.format(nome, idade, peso))" 879 | ] 880 | }, 881 | { 882 | "cell_type": "code", 883 | "execution_count": 59, 884 | "metadata": {}, 885 | "outputs": [ 886 | { 887 | "name": "stdout", 888 | "output_type": "stream", 889 | "text": [ 890 | "Meu nome eh Yoda\n", 891 | "Tenho 1000 anos\n", 892 | "Peso 10.500000 kg\n", 893 | "\n", 894 | "Meu nome eh Yoda\n", 895 | "Tenho 1000 anos\n", 896 | "Peso 10.500000 kg\n" 897 | ] 898 | } 899 | ], 900 | "source": [ 901 | "# usando % (é o jeito mais próximo de C)\n", 902 | "print('Meu nome eh %s' % nome)\n", 903 | "print('Tenho %d anos' % idade)\n", 904 | "print('Peso %f kg\\n' % peso)\n", 905 | "\n", 906 | "print('Meu nome eh %s\\nTenho %d anos\\nPeso %f kg' % (nome, idade, peso))" 907 | ] 908 | } 909 | ], 910 | "metadata": { 911 | "kernelspec": { 912 | "display_name": "Python 3", 913 | "language": "python", 914 | "name": "python3" 915 | }, 916 | "language_info": { 917 | "codemirror_mode": { 918 | "name": "ipython", 919 | "version": 3 920 | }, 921 | "file_extension": ".py", 922 | "mimetype": "text/x-python", 923 | "name": "python", 924 | "nbconvert_exporter": "python", 925 | "pygments_lexer": "ipython3", 926 | "version": "3.8.5" 927 | } 928 | }, 929 | "nbformat": 4, 930 | "nbformat_minor": 4 931 | } 932 | -------------------------------------------------------------------------------- /02_funcoes.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Funções\n", 19 | "\n", 20 | "### Esqueleto de uma função em python:\n", 21 | "\n", 22 | "def functionName(param1, param2, param3=val):\n", 23 | " instruction 01\n", 24 | " instruction 02\n", 25 | " return X\n", 26 | "" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "### Funções podem NÃO ter retorno" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 2, 39 | "metadata": {}, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Imprimindo a variavel x\n", 46 | "10\n", 47 | "\n", 48 | "Imprimindo a variavel x\n", 49 | "Darth Vader\n", 50 | "\n" 51 | ] 52 | } 53 | ], 54 | "source": [ 55 | "def print_parametro(x):\n", 56 | " print('Imprimindo a variavel x')\n", 57 | " print(x)\n", 58 | " print('')\n", 59 | "\n", 60 | "a = 10\n", 61 | "print_parametro(a)\n", 62 | "\n", 63 | "nome = 'Darth Vader'\n", 64 | "print_parametro(nome)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "metadata": {}, 70 | "source": [ 71 | "### Funções podem ter retorno" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 7, 77 | "metadata": {}, 78 | "outputs": [ 79 | { 80 | "name": "stdout", 81 | "output_type": "stream", 82 | "text": [ 83 | "30\n" 84 | ] 85 | } 86 | ], 87 | "source": [ 88 | "def soma(x, y):\n", 89 | " return x + y\n", 90 | "\n", 91 | "a = 10\n", 92 | "b = 20\n", 93 | "c = soma(a, b)\n", 94 | "\n", 95 | "print(c)" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 8, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "data": { 105 | "text/plain": [ 106 | "function" 107 | ] 108 | }, 109 | "execution_count": 8, 110 | "metadata": {}, 111 | "output_type": "execute_result" 112 | } 113 | ], 114 | "source": [ 115 | "type(soma)" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": {}, 121 | "source": [ 122 | "### Funções podem ter múltiplos retornos" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 11, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "\n", 135 | "10 + 20 = 30\n", 136 | "10 - 20 = -10\n" 137 | ] 138 | } 139 | ], 140 | "source": [ 141 | "def soma_e_subtracao(x, y):\n", 142 | " soma = x + y\n", 143 | " sub = x - y\n", 144 | " print(type(soma))\n", 145 | " \n", 146 | " return soma, sub\n", 147 | "\n", 148 | "a = 10\n", 149 | "b = 20\n", 150 | "\n", 151 | "soma_ab, sub_ab = soma_e_subtracao(a, b)\n", 152 | "print(f'{a} + {b} = {soma_ab}\\n{a} - {b} = {sub_ab}')" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 12, 158 | "metadata": {}, 159 | "outputs": [ 160 | { 161 | "data": { 162 | "text/plain": [ 163 | "function" 164 | ] 165 | }, 166 | "execution_count": 12, 167 | "metadata": {}, 168 | "output_type": "execute_result" 169 | } 170 | ], 171 | "source": [ 172 | "type(soma)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "### Escopo\n", 180 | "Todo **escopo** em Python (funções, loops, condicionais, classes, etc...) usam *dois pontos (:)* e *identação*:\n", 181 | "Os **dois pontos (:)** servem para _\"abrir\"_ o escopo, e _cada instrução_ dentro do escopo devem ser **identadas** à direita.\n", 182 | "\n", 183 | "Convenciona-se usar *espaços* ao invés de *tabs* para a **identação**. Todas as instruções do escopo **devem ter a mesma identação** (p. ex, a mesma quantidade de espaços)." 184 | ] 185 | }, 186 | { 187 | "cell_type": "markdown", 188 | "metadata": {}, 189 | "source": [ 190 | "\n", 191 | "def functionName(param1, param2, param3=val):\n", 192 | " instruction 01 # 4 espaços de identação\n", 193 | " instruction 02 # 4 espaços de identação\n", 194 | " return X # 4 espaços de identação\n", 195 | "" 196 | ] 197 | }, 198 | { 199 | "cell_type": "markdown", 200 | "metadata": {}, 201 | "source": [ 202 | "### Funções com parâmetros default (opcionais)" 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": {}, 208 | "source": [ 209 | "Os parâmetros opcionais (ou seja, com valores _default_) devem sempre serem **os últimos parâmetros da função**." 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 16, 215 | "metadata": {}, 216 | "outputs": [], 217 | "source": [ 218 | "def cadastrar_usuario(sistema, login='user', senha='123'):\n", 219 | " print(f'Cadastro de usuários no sistema {sistema}')\n", 220 | " print(f'login: {login}')\n", 221 | " print(f'senha: {senha}')" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": 17, 227 | "metadata": {}, 228 | "outputs": [ 229 | { 230 | "name": "stdout", 231 | "output_type": "stream", 232 | "text": [ 233 | "Cadastro de usuários no sistema Google\n", 234 | "login: samuka\n", 235 | "senha: python_essencial_senha\n" 236 | ] 237 | } 238 | ], 239 | "source": [ 240 | "sistema_1 = 'Google'\n", 241 | "login_1 = 'samuka'\n", 242 | "senha_1 = 'python_essencial_senha'\n", 243 | "\n", 244 | "cadastrar_usuario(sistema_1, login_1, senha_1)" 245 | ] 246 | }, 247 | { 248 | "cell_type": "markdown", 249 | "metadata": {}, 250 | "source": [ 251 | "
\n", 252 | "Caso o parâmetro não seja chamado, seu valor default é usado." 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 18, 258 | "metadata": {}, 259 | "outputs": [ 260 | { 261 | "name": "stdout", 262 | "output_type": "stream", 263 | "text": [ 264 | "Cadastro de usuários no sistema Facebook\n", 265 | "login: ze\n", 266 | "senha: 123\n" 267 | ] 268 | } 269 | ], 270 | "source": [ 271 | "sistema_2 = 'Facebook'\n", 272 | "login_2 = 'ze'\n", 273 | "\n", 274 | "cadastrar_usuario(sistema_2, login_2)" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": 19, 280 | "metadata": {}, 281 | "outputs": [ 282 | { 283 | "name": "stdout", 284 | "output_type": "stream", 285 | "text": [ 286 | "Cadastro de usuários no sistema GitHub\n", 287 | "login: user\n", 288 | "senha: 123\n" 289 | ] 290 | } 291 | ], 292 | "source": [ 293 | "cadastrar_usuario('GitHub')" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 22, 299 | "metadata": {}, 300 | "outputs": [ 301 | { 302 | "ename": "SyntaxError", 303 | "evalue": "non-default argument follows default argument (, line 3)", 304 | "output_type": "error", 305 | "traceback": [ 306 | "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m def login_no_sistema(login='user', senha):\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m non-default argument follows default argument\n" 307 | ] 308 | } 309 | ], 310 | "source": [ 311 | "#### NÃO FUNCIONA pq o argumento/parâmetro com valor default (padrão), login, não está\n", 312 | "# no final dos argumentos da função\n", 313 | "def login_no_sistema(login='user', senha):\n", 314 | " print(f'login: {login}')\n", 315 | " print(f'senha: {senha}')" 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": {}, 321 | "source": [ 322 | "### Parâmetros Nomeados\n", 323 | "Ao chamar uma função, podemos passar seus parâmetros em qualquer ordem. Basta que informemos o nome do argumento/parâmetro da função." 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 23, 329 | "metadata": {}, 330 | "outputs": [ 331 | { 332 | "name": "stdout", 333 | "output_type": "stream", 334 | "text": [ 335 | "Cadastro de usuários no sistema YouTube\n", 336 | "login: user\n", 337 | "senha: abcdef\n" 338 | ] 339 | } 340 | ], 341 | "source": [ 342 | "cadastrar_usuario(senha='abcdef', sistema='YouTube')" 343 | ] 344 | }, 345 | { 346 | "cell_type": "markdown", 347 | "metadata": {}, 348 | "source": [ 349 | "### Function Annotations (PEP 3107)\n", 350 | "Há a possibilidade de **indicar** o tipo de parâmetros e o tipo de retorno de funções em Python.
\n", 351 | "Isso se chama _function annotation_.\n", 352 | "\n", 353 | "Os tipos indicados **apenas** servem como indicativo ao programador dos tipos de dados esperados.
\n", 354 | "Algumas bibliotecas externas também podem interpretar tais \"metas anotações\" para algum propósito.\n", 355 | "\n", 356 | "Portanto, o interpretador python **NÃO** leva essas anotações de tipos em consideração durante sua execução." 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": 24, 362 | "metadata": {}, 363 | "outputs": [], 364 | "source": [ 365 | "def soma_de_inteiros(x: int, y: int) -> int:\n", 366 | " return x + y" 367 | ] 368 | }, 369 | { 370 | "cell_type": "code", 371 | "execution_count": 25, 372 | "metadata": {}, 373 | "outputs": [ 374 | { 375 | "data": { 376 | "text/plain": [ 377 | "30" 378 | ] 379 | }, 380 | "execution_count": 25, 381 | "metadata": {}, 382 | "output_type": "execute_result" 383 | } 384 | ], 385 | "source": [ 386 | "soma_de_inteiros(10, 20)" 387 | ] 388 | }, 389 | { 390 | "cell_type": "markdown", 391 | "metadata": {}, 392 | "source": [ 393 | "Parâmetros de outros tipos são aceitos e processados normalmente." 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "execution_count": 27, 399 | "metadata": {}, 400 | "outputs": [ 401 | { 402 | "data": { 403 | "text/plain": [ 404 | "4.5" 405 | ] 406 | }, 407 | "execution_count": 27, 408 | "metadata": {}, 409 | "output_type": "execute_result" 410 | } 411 | ], 412 | "source": [ 413 | "soma_de_inteiros(1.5, 3)" 414 | ] 415 | }, 416 | { 417 | "cell_type": "markdown", 418 | "metadata": {}, 419 | "source": [ 420 | "### Comentários e Docstring\n", 421 | "Em Python, comentários são definidos de duas maneiras:\n", 422 | "\n", 423 | "1. Utilizando # (comentário de uma linha só)" 424 | ] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "execution_count": 10, 429 | "metadata": {}, 430 | "outputs": [], 431 | "source": [ 432 | "# este é um comentário de uma linha só" 433 | ] 434 | }, 435 | { 436 | "cell_type": "markdown", 437 | "metadata": {}, 438 | "source": [ 439 | "2. Usando _Docstrings_ (múltiplas linhas)" 440 | ] 441 | }, 442 | { 443 | "cell_type": "code", 444 | "execution_count": 11, 445 | "metadata": {}, 446 | "outputs": [ 447 | { 448 | "data": { 449 | "text/plain": [ 450 | "'Este é um comentário\\nde múltiplas\\nlinhas'" 451 | ] 452 | }, 453 | "execution_count": 11, 454 | "metadata": {}, 455 | "output_type": "execute_result" 456 | } 457 | ], 458 | "source": [ 459 | "'''Este é um comentário\n", 460 | "de múltiplas\n", 461 | "linhas'''\n" 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "execution_count": 12, 467 | "metadata": {}, 468 | "outputs": [ 469 | { 470 | "data": { 471 | "text/plain": [ 472 | "'Este é outro comentário\\nde múltiplas\\nlinhas'" 473 | ] 474 | }, 475 | "execution_count": 12, 476 | "metadata": {}, 477 | "output_type": "execute_result" 478 | } 479 | ], 480 | "source": [ 481 | "\"\"\"Este é outro comentário\n", 482 | "de múltiplas\n", 483 | "linhas\"\"\"" 484 | ] 485 | }, 486 | { 487 | "cell_type": "markdown", 488 | "metadata": {}, 489 | "source": [ 490 | "
\n", 491 | "Docstrings podem ser usados para documentar funções:" 492 | ] 493 | }, 494 | { 495 | "cell_type": "code", 496 | "execution_count": 28, 497 | "metadata": {}, 498 | "outputs": [ 499 | { 500 | "name": "stdout", 501 | "output_type": "stream", 502 | "text": [ 503 | "Help on class type in module builtins:\n", 504 | "\n", 505 | "class type(object)\n", 506 | " | type(object_or_name, bases, dict)\n", 507 | " | type(object) -> the object's type\n", 508 | " | type(name, bases, dict) -> a new type\n", 509 | " | \n", 510 | " | Methods defined here:\n", 511 | " | \n", 512 | " | __call__(self, /, *args, **kwargs)\n", 513 | " | Call self as a function.\n", 514 | " | \n", 515 | " | __delattr__(self, name, /)\n", 516 | " | Implement delattr(self, name).\n", 517 | " | \n", 518 | " | __dir__(self, /)\n", 519 | " | Specialized __dir__ implementation for types.\n", 520 | " | \n", 521 | " | __getattribute__(self, name, /)\n", 522 | " | Return getattr(self, name).\n", 523 | " | \n", 524 | " | __init__(self, /, *args, **kwargs)\n", 525 | " | Initialize self. See help(type(self)) for accurate signature.\n", 526 | " | \n", 527 | " | __instancecheck__(self, instance, /)\n", 528 | " | Check if an object is an instance.\n", 529 | " | \n", 530 | " | __repr__(self, /)\n", 531 | " | Return repr(self).\n", 532 | " | \n", 533 | " | __setattr__(self, name, value, /)\n", 534 | " | Implement setattr(self, name, value).\n", 535 | " | \n", 536 | " | __sizeof__(self, /)\n", 537 | " | Return memory consumption of the type object.\n", 538 | " | \n", 539 | " | __subclasscheck__(self, subclass, /)\n", 540 | " | Check if a class is a subclass.\n", 541 | " | \n", 542 | " | __subclasses__(self, /)\n", 543 | " | Return a list of immediate subclasses.\n", 544 | " | \n", 545 | " | mro(self, /)\n", 546 | " | Return a type's method resolution order.\n", 547 | " | \n", 548 | " | ----------------------------------------------------------------------\n", 549 | " | Class methods defined here:\n", 550 | " | \n", 551 | " | __prepare__(...)\n", 552 | " | __prepare__() -> dict\n", 553 | " | used to create the namespace for the class statement\n", 554 | " | \n", 555 | " | ----------------------------------------------------------------------\n", 556 | " | Static methods defined here:\n", 557 | " | \n", 558 | " | __new__(*args, **kwargs)\n", 559 | " | Create and return a new object. See help(type) for accurate signature.\n", 560 | " | \n", 561 | " | ----------------------------------------------------------------------\n", 562 | " | Data descriptors defined here:\n", 563 | " | \n", 564 | " | __abstractmethods__\n", 565 | " | \n", 566 | " | __dict__\n", 567 | " | \n", 568 | " | __text_signature__\n", 569 | " | \n", 570 | " | ----------------------------------------------------------------------\n", 571 | " | Data and other attributes defined here:\n", 572 | " | \n", 573 | " | __base__ = \n", 574 | " | The base class of the class hierarchy.\n", 575 | " | \n", 576 | " | When called, it accepts no arguments and returns a new featureless\n", 577 | " | instance that has no instance attributes and cannot be given any.\n", 578 | " | \n", 579 | " | __bases__ = (,)\n", 580 | " | \n", 581 | " | __basicsize__ = 880\n", 582 | " | \n", 583 | " | __dictoffset__ = 264\n", 584 | " | \n", 585 | " | __flags__ = 2148291584\n", 586 | " | \n", 587 | " | __itemsize__ = 40\n", 588 | " | \n", 589 | " | __mro__ = (, )\n", 590 | " | \n", 591 | " | __weakrefoffset__ = 368\n", 592 | "\n" 593 | ] 594 | } 595 | ], 596 | "source": [ 597 | "help(type)" 598 | ] 599 | }, 600 | { 601 | "cell_type": "code", 602 | "execution_count": 29, 603 | "metadata": {}, 604 | "outputs": [], 605 | "source": [ 606 | "def soma(x, y):\n", 607 | " r\n", 608 | " return x + y" 609 | ] 610 | }, 611 | { 612 | "cell_type": "markdown", 613 | "metadata": {}, 614 | "source": [ 615 | "
\n", 616 | "Quando uma função (ou classe) está documentada usando _docstring_, é possível usar a função **help()** para ler a documentação:" 617 | ] 618 | }, 619 | { 620 | "cell_type": "code", 621 | "execution_count": 30, 622 | "metadata": {}, 623 | "outputs": [ 624 | { 625 | "name": "stdout", 626 | "output_type": "stream", 627 | "text": [ 628 | "Help on function soma in module __main__:\n", 629 | "\n", 630 | "soma(x, y)\n", 631 | " Esta função soma dois números inteiros.\n", 632 | " \n", 633 | " Parameters:\n", 634 | " x (int): Primeiro número inteiro.\n", 635 | " y (int): Segundo número inteiro.\n", 636 | " \n", 637 | " Returns:\n", 638 | " int: Soma resultante\n", 639 | "\n" 640 | ] 641 | } 642 | ], 643 | "source": [ 644 | "help(soma)" 645 | ] 646 | } 647 | ], 648 | "metadata": { 649 | "kernelspec": { 650 | "display_name": "Python 3", 651 | "language": "python", 652 | "name": "python3" 653 | }, 654 | "language_info": { 655 | "codemirror_mode": { 656 | "name": "ipython", 657 | "version": 3 658 | }, 659 | "file_extension": ".py", 660 | "mimetype": "text/x-python", 661 | "name": "python", 662 | "nbconvert_exporter": "python", 663 | "pygments_lexer": "ipython3", 664 | "version": "3.8.5" 665 | } 666 | }, 667 | "nbformat": 4, 668 | "nbformat_minor": 4 669 | } 670 | -------------------------------------------------------------------------------- /03_condicionais.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Condicionais\n", 19 | "\n", 20 | "### Estrutura básica de um IF:\n", 21 | "\n", 22 | "if condition 01:\n", 23 | " Instruction 01\n", 24 | " Instruction 02\n", 25 | "else:\n", 26 | " Instruction 03\n", 27 | " Instruction 04\n", 28 | "" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "Note que as **identações** definem o _escopo_ de cada opção resultante do IF.\n", 36 | "\n", 37 | "As condições devem resultar um valor boolean (True ou False)." 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "\n", 45 | "if condition 01:\n", 46 | " Instruction 01\n", 47 | " Instruction 02\n", 48 | "elif (condition 02):\n", 49 | " Instruction 03\n", 50 | " Instruction 04\n", 51 | "else:\n", 52 | " Instruction 05\n", 53 | " Instruction 06\n", 54 | "" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "### Operadores de Comparação\n", 62 | "\n", 63 | "| Operação | Descrição || Operação | Descrição |\n", 64 | "|---------------|-------------------------------------||---------------|-------------------------------------|\n", 65 | "| ``a == b`` | ``a`` igual a ``b`` || ``a != b`` | ``a`` diferente de ``b`` |\n", 66 | "| ``a < b`` | ``a`` menor do que ``b`` || ``a > b`` | ``a`` maior do que ``b`` |\n", 67 | "| ``a <= b`` | ``a`` menor do que ou igual a ``b`` || ``a >= b`` | ``a`` maior do que ou igual a ``b`` |" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 2, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "name": "stdout", 77 | "output_type": "stream", 78 | "text": [ 79 | "Menor de idade\n" 80 | ] 81 | } 82 | ], 83 | "source": [ 84 | "idade = 16\n", 85 | "\n", 86 | "if idade < 18:\n", 87 | " print('Menor de idade')\n", 88 | "else:\n", 89 | " print('Maior de idade')" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 4, 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "Em recuperação\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "# reprovado < 4.0\n", 107 | "# em recuperação: [4.0, 6.0)\n", 108 | "# aprovado >= 6.0\n", 109 | "\n", 110 | "media_final = 5.0\n", 111 | "\n", 112 | "if media_final < 4.0:\n", 113 | " print('Reprovado')\n", 114 | "elif media_final < 6.0:\n", 115 | " print('Em recuperação')\n", 116 | "else:\n", 117 | " print('Aprovado')" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "Opcionalmente, podemos usar _parênteses_ nas condições." 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 5, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "Em recuperação\n" 137 | ] 138 | } 139 | ], 140 | "source": [ 141 | "# reprovado < 4.0\n", 142 | "# em recuperação: [4.0, 6.0)\n", 143 | "# aprovado >= 6.0\n", 144 | "\n", 145 | "media_final = 5.0\n", 146 | "\n", 147 | "if (media_final < 4.0):\n", 148 | " print('Reprovado')\n", 149 | "elif (media_final < 6.0):\n", 150 | " print('Em recuperação')\n", 151 | "else:\n", 152 | " print('Aprovado')" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "### Comparando Booleans" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": 6, 165 | "metadata": {}, 166 | "outputs": [ 167 | { 168 | "data": { 169 | "text/plain": [ 170 | "(True, False)" 171 | ] 172 | }, 173 | "execution_count": 6, 174 | "metadata": {}, 175 | "output_type": "execute_result" 176 | } 177 | ], 178 | "source": [ 179 | "True, False" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 7, 185 | "metadata": {}, 186 | "outputs": [ 187 | { 188 | "data": { 189 | "text/plain": [ 190 | "bool" 191 | ] 192 | }, 193 | "execution_count": 7, 194 | "metadata": {}, 195 | "output_type": "execute_result" 196 | } 197 | ], 198 | "source": [ 199 | "type(True)" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 8, 205 | "metadata": {}, 206 | "outputs": [ 207 | { 208 | "name": "stdout", 209 | "output_type": "stream", 210 | "text": [ 211 | "Aluno esta matriculado\n" 212 | ] 213 | } 214 | ], 215 | "source": [ 216 | "aluno_esta_matriculado = True\n", 217 | "\n", 218 | "if aluno_esta_matriculado is True:\n", 219 | " print('Aluno esta matriculado')" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 9, 225 | "metadata": {}, 226 | "outputs": [ 227 | { 228 | "name": "stdout", 229 | "output_type": "stream", 230 | "text": [ 231 | "Aluno esta matriculado\n" 232 | ] 233 | } 234 | ], 235 | "source": [ 236 | "if aluno_esta_matriculado:\n", 237 | " print('Aluno esta matriculado')" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": 10, 243 | "metadata": {}, 244 | "outputs": [ 245 | { 246 | "name": "stdout", 247 | "output_type": "stream", 248 | "text": [ 249 | "Aluno não é um Jedi\n" 250 | ] 251 | } 252 | ], 253 | "source": [ 254 | "aluno_eh_jedi = False\n", 255 | "\n", 256 | "if aluno_eh_jedi is False:\n", 257 | " print('Aluno não é um Jedi')" 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 12, 263 | "metadata": {}, 264 | "outputs": [ 265 | { 266 | "name": "stdout", 267 | "output_type": "stream", 268 | "text": [ 269 | "Aluno não é um Jedi\n" 270 | ] 271 | } 272 | ], 273 | "source": [ 274 | "if not aluno_eh_jedi:\n", 275 | " print('Aluno não é um Jedi')" 276 | ] 277 | }, 278 | { 279 | "cell_type": "markdown", 280 | "metadata": {}, 281 | "source": [ 282 | "### Combinando condições com `and` e`or`" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 13, 288 | "metadata": {}, 289 | "outputs": [], 290 | "source": [ 291 | "## se vc veio da linguagem C/C++, Java, entre outras, você conhece esta notaçãO\n", 292 | "# and ==> &&\n", 293 | "# or ==> ||\n", 294 | "# not ==> !" 295 | ] 296 | }, 297 | { 298 | "cell_type": "code", 299 | "execution_count": 14, 300 | "metadata": {}, 301 | "outputs": [ 302 | { 303 | "data": { 304 | "text/plain": [ 305 | "5.0" 306 | ] 307 | }, 308 | "execution_count": 14, 309 | "metadata": {}, 310 | "output_type": "execute_result" 311 | } 312 | ], 313 | "source": [ 314 | "media_final" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 17, 320 | "metadata": {}, 321 | "outputs": [ 322 | { 323 | "name": "stdout", 324 | "output_type": "stream", 325 | "text": [ 326 | "Em recuperação\n", 327 | "Em recuperação\n", 328 | "Em recuperação\n" 329 | ] 330 | } 331 | ], 332 | "source": [ 333 | "if media_final >= 4.0 and media_final < 6.0:\n", 334 | " print('Em recuperação')\n", 335 | " \n", 336 | "if (media_final >= 4.0) and (media_final < 6.0):\n", 337 | " print('Em recuperação')\n", 338 | " \n", 339 | "if ((media_final >= 4.0) and (media_final < 6.0)):\n", 340 | " print('Em recuperação')" 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 18, 346 | "metadata": {}, 347 | "outputs": [ 348 | { 349 | "name": "stdout", 350 | "output_type": "stream", 351 | "text": [ 352 | "Não foi para recuperação\n" 353 | ] 354 | } 355 | ], 356 | "source": [ 357 | "media_final = 3.0\n", 358 | "\n", 359 | "if media_final < 4.0 or media_final >= 6.0:\n", 360 | " print('Não foi para recuperação')" 361 | ] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "execution_count": 19, 366 | "metadata": {}, 367 | "outputs": [ 368 | { 369 | "name": "stdout", 370 | "output_type": "stream", 371 | "text": [ 372 | "Um jedi foi reprovado direto!\n" 373 | ] 374 | } 375 | ], 376 | "source": [ 377 | "media_final = 3.0\n", 378 | "aluno_eh_jedi = True\n", 379 | "\n", 380 | "if media_final < 4.0 and aluno_eh_jedi:\n", 381 | " print('Um jedi foi reprovado direto!')" 382 | ] 383 | }, 384 | { 385 | "cell_type": "markdown", 386 | "metadata": {}, 387 | "source": [ 388 | "### Armazenando booleans resultantes de condicionais" 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": 23, 394 | "metadata": {}, 395 | "outputs": [ 396 | { 397 | "name": "stdout", 398 | "output_type": "stream", 399 | "text": [ 400 | "Foi aprovado? True\n" 401 | ] 402 | } 403 | ], 404 | "source": [ 405 | "media_final = 7.0\n", 406 | "\n", 407 | "foi_aprovado = media_final >= 6.0\n", 408 | "# foi_aprovado = (media_final >= 6.0) # alternativamente, podemos usar parênteses\n", 409 | "\n", 410 | "print(f'Foi aprovado? {foi_aprovado}')" 411 | ] 412 | }, 413 | { 414 | "cell_type": "code", 415 | "execution_count": 25, 416 | "metadata": {}, 417 | "outputs": [ 418 | { 419 | "name": "stdout", 420 | "output_type": "stream", 421 | "text": [ 422 | "Foi pra recuperação? True\n" 423 | ] 424 | } 425 | ], 426 | "source": [ 427 | "media_final = 5.0\n", 428 | "\n", 429 | "foi_pra_recuperacao = media_final >= 4.0 or media_final < 6\n", 430 | "# foi_pra_recuperacao = (media_final >= 4.0) or (media_final < 6) # alternativamente, podemos usar parênteses\n", 431 | "\n", 432 | "print(f'Foi pra recuperação? {foi_pra_recuperacao}')" 433 | ] 434 | }, 435 | { 436 | "cell_type": "markdown", 437 | "metadata": {}, 438 | "source": [ 439 | "### Condicionais em uma única linha" 440 | ] 441 | }, 442 | { 443 | "cell_type": "code", 444 | "execution_count": 29, 445 | "metadata": {}, 446 | "outputs": [ 447 | { 448 | "name": "stdout", 449 | "output_type": "stream", 450 | "text": [ 451 | "status = Reprovado\n" 452 | ] 453 | } 454 | ], 455 | "source": [ 456 | "# reprovado < 6.0\n", 457 | "# aprovado >= 6.0\n", 458 | "\n", 459 | "media_final = 3.0\n", 460 | "\n", 461 | "status = 'Reprovado' if media_final < 6.0 else 'Aprovado'\n", 462 | "\n", 463 | "## eh o mesmo que este trecho abaixo\n", 464 | "# if media_final < 6.0:\n", 465 | "# status = 'Reprovado'\n", 466 | "# else:\n", 467 | "# status = 'Aprovado'\n", 468 | "\n", 469 | "print(f'status = {status}')" 470 | ] 471 | } 472 | ], 473 | "metadata": { 474 | "kernelspec": { 475 | "display_name": "Python 3", 476 | "language": "python", 477 | "name": "python3" 478 | }, 479 | "language_info": { 480 | "codemirror_mode": { 481 | "name": "ipython", 482 | "version": 3 483 | }, 484 | "file_extension": ".py", 485 | "mimetype": "text/x-python", 486 | "name": "python", 487 | "nbconvert_exporter": "python", 488 | "pygments_lexer": "ipython3", 489 | "version": "3.8.5" 490 | } 491 | }, 492 | "nbformat": 4, 493 | "nbformat_minor": 4 494 | } 495 | -------------------------------------------------------------------------------- /04_loops.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Loops\n", 19 | "Antes de definirmos os *laços de repetição em Python (loops)*, vamos ver como definimos intervalos no Python:" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "### Gerando intervalos com a função `range()`\n", 27 | "Um dos exemplos mais comuns de loops é iterar para um dado **intervalo de valores**.\n", 28 | "\n", 29 | "Suponha que desejamos codificar um loop que itere de 0 até n-1, onde o parâmetro *n* é definido pelo usuário.
\n", 30 | "Em linguagem C, teríamos algo como:\n", 31 | "\n", 32 | "for (int i = 0; i < n; i++) {\n", 33 | " ...\n", 34 | "}\n", 35 | "\n", 36 | " \n", 37 | "Em *Python*, podemos gerar intervalos de valores muito mais fácil, apenas utilizando o comando `range()`, que possui a assinatura:
\n", 38 | "`range(start, end, step)`." 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "#### Entendendo os índices de um Intervalo\n", 46 | "Um intervalo em python sempre **inclui** o número passado como **limite inferior** e *exclui* o número do *limite superior* do intervalo.\n", 47 | "\n", 48 | "P. ex., o intervalo definido pelos números `10 15` corresponde, na verdade, ao intervalo [10, 15), ou seja, [10, 11, 12, 13, 14]" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "#### Gerando um intervalo de 0..n-1\n", 56 | "Se passarmos apenas **um valor/parâmetro** para a função `range()`, a mesma retorna um intervalor de 0 até o valor -1." 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 1, 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "text/plain": [ 67 | "range(0, 10)" 68 | ] 69 | }, 70 | "execution_count": 1, 71 | "metadata": {}, 72 | "output_type": "execute_result" 73 | } 74 | ], 75 | "source": [ 76 | "# gera um intervalo [0, 10), com step=1, onde o 10 não está incluso na lista de valores do intervalo\n", 77 | "# ou seja, teremos os números de 0 a 9\n", 78 | "range(10)" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 2, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "data": { 88 | "text/plain": [ 89 | "range" 90 | ] 91 | }, 92 | "execution_count": 2, 93 | "metadata": {}, 94 | "output_type": "execute_result" 95 | } 96 | ], 97 | "source": [ 98 | "type(range(10))" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "Note que o retorno é um `range(0, 10)`. Internamente, este tipo é uma _lista_ contendo todos os números do intervalo.
\n", 106 | "Para termos acesso a tal lista explicitamente, precisamos converter o range em uma **`list`**:" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 3, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "data": { 116 | "text/plain": [ 117 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" 118 | ] 119 | }, 120 | "execution_count": 3, 121 | "metadata": {}, 122 | "output_type": "execute_result" 123 | } 124 | ], 125 | "source": [ 126 | "# converte o intervalo range(0, 10) na lista de números do intervalo\n", 127 | "list(range(10))" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "#### Gerando um intervalo de Inicio até Fim-1\n", 135 | "Podemos querer alterar o valor **inicial** do intervalo, que é 0 por padrão. Para isso, devemos passar 2 parâmetros para o `range()`, sendo o primeiro deles o limite inferior (incluso) do intervalo (_lower bound_) e o segundo é o limite superior (excluso) do intevarlo (_upper bound_):" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": 4, 141 | "metadata": {}, 142 | "outputs": [ 143 | { 144 | "data": { 145 | "text/plain": [ 146 | "range(11, 21)" 147 | ] 148 | }, 149 | "execution_count": 4, 150 | "metadata": {}, 151 | "output_type": "execute_result" 152 | } 153 | ], 154 | "source": [ 155 | "range(11, 21) # gera o intervalo de números [11, 21) ==> números de 11 a 21" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 5, 161 | "metadata": {}, 162 | "outputs": [ 163 | { 164 | "data": { 165 | "text/plain": [ 166 | "[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]" 167 | ] 168 | }, 169 | "execution_count": 5, 170 | "metadata": {}, 171 | "output_type": "execute_result" 172 | } 173 | ], 174 | "source": [ 175 | "list(range(11, 21))" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "#### Especificando o passo do intervalo\n", 183 | "Por padrão, os intervalos fornecem números sequenciais, ou seja, com **passo/incremento** igual a 1.
\n", 184 | "Podemos alterar tal **passo**. Para isso, basta passarmos um terceiro parâmetro no `range()`" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 6, 190 | "metadata": {}, 191 | "outputs": [ 192 | { 193 | "data": { 194 | "text/plain": [ 195 | "range(11, 21, 2)" 196 | ] 197 | }, 198 | "execution_count": 6, 199 | "metadata": {}, 200 | "output_type": "execute_result" 201 | } 202 | ], 203 | "source": [ 204 | "range(11, 21, 2) # ==> for (int i = 11; i < 21; i += 2)" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": 7, 210 | "metadata": {}, 211 | "outputs": [ 212 | { 213 | "data": { 214 | "text/plain": [ 215 | "[11, 13, 15, 17, 19]" 216 | ] 217 | }, 218 | "execution_count": 7, 219 | "metadata": {}, 220 | "output_type": "execute_result" 221 | } 222 | ], 223 | "source": [ 224 | "list(range(11, 21, 2))" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 8, 230 | "metadata": {}, 231 | "outputs": [ 232 | { 233 | "data": { 234 | "text/plain": [ 235 | "[0, 2, 4, 6, 8]" 236 | ] 237 | }, 238 | "execution_count": 8, 239 | "metadata": {}, 240 | "output_type": "execute_result" 241 | } 242 | ], 243 | "source": [ 244 | "# outro exemplo\n", 245 | "list(range(0, 10, 2))" 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": {}, 251 | "source": [ 252 | "### `for`\n", 253 | "O esqueleto de um for-loop é:\n", 254 | "\n", 255 | "for i in collection:\n", 256 | " Instruction 01\n", 257 | " Instruction 02\n", 258 | " ...\n", 259 | "
\n", 260 | "\n", 261 | "onde _collection_ é uma coleção de valores que será iterado.
\n", 262 | "No esqueleto acima, a cada iteração, a variável `i` terá um valor da _collection_. \n", 263 | "\n", 264 | "A _collection_ pode ser, por exemplo, um `range()` ou uma `list`:" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 9, 270 | "metadata": {}, 271 | "outputs": [ 272 | { 273 | "name": "stdout", 274 | "output_type": "stream", 275 | "text": [ 276 | "i = 0\n", 277 | "i = 1\n", 278 | "i = 2\n", 279 | "i = 3\n", 280 | "i = 4\n", 281 | "i = 5\n", 282 | "i = 6\n", 283 | "i = 7\n", 284 | "i = 8\n", 285 | "i = 9\n" 286 | ] 287 | } 288 | ], 289 | "source": [ 290 | "# para cada i de 0 a 9\n", 291 | "for i in range(10):\n", 292 | " print(f'i = {i}')" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": 10, 298 | "metadata": {}, 299 | "outputs": [ 300 | { 301 | "name": "stdout", 302 | "output_type": "stream", 303 | "text": [ 304 | "num = 12\n", 305 | "num = 14\n", 306 | "num = 16\n", 307 | "num = 18\n", 308 | "num = 20\n" 309 | ] 310 | } 311 | ], 312 | "source": [ 313 | "# para cada elemento par no intervalo de [12, 21)\n", 314 | "for num in range(12, 21, 2):\n", 315 | " print(f'num = {num}')" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": 11, 321 | "metadata": {}, 322 | "outputs": [ 323 | { 324 | "data": { 325 | "text/plain": [ 326 | "[12, 14, 16, 18, 20]" 327 | ] 328 | }, 329 | "execution_count": 11, 330 | "metadata": {}, 331 | "output_type": "execute_result" 332 | } 333 | ], 334 | "source": [ 335 | "lista_de_pares = list(range(12, 21, 2))\n", 336 | "lista_de_pares" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 12, 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "name": "stdout", 346 | "output_type": "stream", 347 | "text": [ 348 | "num = 12\n", 349 | "num = 14\n", 350 | "num = 16\n", 351 | "num = 18\n", 352 | "num = 20\n" 353 | ] 354 | } 355 | ], 356 | "source": [ 357 | "# para cada elemento da lista `lista_de_pares`\n", 358 | "for num in lista_de_pares:\n", 359 | " print(f'num = {num}')" 360 | ] 361 | }, 362 | { 363 | "cell_type": "markdown", 364 | "metadata": {}, 365 | "source": [ 366 | "### While\n", 367 | "\n", 368 | "while condition:\n", 369 | " Instruction 01\n", 370 | " Instruction 02\n", 371 | " ...\n", 372 | "" 373 | ] 374 | }, 375 | { 376 | "cell_type": "code", 377 | "execution_count": 14, 378 | "metadata": {}, 379 | "outputs": [ 380 | { 381 | "name": "stdout", 382 | "output_type": "stream", 383 | "text": [ 384 | "i = 0\n", 385 | "i = 1\n", 386 | "i = 2\n", 387 | "i = 3\n", 388 | "i = 4\n", 389 | "i = 5\n", 390 | "i = 6\n", 391 | "i = 7\n", 392 | "i = 8\n", 393 | "i = 9\n" 394 | ] 395 | } 396 | ], 397 | "source": [ 398 | "i = 0\n", 399 | "\n", 400 | "while i < 10:\n", 401 | " print(f'i = {i}')\n", 402 | " i += 1" 403 | ] 404 | }, 405 | { 406 | "cell_type": "code", 407 | "execution_count": 16, 408 | "metadata": {}, 409 | "outputs": [ 410 | { 411 | "name": "stdout", 412 | "output_type": "stream", 413 | "text": [ 414 | "i = 0\n", 415 | "j = 0\n", 416 | "i = 1\n", 417 | "j = 1\n", 418 | "i = 2\n", 419 | "j = 2\n", 420 | "i = 3\n", 421 | "j = 3\n", 422 | "i = 4\n", 423 | "j = 4\n" 424 | ] 425 | } 426 | ], 427 | "source": [ 428 | "i = 0\n", 429 | "j = 0\n", 430 | "\n", 431 | "while i < 10 and j < 5:\n", 432 | " print(f'i = {i}')\n", 433 | " print(f'j = {j}')\n", 434 | " i += 1\n", 435 | " j += 1" 436 | ] 437 | } 438 | ], 439 | "metadata": { 440 | "kernelspec": { 441 | "display_name": "Python 3", 442 | "language": "python", 443 | "name": "python3" 444 | }, 445 | "language_info": { 446 | "codemirror_mode": { 447 | "name": "ipython", 448 | "version": 3 449 | }, 450 | "file_extension": ".py", 451 | "mimetype": "text/x-python", 452 | "name": "python", 453 | "nbconvert_exporter": "python", 454 | "pygments_lexer": "ipython3", 455 | "version": "3.8.5" 456 | } 457 | }, 458 | "nbformat": 4, 459 | "nbformat_minor": 4 460 | } 461 | -------------------------------------------------------------------------------- /06_strings.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Strings" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "#### Strings são também sequências" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 1, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "Luke skywalker\n", 38 | "Darth Vader\n" 39 | ] 40 | } 41 | ], 42 | "source": [ 43 | "nome_1 = 'Luke skywalker' # essa é a convenção da comunidade do Python\n", 44 | "nome_2 = \"Darth Vader\"\n", 45 | "\n", 46 | "print(nome_1)\n", 47 | "print(nome_2)" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 2, 53 | "metadata": {}, 54 | "outputs": [ 55 | { 56 | "data": { 57 | "text/plain": [ 58 | "'L'" 59 | ] 60 | }, 61 | "execution_count": 2, 62 | "metadata": {}, 63 | "output_type": "execute_result" 64 | } 65 | ], 66 | "source": [ 67 | "nome_1[0]" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 6, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "'k'" 79 | ] 80 | }, 81 | "execution_count": 6, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "nome_1[6]" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 7, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "data": { 97 | "text/plain": [ 98 | "'e'" 99 | ] 100 | }, 101 | "execution_count": 7, 102 | "metadata": {}, 103 | "output_type": "execute_result" 104 | } 105 | ], 106 | "source": [ 107 | "nome_1[-2] # retorna o penúltimo caracter" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 4, 113 | "metadata": {}, 114 | "outputs": [ 115 | { 116 | "data": { 117 | "text/plain": [ 118 | "'Luke'" 119 | ] 120 | }, 121 | "execution_count": 4, 122 | "metadata": {}, 123 | "output_type": "execute_result" 124 | } 125 | ], 126 | "source": [ 127 | "nome_1[:4]" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 5, 133 | "metadata": {}, 134 | "outputs": [ 135 | { 136 | "data": { 137 | "text/plain": [ 138 | "14" 139 | ] 140 | }, 141 | "execution_count": 5, 142 | "metadata": {}, 143 | "output_type": "execute_result" 144 | } 145 | ], 146 | "source": [ 147 | "# quantos caracteres possui a string? Qual o tamanho da string?\n", 148 | "len(nome_1)" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "#### Strings são imutáveis" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 8, 161 | "metadata": {}, 162 | "outputs": [], 163 | "source": [ 164 | "nome = 'Luke skywalker'" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 9, 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "data": { 174 | "text/plain": [ 175 | "'s'" 176 | ] 177 | }, 178 | "execution_count": 9, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "nome[5]" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 10, 190 | "metadata": {}, 191 | "outputs": [ 192 | { 193 | "ename": "TypeError", 194 | "evalue": "'str' object does not support item assignment", 195 | "output_type": "error", 196 | "traceback": [ 197 | "\u001b[0;31m---------------------------------------------------------------------\u001b[0m", 198 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 199 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnome\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'S'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 200 | "\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment" 201 | ] 202 | } 203 | ], 204 | "source": [ 205 | "nome[5] = 'S'" 206 | ] 207 | }, 208 | { 209 | "cell_type": "markdown", 210 | "metadata": {}, 211 | "source": [ 212 | "Para fazer a substituição de um caracter em uma posição específica, precisaremos fazer uma \"gambiarra\" que veremos jajá." 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "metadata": {}, 218 | "source": [ 219 | "### Métodos de Strings" 220 | ] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "metadata": {}, 225 | "source": [ 226 | "`.upper()` retorna a string com todas as letras maiúscula" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": 13, 232 | "metadata": {}, 233 | "outputs": [ 234 | { 235 | "data": { 236 | "text/plain": [ 237 | "'LUKE SKYWALKER'" 238 | ] 239 | }, 240 | "execution_count": 13, 241 | "metadata": {}, 242 | "output_type": "execute_result" 243 | } 244 | ], 245 | "source": [ 246 | "nome.upper() # retorna uma cópia" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 14, 252 | "metadata": {}, 253 | "outputs": [ 254 | { 255 | "data": { 256 | "text/plain": [ 257 | "'Luke skywalker'" 258 | ] 259 | }, 260 | "execution_count": 14, 261 | "metadata": {}, 262 | "output_type": "execute_result" 263 | } 264 | ], 265 | "source": [ 266 | "nome" 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "execution_count": 15, 272 | "metadata": {}, 273 | "outputs": [ 274 | { 275 | "name": "stdout", 276 | "output_type": "stream", 277 | "text": [ 278 | "Luke skywalker\n", 279 | "LUKE SKYWALKER\n" 280 | ] 281 | } 282 | ], 283 | "source": [ 284 | "nome_maiscula = nome.upper()\n", 285 | "print(nome)\n", 286 | "print(nome_maiscula)" 287 | ] 288 | }, 289 | { 290 | "cell_type": "markdown", 291 | "metadata": {}, 292 | "source": [ 293 | "`.lower()` retorna a string com todas as letras minúsculas" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 17, 299 | "metadata": {}, 300 | "outputs": [ 301 | { 302 | "name": "stdout", 303 | "output_type": "stream", 304 | "text": [ 305 | "Luke skywalker\n", 306 | "luke skywalker\n" 307 | ] 308 | } 309 | ], 310 | "source": [ 311 | "nome_minuscula = nome.lower()\n", 312 | "print(nome)\n", 313 | "print(nome_minuscula)" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": 18, 319 | "metadata": {}, 320 | "outputs": [ 321 | { 322 | "name": "stdout", 323 | "output_type": "stream", 324 | "text": [ 325 | "LUKE SKYWALKER\n", 326 | "luke skywalker\n" 327 | ] 328 | } 329 | ], 330 | "source": [ 331 | "nome_de_maiscula_para_minuscula = nome_maiscula.lower()\n", 332 | "print(nome_maiscula)\n", 333 | "print(nome_de_maiscula_para_minuscula)" 334 | ] 335 | }, 336 | { 337 | "cell_type": "markdown", 338 | "metadata": {}, 339 | "source": [ 340 | "`str.startswith(substring)` checa se a string `str` começa com a substring `substring`. " 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 20, 346 | "metadata": {}, 347 | "outputs": [ 348 | { 349 | "name": "stdout", 350 | "output_type": "stream", 351 | "text": [ 352 | "Luke skywalker\n", 353 | "LUKE SKYWALKER\n", 354 | "luke skywalker\n" 355 | ] 356 | } 357 | ], 358 | "source": [ 359 | "print(nome)\n", 360 | "print(nome_maiscula)\n", 361 | "print(nome_minuscula)" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": 21, 367 | "metadata": {}, 368 | "outputs": [ 369 | { 370 | "data": { 371 | "text/plain": [ 372 | "True" 373 | ] 374 | }, 375 | "execution_count": 21, 376 | "metadata": {}, 377 | "output_type": "execute_result" 378 | } 379 | ], 380 | "source": [ 381 | "nome.startswith('Luke')" 382 | ] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": 22, 387 | "metadata": {}, 388 | "outputs": [ 389 | { 390 | "data": { 391 | "text/plain": [ 392 | "False" 393 | ] 394 | }, 395 | "execution_count": 22, 396 | "metadata": {}, 397 | "output_type": "execute_result" 398 | } 399 | ], 400 | "source": [ 401 | "nome.startswith('LUKE')" 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "execution_count": 23, 407 | "metadata": {}, 408 | "outputs": [ 409 | { 410 | "data": { 411 | "text/plain": [ 412 | "True" 413 | ] 414 | }, 415 | "execution_count": 23, 416 | "metadata": {}, 417 | "output_type": "execute_result" 418 | } 419 | ], 420 | "source": [ 421 | "nome_maiscula.startswith('LUKE')" 422 | ] 423 | }, 424 | { 425 | "cell_type": "markdown", 426 | "metadata": {}, 427 | "source": [ 428 | "`str.endswith(substring)` checa se a string `str` termina com a substring `substring`. " 429 | ] 430 | }, 431 | { 432 | "cell_type": "code", 433 | "execution_count": 24, 434 | "metadata": {}, 435 | "outputs": [ 436 | { 437 | "name": "stdout", 438 | "output_type": "stream", 439 | "text": [ 440 | "Luke skywalker\n", 441 | "LUKE SKYWALKER\n", 442 | "luke skywalker\n" 443 | ] 444 | } 445 | ], 446 | "source": [ 447 | "print(nome)\n", 448 | "print(nome_maiscula)\n", 449 | "print(nome_minuscula)" 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": 25, 455 | "metadata": {}, 456 | "outputs": [ 457 | { 458 | "data": { 459 | "text/plain": [ 460 | "True" 461 | ] 462 | }, 463 | "execution_count": 25, 464 | "metadata": {}, 465 | "output_type": "execute_result" 466 | } 467 | ], 468 | "source": [ 469 | "nome.endswith('r')" 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "execution_count": 26, 475 | "metadata": {}, 476 | "outputs": [ 477 | { 478 | "data": { 479 | "text/plain": [ 480 | "True" 481 | ] 482 | }, 483 | "execution_count": 26, 484 | "metadata": {}, 485 | "output_type": "execute_result" 486 | } 487 | ], 488 | "source": [ 489 | "nome.endswith('walker')" 490 | ] 491 | }, 492 | { 493 | "cell_type": "code", 494 | "execution_count": 27, 495 | "metadata": {}, 496 | "outputs": [ 497 | { 498 | "data": { 499 | "text/plain": [ 500 | "False" 501 | ] 502 | }, 503 | "execution_count": 27, 504 | "metadata": {}, 505 | "output_type": "execute_result" 506 | } 507 | ], 508 | "source": [ 509 | "nome.endswith('WALKER')" 510 | ] 511 | }, 512 | { 513 | "cell_type": "code", 514 | "execution_count": 29, 515 | "metadata": {}, 516 | "outputs": [ 517 | { 518 | "data": { 519 | "text/plain": [ 520 | "True" 521 | ] 522 | }, 523 | "execution_count": 29, 524 | "metadata": {}, 525 | "output_type": "execute_result" 526 | } 527 | ], 528 | "source": [ 529 | "nome_maiscula.endswith('WALKER')" 530 | ] 531 | }, 532 | { 533 | "cell_type": "code", 534 | "execution_count": 30, 535 | "metadata": {}, 536 | "outputs": [ 537 | { 538 | "name": "stdout", 539 | "output_type": "stream", 540 | "text": [ 541 | "É uma imagem png\n" 542 | ] 543 | } 544 | ], 545 | "source": [ 546 | "arquivo = 'imagem.png'\n", 547 | "\n", 548 | "# checar se a extensão do arquivo é .png\n", 549 | "if arquivo.endswith('.png'):\n", 550 | " print('É uma imagem png')\n", 551 | "else:\n", 552 | " print('O arquivo não é PNG')" 553 | ] 554 | }, 555 | { 556 | "cell_type": "code", 557 | "execution_count": 34, 558 | "metadata": {}, 559 | "outputs": [ 560 | { 561 | "name": "stdout", 562 | "output_type": "stream", 563 | "text": [ 564 | "É uma imagem png\n" 565 | ] 566 | } 567 | ], 568 | "source": [ 569 | "arquivo = 'imagem.PNG'\n", 570 | "\n", 571 | "# checar se a extensão do arquivo é .png\n", 572 | "# if arquivo.endswith('.png') or arquivo.endswith('.PNG'):\n", 573 | "if arquivo.upper().endswith('.PNG'):\n", 574 | " print('É uma imagem png')\n", 575 | "else:\n", 576 | " print('O arquivo não é PNG')" 577 | ] 578 | }, 579 | { 580 | "cell_type": "code", 581 | "execution_count": 35, 582 | "metadata": {}, 583 | "outputs": [ 584 | { 585 | "name": "stdout", 586 | "output_type": "stream", 587 | "text": [ 588 | "É uma imagem png\n" 589 | ] 590 | } 591 | ], 592 | "source": [ 593 | "arquivo = 'imagem.png'\n", 594 | "\n", 595 | "# checar se a extensão do arquivo é .png\n", 596 | "# if arquivo.endswith('.png') or arquivo.endswith('.PNG'):\n", 597 | "if arquivo.upper().endswith('.PNG'):\n", 598 | " print('É uma imagem png')\n", 599 | "else:\n", 600 | " print('O arquivo não é PNG')" 601 | ] 602 | }, 603 | { 604 | "cell_type": "markdown", 605 | "metadata": {}, 606 | "source": [ 607 | "`string.split(substring)` divide uma string, a partir de uma substring passada, retorna uma lista com as divisões." 608 | ] 609 | }, 610 | { 611 | "cell_type": "code", 612 | "execution_count": 36, 613 | "metadata": {}, 614 | "outputs": [ 615 | { 616 | "name": "stdout", 617 | "output_type": "stream", 618 | "text": [ 619 | "['~', 'documentos', 'arquivos']\n" 620 | ] 621 | } 622 | ], 623 | "source": [ 624 | "diretorio = '~/documentos/arquivos'\n", 625 | "\n", 626 | "subdiretorios = diretorio.split('/')\n", 627 | "print(subdiretorios)" 628 | ] 629 | }, 630 | { 631 | "cell_type": "code", 632 | "execution_count": 38, 633 | "metadata": {}, 634 | "outputs": [ 635 | { 636 | "data": { 637 | "text/plain": [ 638 | "'imagem'" 639 | ] 640 | }, 641 | "execution_count": 38, 642 | "metadata": {}, 643 | "output_type": "execute_result" 644 | } 645 | ], 646 | "source": [ 647 | "arquivo = 'imagem.png'\n", 648 | "filename_sem_extensao = arquivo.split('.png')[0]\n", 649 | "filename_sem_extensao" 650 | ] 651 | }, 652 | { 653 | "cell_type": "code", 654 | "execution_count": 39, 655 | "metadata": {}, 656 | "outputs": [ 657 | { 658 | "data": { 659 | "text/plain": [ 660 | "['imagem.png']" 661 | ] 662 | }, 663 | "execution_count": 39, 664 | "metadata": {}, 665 | "output_type": "execute_result" 666 | } 667 | ], 668 | "source": [ 669 | "arquivo.split('.jpeg')" 670 | ] 671 | }, 672 | { 673 | "cell_type": "markdown", 674 | "metadata": {}, 675 | "source": [ 676 | "`join` junta uma lista de strings, a partir de uma substring. " 677 | ] 678 | }, 679 | { 680 | "cell_type": "code", 681 | "execution_count": 45, 682 | "metadata": {}, 683 | "outputs": [ 684 | { 685 | "name": "stdout", 686 | "output_type": "stream", 687 | "text": [ 688 | "['~', 'documentos', 'arquivos']\n", 689 | "~/documentos/arquivos\n" 690 | ] 691 | } 692 | ], 693 | "source": [ 694 | "print(subdiretorios)\n", 695 | "diretorio_completo = '/'.join(subdiretorios)\n", 696 | "print(diretorio_completo)" 697 | ] 698 | }, 699 | { 700 | "cell_type": "code", 701 | "execution_count": 46, 702 | "metadata": {}, 703 | "outputs": [ 704 | { 705 | "name": "stdout", 706 | "output_type": "stream", 707 | "text": [ 708 | "Luke skywalker\n" 709 | ] 710 | } 711 | ], 712 | "source": [ 713 | "# gambiarra para alterar um único caracter de um dado index de uma string\n", 714 | "nome = 'Luke skywalker'\n", 715 | "print(nome)" 716 | ] 717 | }, 718 | { 719 | "cell_type": "code", 720 | "execution_count": 49, 721 | "metadata": {}, 722 | "outputs": [ 723 | { 724 | "ename": "TypeError", 725 | "evalue": "'str' object does not support item assignment", 726 | "output_type": "error", 727 | "traceback": [ 728 | "\u001b[0;31m---------------------------------------------------------------------\u001b[0m", 729 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 730 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnome\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'S'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 731 | "\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment" 732 | ] 733 | } 734 | ], 735 | "source": [ 736 | "nome[5] = 'S'" 737 | ] 738 | }, 739 | { 740 | "cell_type": "code", 741 | "execution_count": 51, 742 | "metadata": {}, 743 | "outputs": [ 744 | { 745 | "data": { 746 | "text/plain": [ 747 | "['L', 'u', 'k', 'e', ' ', 's', 'k', 'y', 'w', 'a', 'l', 'k', 'e', 'r']" 748 | ] 749 | }, 750 | "execution_count": 51, 751 | "metadata": {}, 752 | "output_type": "execute_result" 753 | } 754 | ], 755 | "source": [ 756 | "nome_como_lista = list(nome)\n", 757 | "nome_como_lista" 758 | ] 759 | }, 760 | { 761 | "cell_type": "code", 762 | "execution_count": 53, 763 | "metadata": {}, 764 | "outputs": [ 765 | { 766 | "data": { 767 | "text/plain": [ 768 | "['L', 'u', 'k', 'e', ' ', 'S', 'k', 'y', 'w', 'a', 'l', 'k', 'e', 'r']" 769 | ] 770 | }, 771 | "execution_count": 53, 772 | "metadata": {}, 773 | "output_type": "execute_result" 774 | } 775 | ], 776 | "source": [ 777 | "nome_como_lista[5] = 'S'\n", 778 | "nome_como_lista" 779 | ] 780 | }, 781 | { 782 | "cell_type": "code", 783 | "execution_count": 58, 784 | "metadata": {}, 785 | "outputs": [ 786 | { 787 | "data": { 788 | "text/plain": [ 789 | "'Luke Skywalker'" 790 | ] 791 | }, 792 | "execution_count": 58, 793 | "metadata": {}, 794 | "output_type": "execute_result" 795 | } 796 | ], 797 | "source": [ 798 | "''.join(nome_como_lista)" 799 | ] 800 | }, 801 | { 802 | "cell_type": "markdown", 803 | "metadata": {}, 804 | "source": [ 805 | "`replace` substitui uma (sub)string específica com outra (sub)string específica." 806 | ] 807 | }, 808 | { 809 | "cell_type": "code", 810 | "execution_count": 60, 811 | "metadata": {}, 812 | "outputs": [ 813 | { 814 | "name": "stdout", 815 | "output_type": "stream", 816 | "text": [ 817 | "I like bananas\n" 818 | ] 819 | } 820 | ], 821 | "source": [ 822 | "txt = \"I like bananas\"\n", 823 | "print(txt)" 824 | ] 825 | }, 826 | { 827 | "cell_type": "code", 828 | "execution_count": 61, 829 | "metadata": {}, 830 | "outputs": [ 831 | { 832 | "name": "stdout", 833 | "output_type": "stream", 834 | "text": [ 835 | "I like bananas\n", 836 | "I like apples\n" 837 | ] 838 | } 839 | ], 840 | "source": [ 841 | "novo_txt = txt.replace(\"bananas\", \"apples\")\n", 842 | "print(txt)\n", 843 | "print(novo_txt)" 844 | ] 845 | }, 846 | { 847 | "cell_type": "markdown", 848 | "metadata": {}, 849 | "source": [ 850 | "#### Concatenando strings" 851 | ] 852 | }, 853 | { 854 | "cell_type": "code", 855 | "execution_count": 62, 856 | "metadata": {}, 857 | "outputs": [ 858 | { 859 | "name": "stdout", 860 | "output_type": "stream", 861 | "text": [ 862 | "~/documentos/arquivos\n", 863 | "imagem.png\n" 864 | ] 865 | } 866 | ], 867 | "source": [ 868 | "print(diretorio)\n", 869 | "print(arquivo)" 870 | ] 871 | }, 872 | { 873 | "cell_type": "code", 874 | "execution_count": 63, 875 | "metadata": {}, 876 | "outputs": [ 877 | { 878 | "name": "stdout", 879 | "output_type": "stream", 880 | "text": [ 881 | "~/documentos/arquivos/imagem.png\n" 882 | ] 883 | } 884 | ], 885 | "source": [ 886 | "# no caso específico de manipulação de filenames,\n", 887 | "# o python fornece o módulo os.path para isso\n", 888 | "caminho_completo = diretorio + '/' + arquivo\n", 889 | "print(caminho_completo)" 890 | ] 891 | }, 892 | { 893 | "cell_type": "code", 894 | "execution_count": 67, 895 | "metadata": {}, 896 | "outputs": [ 897 | { 898 | "name": "stdout", 899 | "output_type": "stream", 900 | "text": [ 901 | "I like bananas\n" 902 | ] 903 | }, 904 | { 905 | "data": { 906 | "text/plain": [ 907 | "'I like apples'" 908 | ] 909 | }, 910 | "execution_count": 67, 911 | "metadata": {}, 912 | "output_type": "execute_result" 913 | } 914 | ], 915 | "source": [ 916 | "# outras gambiarras\n", 917 | "print(txt)\n", 918 | "txt[:7] + 'apples'" 919 | ] 920 | } 921 | ], 922 | "metadata": { 923 | "kernelspec": { 924 | "display_name": "Python 3", 925 | "language": "python", 926 | "name": "python3" 927 | }, 928 | "language_info": { 929 | "codemirror_mode": { 930 | "name": "ipython", 931 | "version": 3 932 | }, 933 | "file_extension": ".py", 934 | "mimetype": "text/x-python", 935 | "name": "python", 936 | "nbconvert_exporter": "python", 937 | "pygments_lexer": "ipython3", 938 | "version": "3.8.5" 939 | } 940 | }, 941 | "nbformat": 4, 942 | "nbformat_minor": 4 943 | } 944 | -------------------------------------------------------------------------------- /07_tuplas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Tuplas\n", 19 | "Tuplas são estruturas muito semelhantes às listas. Elas diferem de duas maneiras:" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "1. Elas usam _parênteses_ ao invés de _colchetes_:" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 1, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/plain": [ 37 | "(1, 2, 3)" 38 | ] 39 | }, 40 | "execution_count": 1, 41 | "metadata": {}, 42 | "output_type": "execute_result" 43 | } 44 | ], 45 | "source": [ 46 | "tupla_1 = (1, 2, 3)\n", 47 | "tupla_1" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 4, 53 | "metadata": {}, 54 | "outputs": [ 55 | { 56 | "name": "stdout", 57 | "output_type": "stream", 58 | "text": [ 59 | "\n" 60 | ] 61 | } 62 | ], 63 | "source": [ 64 | "print(type(tupla_1))" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 5, 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "tupla_2 = 1, 2, 3" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 7, 79 | "metadata": {}, 80 | "outputs": [ 81 | { 82 | "name": "stdout", 83 | "output_type": "stream", 84 | "text": [ 85 | "(1, 2, 3)\n", 86 | "\n" 87 | ] 88 | } 89 | ], 90 | "source": [ 91 | "print(tupla_2)\n", 92 | "print(type(tupla_2))" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 8, 98 | "metadata": {}, 99 | "outputs": [ 100 | { 101 | "name": "stdout", 102 | "output_type": "stream", 103 | "text": [ 104 | "1\n", 105 | "2\n", 106 | "3\n" 107 | ] 108 | } 109 | ], 110 | "source": [ 111 | "# relembrando atribuição múltiplca\n", 112 | "x, y, z = 1, 2, 3\n", 113 | "print(x)\n", 114 | "print(y)\n", 115 | "print(z)" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 9, 121 | "metadata": {}, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "1\n", 128 | "2\n", 129 | "3\n" 130 | ] 131 | } 132 | ], 133 | "source": [ 134 | "a, b, c = tupla_1 # \"desempacota\" os elementos da tupla `tupla_1` nas variávels a, b, c\n", 135 | "print(a)\n", 136 | "print(b)\n", 137 | "print(c)" 138 | ] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "metadata": {}, 143 | "source": [ 144 | "2. Elas **não** podem ser modificadas (**imutáveis**)" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 10, 150 | "metadata": {}, 151 | "outputs": [ 152 | { 153 | "data": { 154 | "text/plain": [ 155 | "(1, 2, 3)" 156 | ] 157 | }, 158 | "execution_count": 10, 159 | "metadata": {}, 160 | "output_type": "execute_result" 161 | } 162 | ], 163 | "source": [ 164 | "tupla_1" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 11, 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "ename": "TypeError", 174 | "evalue": "'tuple' object does not support item assignment", 175 | "output_type": "error", 176 | "traceback": [ 177 | "\u001b[0;31m---------------------------------------------------------------------\u001b[0m", 178 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 179 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtupla_1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 180 | "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" 181 | ] 182 | } 183 | ], 184 | "source": [ 185 | "tupla_1[0] = 10" 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "#### Convertendo uma lista em tuplas e vice-versa" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 12, 198 | "metadata": {}, 199 | "outputs": [ 200 | { 201 | "name": "stdout", 202 | "output_type": "stream", 203 | "text": [ 204 | "['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']\n", 205 | "\n" 206 | ] 207 | } 208 | ], 209 | "source": [ 210 | "planetas = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']\n", 211 | "print(planetas)\n", 212 | "print(type(planetas))" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 13, 218 | "metadata": {}, 219 | "outputs": [ 220 | { 221 | "name": "stdout", 222 | "output_type": "stream", 223 | "text": [ 224 | "('Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno')\n", 225 | "\n" 226 | ] 227 | } 228 | ], 229 | "source": [ 230 | "planetas_tupla = tuple(planetas)\n", 231 | "print(planetas_tupla)\n", 232 | "print(type(planetas_tupla))" 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "execution_count": 15, 238 | "metadata": {}, 239 | "outputs": [ 240 | { 241 | "name": "stdout", 242 | "output_type": "stream", 243 | "text": [ 244 | "['MERCÚRIO', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']\n", 245 | "('Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno')\n" 246 | ] 247 | } 248 | ], 249 | "source": [ 250 | "planetas[0] = planetas[0].upper()\n", 251 | "print(planetas)\n", 252 | "print(planetas_tupla)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 17, 258 | "metadata": {}, 259 | "outputs": [ 260 | { 261 | "ename": "TypeError", 262 | "evalue": "'tuple' object does not support item assignment", 263 | "output_type": "error", 264 | "traceback": [ 265 | "\u001b[0;31m---------------------------------------------------------------------\u001b[0m", 266 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 267 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mplanetas_tupla\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplanetas_tupla\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupper\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplanetas\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplanetas_tupla\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 268 | "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" 269 | ] 270 | } 271 | ], 272 | "source": [ 273 | "planetas_tupla[0] = planetas_tupla[0].upper()\n", 274 | "print(planetas)\n", 275 | "print(planetas_tupla)" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": 22, 281 | "metadata": {}, 282 | "outputs": [ 283 | { 284 | "name": "stdout", 285 | "output_type": "stream", 286 | "text": [ 287 | "[1, 2, 3]\n", 288 | "(1, 2, 3)\n" 289 | ] 290 | } 291 | ], 292 | "source": [ 293 | "# converter uma tupla para uma lista\n", 294 | "lista_1 = list(tupla_1)\n", 295 | "print(lista_1)\n", 296 | "print(tupla_1)" 297 | ] 298 | }, 299 | { 300 | "cell_type": "markdown", 301 | "metadata": {}, 302 | "source": [ 303 | "### Descompactando tuplas" 304 | ] 305 | }, 306 | { 307 | "cell_type": "code", 308 | "execution_count": 25, 309 | "metadata": {}, 310 | "outputs": [ 311 | { 312 | "name": "stdout", 313 | "output_type": "stream", 314 | "text": [ 315 | "(5.0, 10, 2)\n", 316 | "5.0\n", 317 | "10\n", 318 | "2\n", 319 | "(5.0, 10, 2)\n", 320 | "6.0\n", 321 | "10\n", 322 | "2\n" 323 | ] 324 | } 325 | ], 326 | "source": [ 327 | "notas_do_semestre = (5.0, 10, 2)\n", 328 | "prova_1, prova_2, projeto = notas_do_semestre\n", 329 | "\n", 330 | "print(notas_do_semestre)\n", 331 | "print(prova_1)\n", 332 | "print(prova_2)\n", 333 | "print(projeto)\n", 334 | "\n", 335 | "prova_1 += 1\n", 336 | "\n", 337 | "print(notas_do_semestre)\n", 338 | "print(prova_1)\n", 339 | "print(prova_2)\n", 340 | "print(projeto)" 341 | ] 342 | }, 343 | { 344 | "cell_type": "markdown", 345 | "metadata": {}, 346 | "source": [ 347 | "### Zip: Compactando listas" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 26, 353 | "metadata": {}, 354 | "outputs": [ 355 | { 356 | "name": "stdout", 357 | "output_type": "stream", 358 | "text": [ 359 | "['Ônix', 'Gol', 'Uno']\n", 360 | "[50000, 30000, 20000]\n" 361 | ] 362 | } 363 | ], 364 | "source": [ 365 | "carros = ['Ônix', 'Gol', 'Uno']\n", 366 | "precos = [50000, 30000, 20000]\n", 367 | "\n", 368 | "print(carros)\n", 369 | "print(precos)" 370 | ] 371 | }, 372 | { 373 | "cell_type": "code", 374 | "execution_count": 27, 375 | "metadata": {}, 376 | "outputs": [ 377 | { 378 | "data": { 379 | "text/plain": [ 380 | "" 381 | ] 382 | }, 383 | "execution_count": 27, 384 | "metadata": {}, 385 | "output_type": "execute_result" 386 | } 387 | ], 388 | "source": [ 389 | "carros_com_precos_zip = zip(carros, precos)\n", 390 | "carros_com_precos_zip" 391 | ] 392 | }, 393 | { 394 | "cell_type": "code", 395 | "execution_count": 28, 396 | "metadata": {}, 397 | "outputs": [ 398 | { 399 | "data": { 400 | "text/plain": [ 401 | "[('Ônix', 50000), ('Gol', 30000), ('Uno', 20000)]" 402 | ] 403 | }, 404 | "execution_count": 28, 405 | "metadata": {}, 406 | "output_type": "execute_result" 407 | } 408 | ], 409 | "source": [ 410 | "carros_com_precos = list(carros_com_precos_zip)\n", 411 | "carros_com_precos" 412 | ] 413 | }, 414 | { 415 | "cell_type": "code", 416 | "execution_count": 29, 417 | "metadata": {}, 418 | "outputs": [ 419 | { 420 | "name": "stdout", 421 | "output_type": "stream", 422 | "text": [ 423 | "('Ônix', 50000)\n", 424 | "('Gol', 30000)\n", 425 | "('Uno', 20000)\n" 426 | ] 427 | } 428 | ], 429 | "source": [ 430 | "for x in carros_com_precos:\n", 431 | " print(x)" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": 30, 437 | "metadata": {}, 438 | "outputs": [ 439 | { 440 | "name": "stdout", 441 | "output_type": "stream", 442 | "text": [ 443 | "Ônix\n", 444 | "50000\n", 445 | "Gol\n", 446 | "30000\n", 447 | "Uno\n", 448 | "20000\n" 449 | ] 450 | } 451 | ], 452 | "source": [ 453 | "for nome, preco in carros_com_precos:\n", 454 | " print(nome)\n", 455 | " print(preco)" 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": 36, 461 | "metadata": {}, 462 | "outputs": [ 463 | { 464 | "name": "stdout", 465 | "output_type": "stream", 466 | "text": [ 467 | "Ônix\n", 468 | "50000\n", 469 | "Gol\n", 470 | "30000\n", 471 | "Uno\n", 472 | "20000\n" 473 | ] 474 | } 475 | ], 476 | "source": [ 477 | "for nome, preco in zip(carros, precos):\n", 478 | " print(nome)\n", 479 | " print(preco)" 480 | ] 481 | } 482 | ], 483 | "metadata": { 484 | "kernelspec": { 485 | "display_name": "Python 3", 486 | "language": "python", 487 | "name": "python3" 488 | }, 489 | "language_info": { 490 | "codemirror_mode": { 491 | "name": "ipython", 492 | "version": 3 493 | }, 494 | "file_extension": ".py", 495 | "mimetype": "text/x-python", 496 | "name": "python", 497 | "nbconvert_exporter": "python", 498 | "pygments_lexer": "ipython3", 499 | "version": "3.8.5" 500 | } 501 | }, 502 | "nbformat": 4, 503 | "nbformat_minor": 4 504 | } 505 | -------------------------------------------------------------------------------- /08_dicionarios.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Dicionários (tabelas hash)\n", 19 | "Dicionários são tabelas hash: estruturas que mapeiams _chaves_ à _valores_.
\n", 20 | "Muito utilizado quando queremos **acesso rápido** (_O(1)_) a elementos/valores associados a uma dada chave." 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 1, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "# ALTERNATIVA 1 ==> VALORES EM VARIÁVEIS SOLTAS\n", 30 | "nome = 'Luke Skywalker'\n", 31 | "idade = 16\n", 32 | "peso = 60.0" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "# ALTERNATIVA 2 (usando listas ou tuplas) ==> você precisa decorar quais são os índices que\n", 42 | "# guardam cada um dos elementos\n", 43 | "luke_lista = ['Luke Skywalker', 16, 60.0]" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 3, 49 | "metadata": {}, 50 | "outputs": [], 51 | "source": [ 52 | "# ALTERNATIVA 3 (dicionários)\n", 53 | "luke = {'nome': 'Luke Skywalker', 'idade': 16, 'peso': 60.0}" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "Neste caso, 'nome', 'idade' e 'peso' sãos as chaves com os respectivos valores 'Luke Skywalker', 16, 60.0." 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "Um dado _valor_ é acessado passando a _chave_ via **colchetes**:" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 4, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "'Luke Skywalker'" 79 | ] 80 | }, 81 | "execution_count": 4, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "luke['nome']" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 5, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "data": { 97 | "text/plain": [ 98 | "16" 99 | ] 100 | }, 101 | "execution_count": 5, 102 | "metadata": {}, 103 | "output_type": "execute_result" 104 | } 105 | ], 106 | "source": [ 107 | "luke['idade']" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 6, 113 | "metadata": {}, 114 | "outputs": [ 115 | { 116 | "data": { 117 | "text/plain": [ 118 | "60.0" 119 | ] 120 | }, 121 | "execution_count": 6, 122 | "metadata": {}, 123 | "output_type": "execute_result" 124 | } 125 | ], 126 | "source": [ 127 | "luke['peso']" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "Podemos alterar um valor acessando da mesma maneira:" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 7, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "name": "stdout", 144 | "output_type": "stream", 145 | "text": [ 146 | "{'nome': 'Luke Skywalker', 'idade': 16, 'peso': 70}\n" 147 | ] 148 | } 149 | ], 150 | "source": [ 151 | "luke['peso'] = 70\n", 152 | "print(luke)" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "Podemos **adicionar** um novo elemento, apenas informando o novo _par de chaves e valor_:" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": 8, 165 | "metadata": {}, 166 | "outputs": [ 167 | { 168 | "name": "stdout", 169 | "output_type": "stream", 170 | "text": [ 171 | "{'nome': 'Luke Skywalker', 'idade': 16, 'peso': 70, 'eh_jedi': True}\n" 172 | ] 173 | } 174 | ], 175 | "source": [ 176 | "luke['eh_jedi'] = True\n", 177 | "print(luke)" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 9, 183 | "metadata": {}, 184 | "outputs": [ 185 | { 186 | "name": "stdout", 187 | "output_type": "stream", 188 | "text": [ 189 | "{'nome': 'Luke Skywalker', 'idade': 16, 'peso': 70, 'eh_jedi': True, 'notas': [10.0, 5.0, 2.2]}\n" 190 | ] 191 | } 192 | ], 193 | "source": [ 194 | "luke['notas'] = [10.0, 5.0, 2.2]\n", 195 | "print(luke)" 196 | ] 197 | }, 198 | { 199 | "cell_type": "markdown", 200 | "metadata": {}, 201 | "source": [ 202 | "Note que usamos **diversos tipos** de _valores_ no mesmo dicionário. Podemos também usar **mais de um tipo de chaves**, apesar que, geralmente, isso não é muito usado." 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": 10, 208 | "metadata": {}, 209 | "outputs": [ 210 | { 211 | "name": "stdout", 212 | "output_type": "stream", 213 | "text": [ 214 | "{'nome': 'Luke Skywalker', 'idade': 16, 'peso': 70, 'eh_jedi': True, 'notas': [10.0, 5.0, 2.2], 1: 'Um'}\n" 215 | ] 216 | } 217 | ], 218 | "source": [ 219 | "luke[1] = 'Um'\n", 220 | "print(luke)" 221 | ] 222 | }, 223 | { 224 | "cell_type": "markdown", 225 | "metadata": {}, 226 | "source": [ 227 | "Para copiar um dicionário:" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 11, 233 | "metadata": {}, 234 | "outputs": [ 235 | { 236 | "name": "stdout", 237 | "output_type": "stream", 238 | "text": [ 239 | "{'nome': 'Luke Skywalker', 'idade': 16, 'peso': 70, 'eh_jedi': True, 'notas': [10.0, 5.0, 2.2]}\n", 240 | "{'nome': 'Luke Skywalker', 'idade': 16, 'peso': 70, 'eh_jedi': True, 'notas': [10.0, 5.0, 2.2], 1: 'Um'}\n" 241 | ] 242 | } 243 | ], 244 | "source": [ 245 | "luke_copia = dict(luke) # retorna uma cópia do dicionário `luke`\n", 246 | "luke.pop(1, None) # remove a chave 1 do dicionário\n", 247 | "\n", 248 | "print(luke)\n", 249 | "print(luke_copia)" 250 | ] 251 | }, 252 | { 253 | "cell_type": "markdown", 254 | "metadata": {}, 255 | "source": [ 256 | "#### Checando se um dicionário possui uma dada chave" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 12, 262 | "metadata": {}, 263 | "outputs": [ 264 | { 265 | "data": { 266 | "text/plain": [ 267 | "{'nome': 'Luke Skywalker',\n", 268 | " 'idade': 16,\n", 269 | " 'peso': 70,\n", 270 | " 'eh_jedi': True,\n", 271 | " 'notas': [10.0, 5.0, 2.2]}" 272 | ] 273 | }, 274 | "execution_count": 12, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | } 278 | ], 279 | "source": [ 280 | "luke" 281 | ] 282 | }, 283 | { 284 | "cell_type": "code", 285 | "execution_count": 13, 286 | "metadata": {}, 287 | "outputs": [ 288 | { 289 | "data": { 290 | "text/plain": [ 291 | "True" 292 | ] 293 | }, 294 | "execution_count": 13, 295 | "metadata": {}, 296 | "output_type": "execute_result" 297 | } 298 | ], 299 | "source": [ 300 | "'nome' in luke" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 14, 306 | "metadata": {}, 307 | "outputs": [ 308 | { 309 | "data": { 310 | "text/plain": [ 311 | "False" 312 | ] 313 | }, 314 | "execution_count": 14, 315 | "metadata": {}, 316 | "output_type": "execute_result" 317 | } 318 | ], 319 | "source": [ 320 | "'profissisao' in luke" 321 | ] 322 | }, 323 | { 324 | "cell_type": "code", 325 | "execution_count": 15, 326 | "metadata": {}, 327 | "outputs": [ 328 | { 329 | "data": { 330 | "text/plain": [ 331 | "True" 332 | ] 333 | }, 334 | "execution_count": 15, 335 | "metadata": {}, 336 | "output_type": "execute_result" 337 | } 338 | ], 339 | "source": [ 340 | "'profissisao' not in luke" 341 | ] 342 | }, 343 | { 344 | "cell_type": "markdown", 345 | "metadata": {}, 346 | "source": [ 347 | "#### For-each em Dicionários" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 17, 353 | "metadata": {}, 354 | "outputs": [ 355 | { 356 | "name": "stdout", 357 | "output_type": "stream", 358 | "text": [ 359 | "luke['nome'] = Luke Skywalker\n", 360 | "luke['idade'] = 16\n", 361 | "luke['peso'] = 70\n", 362 | "luke['eh_jedi'] = True\n", 363 | "luke['notas'] = [10.0, 5.0, 2.2]\n" 364 | ] 365 | } 366 | ], 367 | "source": [ 368 | "for chave in luke:\n", 369 | " print(f'luke[\\'{chave}\\'] = {luke[chave]}')" 370 | ] 371 | }, 372 | { 373 | "cell_type": "code", 374 | "execution_count": 18, 375 | "metadata": {}, 376 | "outputs": [ 377 | { 378 | "data": { 379 | "text/plain": [ 380 | "dict_keys(['nome', 'idade', 'peso', 'eh_jedi', 'notas'])" 381 | ] 382 | }, 383 | "execution_count": 18, 384 | "metadata": {}, 385 | "output_type": "execute_result" 386 | } 387 | ], 388 | "source": [ 389 | "luke.keys() # retorna uma lista com todas as chaves do dicionário" 390 | ] 391 | }, 392 | { 393 | "cell_type": "code", 394 | "execution_count": 19, 395 | "metadata": {}, 396 | "outputs": [ 397 | { 398 | "name": "stdout", 399 | "output_type": "stream", 400 | "text": [ 401 | "luke['nome'] = Luke Skywalker\n", 402 | "luke['idade'] = 16\n", 403 | "luke['peso'] = 70\n", 404 | "luke['eh_jedi'] = True\n", 405 | "luke['notas'] = [10.0, 5.0, 2.2]\n" 406 | ] 407 | } 408 | ], 409 | "source": [ 410 | "for chave in luke.keys():\n", 411 | " print(f'luke[\\'{chave}\\'] = {luke[chave]}')" 412 | ] 413 | }, 414 | { 415 | "cell_type": "code", 416 | "execution_count": 20, 417 | "metadata": {}, 418 | "outputs": [ 419 | { 420 | "data": { 421 | "text/plain": [ 422 | "dict_values(['Luke Skywalker', 16, 70, True, [10.0, 5.0, 2.2]])" 423 | ] 424 | }, 425 | "execution_count": 20, 426 | "metadata": {}, 427 | "output_type": "execute_result" 428 | } 429 | ], 430 | "source": [ 431 | "luke.values() # retorna uma lista com todos os valores do dicionário" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": 21, 437 | "metadata": {}, 438 | "outputs": [ 439 | { 440 | "name": "stdout", 441 | "output_type": "stream", 442 | "text": [ 443 | "Luke Skywalker\n", 444 | "16\n", 445 | "70\n", 446 | "True\n", 447 | "[10.0, 5.0, 2.2]\n" 448 | ] 449 | } 450 | ], 451 | "source": [ 452 | "for valor in luke.values():\n", 453 | " print(f'{valor}')" 454 | ] 455 | }, 456 | { 457 | "cell_type": "code", 458 | "execution_count": 22, 459 | "metadata": {}, 460 | "outputs": [ 461 | { 462 | "data": { 463 | "text/plain": [ 464 | "dict_items([('nome', 'Luke Skywalker'), ('idade', 16), ('peso', 70), ('eh_jedi', True), ('notas', [10.0, 5.0, 2.2])])" 465 | ] 466 | }, 467 | "execution_count": 22, 468 | "metadata": {}, 469 | "output_type": "execute_result" 470 | } 471 | ], 472 | "source": [ 473 | "luke.items() # retorna uma lista de tuplas, onde cada tupla representa um pair chave e valor do dicionário" 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "execution_count": 24, 479 | "metadata": {}, 480 | "outputs": [ 481 | { 482 | "name": "stdout", 483 | "output_type": "stream", 484 | "text": [ 485 | "luke['nome'] = Luke Skywalker\n", 486 | "luke['idade'] = 16\n", 487 | "luke['peso'] = 70\n", 488 | "luke['eh_jedi'] = True\n", 489 | "luke['notas'] = [10.0, 5.0, 2.2]\n" 490 | ] 491 | } 492 | ], 493 | "source": [ 494 | "for chave, valor in luke.items():\n", 495 | " print(f'luke[\\'{chave}\\'] = {valor}')" 496 | ] 497 | }, 498 | { 499 | "cell_type": "markdown", 500 | "metadata": {}, 501 | "source": [ 502 | "#### Dictionary Comprehensions" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": 25, 508 | "metadata": {}, 509 | "outputs": [ 510 | { 511 | "name": "stdout", 512 | "output_type": "stream", 513 | "text": [ 514 | "['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']\n" 515 | ] 516 | } 517 | ], 518 | "source": [ 519 | "planetas = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']\n", 520 | "print(planetas)" 521 | ] 522 | }, 523 | { 524 | "cell_type": "code", 525 | "execution_count": 27, 526 | "metadata": {}, 527 | "outputs": [ 528 | { 529 | "data": { 530 | "text/plain": [ 531 | "{'Mercúrio': 'M',\n", 532 | " 'Vênus': 'V',\n", 533 | " 'Terra': 'T',\n", 534 | " 'Marte': 'M',\n", 535 | " 'Júpiter': 'J',\n", 536 | " 'Saturno': 'S',\n", 537 | " 'Urano': 'U',\n", 538 | " 'Netuno': 'N'}" 539 | ] 540 | }, 541 | "execution_count": 27, 542 | "metadata": {}, 543 | "output_type": "execute_result" 544 | } 545 | ], 546 | "source": [ 547 | "# queremos construir um dicionário, onde cada chave é o nome do planeta, e seu respectivo valor é a inicial do planeta\n", 548 | "iniciais_dos_planetas = {plan: plan[0] for plan in planetas} # para cada planeta da nossa lista\n", 549 | "iniciais_dos_planetas" 550 | ] 551 | }, 552 | { 553 | "cell_type": "code", 554 | "execution_count": null, 555 | "metadata": {}, 556 | "outputs": [], 557 | "source": [] 558 | } 559 | ], 560 | "metadata": { 561 | "kernelspec": { 562 | "display_name": "Python 3", 563 | "language": "python", 564 | "name": "python3" 565 | }, 566 | "language_info": { 567 | "codemirror_mode": { 568 | "name": "ipython", 569 | "version": 3 570 | }, 571 | "file_extension": ".py", 572 | "mimetype": "text/x-python", 573 | "name": "python", 574 | "nbconvert_exporter": "python", 575 | "pygments_lexer": "ipython3", 576 | "version": "3.8.5" 577 | } 578 | }, 579 | "nbformat": 4, 580 | "nbformat_minor": 4 581 | } 582 | -------------------------------------------------------------------------------- /09_bibliotecas_externas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Módulos internos/externos" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "#### Importando um módulo (biblioteca)" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 1, 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [ 34 | "import math" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 3, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "text/plain": [ 45 | "1024.0" 46 | ] 47 | }, 48 | "execution_count": 3, 49 | "metadata": {}, 50 | "output_type": "execute_result" 51 | } 52 | ], 53 | "source": [ 54 | "math.pow(2, 10)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "#### Atribuindo um nome diferente (alias) a um modulo importado" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 4, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "import random as ran" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 9, 76 | "metadata": {}, 77 | "outputs": [ 78 | { 79 | "data": { 80 | "text/plain": [ 81 | "4" 82 | ] 83 | }, 84 | "execution_count": 9, 85 | "metadata": {}, 86 | "output_type": "execute_result" 87 | } 88 | ], 89 | "source": [ 90 | "ran.randint(0, 10)" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 11, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "name": "stdout", 100 | "output_type": "stream", 101 | "text": [ 102 | "Help on method randint in module random:\n", 103 | "\n", 104 | "randint(a, b) method of random.Random instance\n", 105 | " Return random integer in range [a, b], including both end points.\n", 106 | "\n" 107 | ] 108 | } 109 | ], 110 | "source": [ 111 | "help(ran.randint)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 13, 117 | "metadata": {}, 118 | "outputs": [], 119 | "source": [ 120 | "import numpy as np" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": 14, 126 | "metadata": {}, 127 | "outputs": [ 128 | { 129 | "data": { 130 | "text/plain": [ 131 | "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" 132 | ] 133 | }, 134 | "execution_count": 14, 135 | "metadata": {}, 136 | "output_type": "execute_result" 137 | } 138 | ], 139 | "source": [ 140 | "np.arange(10)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "#### Importando apenas algumas \"coisas\" (funções, atributos, constantes, ...) de um módulo\n", 148 | "Deixa todas as \"coisas\" acessíveis sem a necessidade de chamar `modulo.coisa`" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 21, 154 | "metadata": {}, 155 | "outputs": [], 156 | "source": [ 157 | "from math import log2, pi, sqrt" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 22, 163 | "metadata": {}, 164 | "outputs": [ 165 | { 166 | "name": "stdout", 167 | "output_type": "stream", 168 | "text": [ 169 | "1.4142135623730951\n", 170 | "4.0\n", 171 | "3.141592653589793\n" 172 | ] 173 | } 174 | ], 175 | "source": [ 176 | "print(sqrt(2))\n", 177 | "print(log2(16))\n", 178 | "print(pi)" 179 | ] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": {}, 184 | "source": [ 185 | "#### Importando todas as \"coisas\" (funções, atributos, constantes, ...) de um módulo" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 24, 191 | "metadata": {}, 192 | "outputs": [ 193 | { 194 | "data": { 195 | "text/plain": [ 196 | "2.0" 197 | ] 198 | }, 199 | "execution_count": 24, 200 | "metadata": {}, 201 | "output_type": "execute_result" 202 | } 203 | ], 204 | "source": [ 205 | "from math import *\n", 206 | "\n", 207 | "log10(100)" 208 | ] 209 | }, 210 | { 211 | "cell_type": "markdown", 212 | "metadata": {}, 213 | "source": [ 214 | "Apesar de se possível, tal prática **não é indicada**, uma vez que (1) \"coisas\", p. ex., de módulos diferentes mas de mesmo nome podem ser importadas, e (2) pode não haver necessidade de ter acesso a todas as \"coisas\" do módulo." 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "### Submódulos\n", 222 | "Alguns módulos podem possuir **submódulos**:" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 25, 228 | "metadata": {}, 229 | "outputs": [], 230 | "source": [ 231 | "import numpy as np" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 27, 237 | "metadata": {}, 238 | "outputs": [ 239 | { 240 | "data": { 241 | "text/plain": [ 242 | "" 243 | ] 244 | }, 245 | "execution_count": 27, 246 | "metadata": {}, 247 | "output_type": "execute_result" 248 | } 249 | ], 250 | "source": [ 251 | "np.random" 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "execution_count": 28, 257 | "metadata": {}, 258 | "outputs": [ 259 | { 260 | "data": { 261 | "text/plain": [ 262 | "9" 263 | ] 264 | }, 265 | "execution_count": 28, 266 | "metadata": {}, 267 | "output_type": "execute_result" 268 | } 269 | ], 270 | "source": [ 271 | "from numpy import random\n", 272 | "random.randint(0, 10)" 273 | ] 274 | }, 275 | { 276 | "cell_type": "markdown", 277 | "metadata": {}, 278 | "source": [ 279 | "### Módulos Uteis" 280 | ] 281 | }, 282 | { 283 | "cell_type": "markdown", 284 | "metadata": {}, 285 | "source": [ 286 | "- `os`: funções do sistema operacional\n", 287 | "- `glob`: funções para criar listas a partir de diretórios do sistema\n", 288 | "- `shutil`: funções para gerenciar arquivos e diretórios\n", 289 | "- `math`: funções matemáticas\n", 290 | "- `random`: geradores de números aleatórios\n", 291 | "- `pickle`: protocolos para (de-)serialização de dados de entrada e saída" 292 | ] 293 | }, 294 | { 295 | "cell_type": "markdown", 296 | "metadata": {}, 297 | "source": [ 298 | "### Outros Tópicos" 299 | ] 300 | }, 301 | { 302 | "cell_type": "markdown", 303 | "metadata": {}, 304 | "source": [ 305 | "- Manipulação de arquivos\n", 306 | "- Orientação a objetos\n", 307 | " - Classes\n", 308 | " - Objetos\n", 309 | " - Métodos, métodos estáticos\n", 310 | " - Herança\n", 311 | "- Básico da biblioteca `numpy`\n", 312 | "- Básico da biblioteca `matplotlib`" 313 | ] 314 | } 315 | ], 316 | "metadata": { 317 | "kernelspec": { 318 | "display_name": "Python 3", 319 | "language": "python", 320 | "name": "python3" 321 | }, 322 | "language_info": { 323 | "codemirror_mode": { 324 | "name": "ipython", 325 | "version": 3 326 | }, 327 | "file_extension": ".py", 328 | "mimetype": "text/x-python", 329 | "name": "python", 330 | "nbconvert_exporter": "python", 331 | "pygments_lexer": "ipython3", 332 | "version": "3.8.5" 333 | } 334 | }, 335 | "nbformat": 4, 336 | "nbformat_minor": 4 337 | } 338 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Python Essencial para Data Science 2 | 3 | Este material apresenta os códigos do curso **[Python Essencial para Data Science](https://www.youtube.com/playlist?list=PL3ZslI15yo2qCEmnYOa2sq6VQOzQ2CFhj)**. 4 | 5 | **Professor:** [Samuel Martins (Samuka)](http://hisamuka.github.io/) - [@hisamuka](https://hisamuka.github.io) 6 | 7 | A pasta `codigos_base` contém todos os arquivos com os códigos base utilizados nos vídeos. Utilize-os para acompanhar os vídeos a partir do mesmo ponto de partida dos vídeos. 8 | 9 | ### Materiais de cada vídeo 10 | - **Conceitos básicos:** 11 | - [#1 - Primeiro Script: Hello world!](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/hello_world.py) 12 | - [#2 - Variáveis e tipos](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/01_variaveis_e_tipos.ipynb) 13 | - [#3 - Atribuição múltipla e casting](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/01_variaveis_e_tipos.ipynb) 14 | - [#4 - Operadores aritméticos e print](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/01_variaveis_e_tipos.ipynb) 15 | - **Funções:** 16 | - [#5 - Funções](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/02_funcoes.ipynb) 17 | - [#6 - Escopo e argumentos default](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/02_funcoes.ipynb) 18 | - [#7 - Parâmetros nomeados e function annotation](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/02_funcoes.ipynb) 19 | - **Condicionais:** 20 | - [#8 - Condicionais: Parte 1](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/03_condicionais.ipynb) 21 | - [#9 - Condicionais: Parte 2](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/03_condicionais.ipynb) 22 | - **Repetições:** 23 | - [#10 - Intervalos](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/04_loops.ipynb) 24 | - [#11 - Repetições](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/04_loops.ipynb) 25 | - **List** 26 | - [#12 - Listas: Conceitos Básicos](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 27 | - [#13 - Listas: Indexação](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 28 | - [#14 - Listas: Slicing](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 29 | - [#15 - For-each com Listas](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 30 | - [#16 - Listas: Funções e métodos](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 31 | - [#17 - Listas: Mais e métodos](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 32 | - [#18 - List comprehensions](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/05_lists.ipynb) 33 | - **Strings** 34 | - [#19 - Strings: Parte 1](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/06_strings.ipynb) 35 | - [#20 - Strings: Parte 2](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/06_strings.ipynb) 36 | - **Tuple** 37 | - [#21 - Tuplas](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/07_tuplas.ipynb) 38 | - **Dict (Dicionários)** 39 | - [#22 - Dicionários: Parte 1](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/08_dicionarios.ipynb) 40 | - [#23 - Dicionários: Parte 2](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/08_dicionarios.ipynb) 41 | - **Outros assuntos** 42 | - [#24 - Bibliotecas Externas](https://github.com/xavecoding/python-essencial-para-data-science/blob/main/09_bibliotecas_externas.ipynb) 43 | 44 | 45 | 46 |
47 | Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. 48 | -------------------------------------------------------------------------------- /codigos_base/01_variaveis_e_tipos.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding
\n", 10 | "\n", 11 | "Neste tutorial, vamos aprender os conceitos básicos para desenvolvermos nossos primeiros programas em Python!
\n", 12 | "Boa parte dos exemplos deste tutorial é inspirado no [curso de Python do Kaggle](https://www.kaggle.com/learn/python).

\n", 13 | "\n", 14 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "data": { 24 | "text/html": [ 25 | "\n" 28 | ], 29 | "text/plain": [ 30 | "" 31 | ] 32 | }, 33 | "metadata": {}, 34 | "output_type": "display_data" 35 | } 36 | ], 37 | "source": [ 38 | "%%html\n", 39 | "" 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "## Variáveis\n", 49 | "\n", 50 | "### Tipos\n", 51 | "Python tem diferentes tipos de dados, mas no fundo, *tudo é um objeto*.
\n", 52 | "Variáveis podem ser definidas em qualquer lugar.\n", 53 | "\n", 54 | "Veja alguns tipos:\n", 55 | "\n", 56 | "| Tipo | Exemplo |\n", 57 | "|---------|-------------------|\n", 58 | "| Integer | 1 10 -4 |\n", 59 | "| Float | 1.0 -0.223 3.1415 |\n", 60 | "| String | \"Hello world\" |" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "## Instanciando variáveis" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 18, 73 | "metadata": {}, 74 | "outputs": [], 75 | "source": [] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "### Type()\n", 82 | "Use a função type() para descobrir o tipo de uma variável." 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": null, 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [] 91 | }, 92 | { 93 | "cell_type": "markdown", 94 | "metadata": {}, 95 | "source": [ 96 | "### Dir()\n", 97 | "Use a função dir() para descobrir **todos os métodos** associados a um objeto:" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": null, 103 | "metadata": {}, 104 | "outputs": [], 105 | "source": [] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "### Usando métodos\n", 112 | "Métodos podem ser acessados usando: objeto.metodo" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": null, 118 | "metadata": {}, 119 | "outputs": [], 120 | "source": [] 121 | }, 122 | { 123 | "cell_type": "markdown", 124 | "metadata": {}, 125 | "source": [ 126 | "### Atribuição Múltipla" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 34, 132 | "metadata": {}, 133 | "outputs": [], 134 | "source": [] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "### Python é uma linguagem *case-sensitive*" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": null, 146 | "metadata": {}, 147 | "outputs": [], 148 | "source": [] 149 | }, 150 | { 151 | "cell_type": "markdown", 152 | "metadata": {}, 153 | "source": [ 154 | "### Dinamicamente e Fortemente tipada\n", 155 | "\n", 156 | "**Dinamicamente:** o tipo é definido no momento da atribuição\n", 157 | "**Fortemente:** o interpretador não muda o tipo de uma variável inesperadamente" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": null, 163 | "metadata": {}, 164 | "outputs": [], 165 | "source": [] 166 | }, 167 | { 168 | "cell_type": "markdown", 169 | "metadata": {}, 170 | "source": [ 171 | "### Conversão de Tipos (*Casting*)" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": null, 177 | "metadata": {}, 178 | "outputs": [], 179 | "source": [] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": {}, 184 | "source": [ 185 | "### Operadores Aritméticos\n", 186 | "\n", 187 | "| Operador | Nome | Descrição |\n", 188 | "|--------------|----------------------|--------------------------------------------------------------------------------------|\n", 189 | "| ``a + b`` | Adição | Soma de ``a`` e ``b`` |\n", 190 | "| ``a - b`` | Subtração | Diferença de ``a`` e ``b`` |\n", 191 | "| ``a * b`` | Multiplicação | Produto de ``a`` e ``b`` |\n", 192 | "| ``a / b`` | Divisão 'verdadeira' | Quociente de ``a`` e ``b`` |\n", 193 | "| ``a // b`` | Piso da Divisão | Quociente de ``a`` e ``b``, removendo partes fracionadas (arredondamento para baixo) |\n", 194 | "| ``a % b`` | Módulo | Resto da divisão de a ``a`` por ``b`` |\n", 195 | "| ``a ** b`` | Exponenciação | ``a`` elevado a ``b`` |\n", 196 | "| ``-a`` | Negação | Negativo de ``a`` |" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": null, 202 | "metadata": {}, 203 | "outputs": [], 204 | "source": [] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": null, 209 | "metadata": {}, 210 | "outputs": [], 211 | "source": [] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": {}, 216 | "source": [ 217 | "### A função print()\n", 218 | "A função _print()_ imprime uma string na tela/console.
\n", 219 | "Uma string pode ser definida com **aspas simples ''** ou **aspas duplas \"\"**.\n", 220 | "\n", 221 | "Por convenção, a comunidade usa **aspas simples ''**" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": null, 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [] 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "metadata": {}, 234 | "source": [ 235 | "
Para imprimir valores de _variáveis_ junto com uma _string/texto_, utilize a letra **_f_** antes das primeiras aspas, e coloque a variável entre **_{}_** (Python 3.6+):" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": null, 241 | "metadata": {}, 242 | "outputs": [], 243 | "source": [] 244 | }, 245 | { 246 | "cell_type": "markdown", 247 | "metadata": {}, 248 | "source": [ 249 | "
\n", 250 | "Alternativa, temos outras formas de impressão vindas de versões mais antigas do Python, porém ainda válidas:" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": null, 256 | "metadata": {}, 257 | "outputs": [], 258 | "source": [] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": null, 263 | "metadata": {}, 264 | "outputs": [], 265 | "source": [] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": null, 270 | "metadata": {}, 271 | "outputs": [], 272 | "source": [] 273 | } 274 | ], 275 | "metadata": { 276 | "kernelspec": { 277 | "display_name": "Python 3", 278 | "language": "python", 279 | "name": "python3" 280 | }, 281 | "language_info": { 282 | "codemirror_mode": { 283 | "name": "ipython", 284 | "version": 3 285 | }, 286 | "file_extension": ".py", 287 | "mimetype": "text/x-python", 288 | "name": "python", 289 | "nbconvert_exporter": "python", 290 | "pygments_lexer": "ipython3", 291 | "version": "3.9.0" 292 | } 293 | }, 294 | "nbformat": 4, 295 | "nbformat_minor": 4 296 | } 297 | -------------------------------------------------------------------------------- /codigos_base/02_funcoes.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Funções\n", 19 | "\n", 20 | "### Esqueleto de uma função em python:\n", 21 | "\n", 22 | "def functionName(param1, param2, param3=val):\n", 23 | " instruction 01\n", 24 | " instruction 02\n", 25 | " return X\n", 26 | "" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "### Funções podem NÃO ter retorno" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": null, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "### Funções podem ter retorno" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": null, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "### Funções podem ter múltiplos retornos" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "### Escopo\n", 76 | "Todo **escopo** em Python (funções, loops, condicionais, classes, etc...) usam *dois pontos (:)* e *identação*:\n", 77 | "Os **dois pontos (:)** servem para _\"abrir\"_ o escopo, e _cada instrução_ dentro do escopo devem ser **identadas** à direita.\n", 78 | "\n", 79 | "Convenciona-se usar *espaços* ao invés de *tabs* para a **identação**. Todas as instruções do escopo **devem ter a mesma identação** (p. ex, a mesma quantidade de espaços)." 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "\n", 87 | "def functionName(param1, param2, param3=val):\n", 88 | " instruction 01 # 4 espaços de identação\n", 89 | " instruction 02 # 4 espaços de identação\n", 90 | " return X # 4 espaços de identação\n", 91 | "" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "### Funções com parâmetros default (opcionais)" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "Os parâmetros opcionais (ou seja, com valores _default_) devem sempre serem **os últimos parâmetros da função**." 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "metadata": {}, 112 | "outputs": [], 113 | "source": [] 114 | }, 115 | { 116 | "cell_type": "markdown", 117 | "metadata": {}, 118 | "source": [ 119 | "
\n", 120 | "Caso o parâmetro não seja chamado, seu valor default é usado." 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": null, 126 | "metadata": {}, 127 | "outputs": [], 128 | "source": [] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "### Parâmetros Nomeados\n", 135 | "Ao chamar uma função, podemos passar seus parâmetros em qualquer ordem. Basta que informemos o nome do argumento/variável da função." 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": null, 141 | "metadata": {}, 142 | "outputs": [], 143 | "source": [] 144 | }, 145 | { 146 | "cell_type": "markdown", 147 | "metadata": {}, 148 | "source": [ 149 | "### Function Annotations (PEP 3107)\n", 150 | "Há a possibilidade de indicar o tipo de parâmetros e retorno de funções em Python.
\n", 151 | "Isso se chama _function annotation_.\n", 152 | "\n", 153 | "Os tipos definidos **apenas** servem como indicativo ao programador dos tipos de dados esperados.
\n", 154 | "Algumas bibliotecas externas também podem interpretar tais \"metas anotações\" para algum propósito.\n", 155 | "\n", 156 | "Portanto, o interpretador python **NÃO** leva essas anotações de tipos em consideração durante sua execução." 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "Parâmetros de outros tipos são aceitos e processados normalmente." 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": {}, 177 | "outputs": [], 178 | "source": [] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": {}, 183 | "source": [ 184 | "### Comentários e Docstring\n", 185 | "Em Python, comentários são definidos de duas maneiras:\n", 186 | "\n", 187 | "1. Utilizando # (comentário de uma linha só)" 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "execution_count": 10, 193 | "metadata": {}, 194 | "outputs": [], 195 | "source": [ 196 | "# este é um comentário de uma linha só" 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "metadata": {}, 202 | "source": [ 203 | "2. Usando _Docstrings_ (múltiplas linhas)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 11, 209 | "metadata": {}, 210 | "outputs": [ 211 | { 212 | "data": { 213 | "text/plain": [ 214 | "'Este é um comentário\\nde múltiplas\\nlinhas'" 215 | ] 216 | }, 217 | "execution_count": 11, 218 | "metadata": {}, 219 | "output_type": "execute_result" 220 | } 221 | ], 222 | "source": [ 223 | "'''Este é um comentário\n", 224 | "de múltiplas\n", 225 | "linhas'''\n" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 12, 231 | "metadata": {}, 232 | "outputs": [ 233 | { 234 | "data": { 235 | "text/plain": [ 236 | "'Este é outro comentário\\nde múltiplas\\nlinhas'" 237 | ] 238 | }, 239 | "execution_count": 12, 240 | "metadata": {}, 241 | "output_type": "execute_result" 242 | } 243 | ], 244 | "source": [ 245 | "\"\"\"Este é outro comentário\n", 246 | "de múltiplas\n", 247 | "linhas\"\"\"" 248 | ] 249 | }, 250 | { 251 | "cell_type": "markdown", 252 | "metadata": {}, 253 | "source": [ 254 | "
\n", 255 | "Docstrings podem ser usados para documentar funções:" 256 | ] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "execution_count": 23, 261 | "metadata": {}, 262 | "outputs": [], 263 | "source": [ 264 | "def soma(x, y):\n", 265 | " '''Esta função soma dois números inteiros.\n", 266 | "\n", 267 | " Parameters:\n", 268 | " x (int): Primeiro número inteiro.\n", 269 | " y (int): Segundo número inteiro.\n", 270 | "\n", 271 | " Returns:\n", 272 | " int: Soma resultante\n", 273 | " '''\n", 274 | " return x + y" 275 | ] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "metadata": {}, 280 | "source": [ 281 | "
\n", 282 | "Quando uma função (ou classe) está documentada usando _docstring_, é possível usar a função **help()** para ler a documentação:" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": null, 288 | "metadata": {}, 289 | "outputs": [], 290 | "source": [] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": null, 295 | "metadata": {}, 296 | "outputs": [], 297 | "source": [] 298 | } 299 | ], 300 | "metadata": { 301 | "kernelspec": { 302 | "display_name": "Python 3", 303 | "language": "python", 304 | "name": "python3" 305 | }, 306 | "language_info": { 307 | "codemirror_mode": { 308 | "name": "ipython", 309 | "version": 3 310 | }, 311 | "file_extension": ".py", 312 | "mimetype": "text/x-python", 313 | "name": "python", 314 | "nbconvert_exporter": "python", 315 | "pygments_lexer": "ipython3", 316 | "version": "3.9.0" 317 | } 318 | }, 319 | "nbformat": 4, 320 | "nbformat_minor": 4 321 | } 322 | -------------------------------------------------------------------------------- /codigos_base/03_condicionais.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Condicionais\n", 19 | "\n", 20 | "### Estrutura básica de um IF:\n", 21 | "\n", 22 | "if condition 01:\n", 23 | " Instruction 01\n", 24 | " Instruction 02\n", 25 | "elif (condition 02):\n", 26 | " Instruction 03\n", 27 | " Instruction 04\n", 28 | "else:\n", 29 | " Instruction 05\n", 30 | " Instruction 06\n", 31 | "\n", 32 | " \n", 33 | "Note que as **identações** definem o _escopo_ de cada opção resultante do IF.\n", 34 | "\n", 35 | "As condições devem resultar um valor boolean (True ou False)." 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "### Operadores de Comparação\n", 43 | "\n", 44 | "| Operação | Descrição || Operação | Descrição |\n", 45 | "|---------------|-------------------------------------||---------------|-------------------------------------|\n", 46 | "| ``a == b`` | ``a`` igual a ``b`` || ``a != b`` | ``a`` diferente de ``b`` |\n", 47 | "| ``a < b`` | ``a`` menor do que ``b`` || ``a > b`` | ``a`` maior do que ``b`` |\n", 48 | "| ``a <= b`` | ``a`` menor do que ou igual a ``b`` || ``a >= b`` | ``a`` maior do que ou igual a ``b`` |" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "Opcionalmente, podemos usar _parênteses_ nas condições." 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": null, 68 | "metadata": {}, 69 | "outputs": [], 70 | "source": [] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "### Comparando Booleans" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": null, 82 | "metadata": {}, 83 | "outputs": [], 84 | "source": [] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "### Combinando condições com `and` e`or`" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": null, 96 | "metadata": {}, 97 | "outputs": [], 98 | "source": [] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "### Armazenando booleans resultantes de condicionais" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "metadata": {}, 111 | "outputs": [], 112 | "source": [] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "### Condicionais em uma única linha" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": null, 124 | "metadata": {}, 125 | "outputs": [], 126 | "source": [] 127 | } 128 | ], 129 | "metadata": { 130 | "kernelspec": { 131 | "display_name": "Python 3", 132 | "language": "python", 133 | "name": "python3" 134 | }, 135 | "language_info": { 136 | "codemirror_mode": { 137 | "name": "ipython", 138 | "version": 3 139 | }, 140 | "file_extension": ".py", 141 | "mimetype": "text/x-python", 142 | "name": "python", 143 | "nbconvert_exporter": "python", 144 | "pygments_lexer": "ipython3", 145 | "version": "3.9.0" 146 | } 147 | }, 148 | "nbformat": 4, 149 | "nbformat_minor": 4 150 | } 151 | -------------------------------------------------------------------------------- /codigos_base/04_loops.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Loops\n", 19 | "Antes de definirmos os *laços de repetição em Python (loops)*, vamos ver como definimos intervalos no Python:" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "### Gerando intervalos com `range()`\n", 27 | "Um dos exemplos mais comuns de loops é iterar para um dado **intervalo de valores**.\n", 28 | "\n", 29 | "Suponha que desejamos codificar um loop que itere de 0 até n-1, onde o parâmetro *n* é definido pelo usuários.
\n", 30 | "Em linguagem C, teríamos algo como:\n", 31 | "\n", 32 | "for (int i = 0; i < n; i++) {\n", 33 | " ...\n", 34 | "}\n", 35 | "\n", 36 | " \n", 37 | "Em *Python*, podemos gerar intervalos de valores muito mais fácil, apenas utilizando o comando `range()`, que possui a assinatura:
\n", 38 | "`range(start, end, step)`." 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "#### Entendendo os índices de um Intervalo\n", 46 | "Um intervalo em python sempre **inclui** o número passado como **limite inferior** e *exclui* o número do *limite superior* do intervalo.\n", 47 | "\n", 48 | "P. ex., o intervalo definido pelos números `10 15` corresponde, na verdade, ao intervalo [10, 15), ou seja, [10, 11, 12, 13, 14]" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "#### Gerando um intervalo de 0..n-1\n", 56 | "Se passarmos apenas **um valor/parâmetro** para a função `range()`, a mesma retorna um intervalor de 0 até o valor -1." 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": {}, 63 | "outputs": [], 64 | "source": [] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": {}, 69 | "source": [ 70 | "Note que o retorno é um `range(0, 10)`. Internamente, este tipo é uma _lista_ contendo todos os números do intervalo.
\n", 71 | "Para termos acesso a tal lista explicitamente, precisamos converter o range em uma **`list`**:" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": null, 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "#### Gerando um intervalo de Inicio até Fim-1\n", 86 | "Podemos querer alterar o valor **inicial** do intervalo, que é 0 por padrão. Para isso, devemos passar 2 parâmetros para o `range()`, sendo o primeiro deles o limite inferior (incluso) do intervalo (_lower bound_) e o segundo é o limite superior (excluso) do intevarlo (_upper bound_):" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": {}, 93 | "outputs": [], 94 | "source": [] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": null, 99 | "metadata": {}, 100 | "outputs": [], 101 | "source": [] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "#### Especificando o passo do intervalo\n", 108 | "Por padrão, os intervalos fornecem números sequenciais, ou seja, com **passo/incremento** igual a 1.
\n", 109 | "Podemos alterar tal **passo**. Para isso, basta passarmos um terceiro parâmetro no `range()`" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "metadata": {}, 123 | "outputs": [], 124 | "source": [] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "### `for`\n", 131 | "O esqueleto de um for-loop é:\n", 132 | "\n", 133 | "for i in collection:\n", 134 | " Instruction 01\n", 135 | " Instruction 02\n", 136 | " ...\n", 137 | "
\n", 138 | "\n", 139 | "onde _collection_ é uma coleção de valores que será iterado.
\n", 140 | "No esqueleto acima, a cada iteração, a variável `i` terá um valor da _collection_. \n", 141 | "\n", 142 | "A _collection_ pode ser, por exemplo, um `range()` ou uma `list`:" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": null, 148 | "metadata": {}, 149 | "outputs": [], 150 | "source": [] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": null, 155 | "metadata": {}, 156 | "outputs": [], 157 | "source": [] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": null, 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [] 172 | }, 173 | { 174 | "cell_type": "markdown", 175 | "metadata": {}, 176 | "source": [ 177 | "### While\n", 178 | "\n", 179 | "while condition:\n", 180 | " Instruction 01\n", 181 | " Instruction 02\n", 182 | " ...\n", 183 | "" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": null, 189 | "metadata": {}, 190 | "outputs": [], 191 | "source": [] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": null, 196 | "metadata": {}, 197 | "outputs": [], 198 | "source": [] 199 | } 200 | ], 201 | "metadata": { 202 | "kernelspec": { 203 | "display_name": "Python 3", 204 | "language": "python", 205 | "name": "python3" 206 | }, 207 | "language_info": { 208 | "codemirror_mode": { 209 | "name": "ipython", 210 | "version": 3 211 | }, 212 | "file_extension": ".py", 213 | "mimetype": "text/x-python", 214 | "name": "python", 215 | "nbconvert_exporter": "python", 216 | "pygments_lexer": "ipython3", 217 | "version": "3.9.0" 218 | } 219 | }, 220 | "nbformat": 4, 221 | "nbformat_minor": 4 222 | } 223 | -------------------------------------------------------------------------------- /codigos_base/05_lists.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Lists\n", 19 | "Listas em Python representam uma **sequência de elementos _ordenados_**." 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": null, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "A **ordenação** dos elementos refere-se a seus _posicionamentos_ na lista, ou seja, o primeiro elemento da lista é o 20, o segundo é o 11, e assim por diante.
\n", 34 | "A **ordem** dos valores/conteúdos é outra coisa." 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "metadata": {}, 41 | "outputs": [], 42 | "source": [] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "#### Listas vazias" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": null, 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "#### Listas podem ter elementos de _qualquer tipo_" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": null, 75 | "metadata": {}, 76 | "outputs": [], 77 | "source": [] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "#### Listas podem ter _tipos diferentes_ numa lista:" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "#### Podemos ter listas de listas" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": null, 103 | "metadata": {}, 104 | "outputs": [], 105 | "source": [] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "metadata": {}, 111 | "outputs": [], 112 | "source": [] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": null, 117 | "metadata": {}, 118 | "outputs": [], 119 | "source": [] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": null, 124 | "metadata": {}, 125 | "outputs": [], 126 | "source": [] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [] 134 | }, 135 | { 136 | "cell_type": "markdown", 137 | "metadata": {}, 138 | "source": [ 139 | "### Indexação\n", 140 | "\n", 141 | "Cada elemento de uma lista é indexado a uma posição.
\n", 142 | "Podemos acessar um elemento passando seu índice com []:" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": null, 148 | "metadata": {}, 149 | "outputs": [], 150 | "source": [] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": null, 155 | "metadata": {}, 156 | "outputs": [], 157 | "source": [] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "Listas em Python suporta **índices negativos**, cuja ordem de indexação é o contrário, começando do final para o início:" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": {}, 177 | "outputs": [], 178 | "source": [] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": null, 183 | "metadata": {}, 184 | "outputs": [], 185 | "source": [] 186 | }, 187 | { 188 | "cell_type": "markdown", 189 | "metadata": {}, 190 | "source": [ 191 | "Podemos também acessar o _último elemento_ da lista desta maneira:" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": {}, 198 | "outputs": [], 199 | "source": [] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": {}, 204 | "source": [ 205 | "Inline-style: \n", 206 | "![](./imagens/exemplo_lista_indices.png)" 207 | ] 208 | }, 209 | { 210 | "cell_type": "markdown", 211 | "metadata": {}, 212 | "source": [ 213 | "### Slicing (fatiamento)\n", 214 | "Podemos retornar **uma cópia** dos elementos de um **intervalo contínuo** de uma lista. " 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": null, 220 | "metadata": {}, 221 | "outputs": [], 222 | "source": [] 223 | }, 224 | { 225 | "cell_type": "markdown", 226 | "metadata": {}, 227 | "source": [ 228 | "`planetas[0:3]` é nosso jeito de consultar os elementos da lista `planetas` do índice 0 até o índice 3 (sem incluí-lo)." 229 | ] 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "metadata": {}, 234 | "source": [ 235 | "#### Entendendo os índices de um Intervalo\n", 236 | "Um intervalo em python sempre **inclui** o número passado como **limite inferior** e *exclui* o número do *limite superior* do intervalo.\n", 237 | "\n", 238 | "`[10:15]` são os números do intervalo [10, 15), ou seja, [10, 11, 12, 13, 14]" 239 | ] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "metadata": {}, 244 | "source": [ 245 | "#### De volta ao slicing" 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": {}, 251 | "source": [ 252 | "Os índices iniciais e finais do intervalo do _slicing_ são **opcionais**.\n", 253 | "\n", 254 | "Se não informarmos o _índice inicial_, o valor 0 é assumido:" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "metadata": {}, 261 | "outputs": [], 262 | "source": [] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": null, 267 | "metadata": {}, 268 | "outputs": [], 269 | "source": [] 270 | }, 271 | { 272 | "cell_type": "markdown", 273 | "metadata": {}, 274 | "source": [ 275 | "Se ignorarmos o _índice final_, é assumido o _tamanho da lista_ `len(lista)`:" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": null, 281 | "metadata": {}, 282 | "outputs": [], 283 | "source": [] 284 | }, 285 | { 286 | "cell_type": "markdown", 287 | "metadata": {}, 288 | "source": [ 289 | "Podemos também fazer o slicing com **índices negativos**:" 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": null, 295 | "metadata": {}, 296 | "outputs": [], 297 | "source": [] 298 | }, 299 | { 300 | "cell_type": "markdown", 301 | "metadata": {}, 302 | "source": [ 303 | "`planetas[1:-1]` considera o intervalo que vai do índice [1], o **incluindo**, até o índice [-1] ou [len(planetas) - 1], no exemplo é o índice [7], o **excluindo**.
\n", 304 | "Portanto, o intervalo retornado contém os índices [1, 2, 3, 4, 5, 6]." 305 | ] 306 | }, 307 | { 308 | "cell_type": "markdown", 309 | "metadata": {}, 310 | "source": [ 311 | "
" 312 | ] 313 | }, 314 | { 315 | "cell_type": "markdown", 316 | "metadata": {}, 317 | "source": [ 318 | "Outro exemplo:" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": null, 324 | "metadata": {}, 325 | "outputs": [], 326 | "source": [] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "execution_count": null, 331 | "metadata": {}, 332 | "outputs": [], 333 | "source": [] 334 | }, 335 | { 336 | "cell_type": "markdown", 337 | "metadata": {}, 338 | "source": [ 339 | "Vamos entender o intervalo `[-3:]`.\n", 340 | "\n", 341 | "O índice `[-3]` corresponde ao índice `[len(planetas) - 3]`, ou seja, o índice `[5]`.
\n", 342 | "Portanto, `[-3:]` é sinônonimo de `[5:]`.\n", 343 | "\n", 344 | "Ao omitir o último índice do intervalo, consideramos por padrão `len(planetas)`, que é 8.
\n", 345 | "Logo, `[-3:]` é o mesmo que `[5:8]`, que resulta nos índices `[5, 6, 7]`, que são os índices dos 3 últimos elementos dessa lista." 346 | ] 347 | }, 348 | { 349 | "cell_type": "markdown", 350 | "metadata": {}, 351 | "source": [ 352 | "#### Os elementos retornados pelo Slicing de Listas a uma variável são CÓPIAS" 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "execution_count": null, 358 | "metadata": {}, 359 | "outputs": [], 360 | "source": [] 361 | }, 362 | { 363 | "cell_type": "code", 364 | "execution_count": null, 365 | "metadata": {}, 366 | "outputs": [], 367 | "source": [] 368 | }, 369 | { 370 | "cell_type": "markdown", 371 | "metadata": {}, 372 | "source": [ 373 | "#### Alteração de Múltiplos elementos de uma Lista via Slicing" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": null, 379 | "metadata": {}, 380 | "outputs": [], 381 | "source": [] 382 | }, 383 | { 384 | "cell_type": "markdown", 385 | "metadata": {}, 386 | "source": [ 387 | "
\n", 388 | "\n", 389 | "Se o **número de elementos atribuídos for DIFERENTE do número de elementos do slicing**, os elementos excedentos ou faltantes da lista são ignorados ===> TOME CUIDADO" 390 | ] 391 | }, 392 | { 393 | "cell_type": "code", 394 | "execution_count": null, 395 | "metadata": {}, 396 | "outputs": [], 397 | "source": [] 398 | }, 399 | { 400 | "cell_type": "markdown", 401 | "metadata": {}, 402 | "source": [ 403 | "### For-each em Listas\n", 404 | "Como mostrado no notebook anterior, podemos iterar elementos em uma lista:" 405 | ] 406 | }, 407 | { 408 | "cell_type": "code", 409 | "execution_count": null, 410 | "metadata": {}, 411 | "outputs": [], 412 | "source": [] 413 | }, 414 | { 415 | "cell_type": "code", 416 | "execution_count": null, 417 | "metadata": {}, 418 | "outputs": [], 419 | "source": [] 420 | }, 421 | { 422 | "cell_type": "code", 423 | "execution_count": null, 424 | "metadata": {}, 425 | "outputs": [], 426 | "source": [] 427 | }, 428 | { 429 | "cell_type": "markdown", 430 | "metadata": {}, 431 | "source": [ 432 | "No `for`, podemos também recuperar o **índice** e o *elemento* de uma lista, basta usarmos o comando `enumerate`:\n", 433 | "\n", 434 | "\n", 435 | " for i, elemento in enumerate(lista):\n", 436 | " intrução 01\n", 437 | " ....\n", 438 | "" 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "execution_count": null, 444 | "metadata": {}, 445 | "outputs": [], 446 | "source": [] 447 | }, 448 | { 449 | "cell_type": "code", 450 | "execution_count": null, 451 | "metadata": {}, 452 | "outputs": [], 453 | "source": [] 454 | }, 455 | { 456 | "cell_type": "markdown", 457 | "metadata": {}, 458 | "source": [ 459 | "### Funções de Listas" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": null, 465 | "metadata": {}, 466 | "outputs": [], 467 | "source": [] 468 | }, 469 | { 470 | "cell_type": "markdown", 471 | "metadata": {}, 472 | "source": [ 473 | "`len` retorna o tamanho de uma lista (número de elements)" 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "execution_count": null, 479 | "metadata": {}, 480 | "outputs": [], 481 | "source": [] 482 | }, 483 | { 484 | "cell_type": "markdown", 485 | "metadata": {}, 486 | "source": [ 487 | "`min` retorna o menor elemento de uma lista" 488 | ] 489 | }, 490 | { 491 | "cell_type": "code", 492 | "execution_count": null, 493 | "metadata": {}, 494 | "outputs": [], 495 | "source": [] 496 | }, 497 | { 498 | "cell_type": "markdown", 499 | "metadata": {}, 500 | "source": [ 501 | "`max` retorna o maior elemento de uma lista" 502 | ] 503 | }, 504 | { 505 | "cell_type": "code", 506 | "execution_count": null, 507 | "metadata": {}, 508 | "outputs": [], 509 | "source": [] 510 | }, 511 | { 512 | "cell_type": "markdown", 513 | "metadata": {}, 514 | "source": [ 515 | "`sum` retorna a soma de elementos de uma lista" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": null, 521 | "metadata": {}, 522 | "outputs": [], 523 | "source": [] 524 | }, 525 | { 526 | "cell_type": "markdown", 527 | "metadata": {}, 528 | "source": [ 529 | "### Métodos de Listas" 530 | ] 531 | }, 532 | { 533 | "cell_type": "markdown", 534 | "metadata": {}, 535 | "source": [ 536 | "`list.append` modifica uma lista adicionando um item (de qualquer tipo) no final." 537 | ] 538 | }, 539 | { 540 | "cell_type": "code", 541 | "execution_count": null, 542 | "metadata": {}, 543 | "outputs": [], 544 | "source": [] 545 | }, 546 | { 547 | "cell_type": "code", 548 | "execution_count": null, 549 | "metadata": {}, 550 | "outputs": [], 551 | "source": [] 552 | }, 553 | { 554 | "cell_type": "markdown", 555 | "metadata": {}, 556 | "source": [ 557 | "`list.pop` remove e retorna o último elemento da lista:" 558 | ] 559 | }, 560 | { 561 | "cell_type": "code", 562 | "execution_count": null, 563 | "metadata": {}, 564 | "outputs": [], 565 | "source": [] 566 | }, 567 | { 568 | "cell_type": "code", 569 | "execution_count": null, 570 | "metadata": {}, 571 | "outputs": [], 572 | "source": [] 573 | }, 574 | { 575 | "cell_type": "markdown", 576 | "metadata": {}, 577 | "source": [ 578 | "`reverse` reverte a ordem dos elementos da lista." 579 | ] 580 | }, 581 | { 582 | "cell_type": "code", 583 | "execution_count": null, 584 | "metadata": {}, 585 | "outputs": [], 586 | "source": [] 587 | }, 588 | { 589 | "cell_type": "code", 590 | "execution_count": null, 591 | "metadata": {}, 592 | "outputs": [], 593 | "source": [] 594 | }, 595 | { 596 | "cell_type": "markdown", 597 | "metadata": {}, 598 | "source": [ 599 | "O possível problema é que a **própria lista** é revertida.
\n", 600 | "Caso você deseje ter uma **cópia revertida** da lista:" 601 | ] 602 | }, 603 | { 604 | "cell_type": "code", 605 | "execution_count": null, 606 | "metadata": {}, 607 | "outputs": [], 608 | "source": [] 609 | }, 610 | { 611 | "cell_type": "markdown", 612 | "metadata": {}, 613 | "source": [ 614 | "#### Ordenação de listas" 615 | ] 616 | }, 617 | { 618 | "cell_type": "markdown", 619 | "metadata": {}, 620 | "source": [ 621 | "`sorted` retorna uma versão **ordernada (em ordem crescente)** de uma lista (NÃO ALTERA A LISTA ATUAL)" 622 | ] 623 | }, 624 | { 625 | "cell_type": "code", 626 | "execution_count": null, 627 | "metadata": {}, 628 | "outputs": [], 629 | "source": [] 630 | }, 631 | { 632 | "cell_type": "code", 633 | "execution_count": null, 634 | "metadata": {}, 635 | "outputs": [], 636 | "source": [] 637 | }, 638 | { 639 | "cell_type": "markdown", 640 | "metadata": {}, 641 | "source": [ 642 | "##### Para ordernar em **ordem descrente**" 643 | ] 644 | }, 645 | { 646 | "cell_type": "code", 647 | "execution_count": null, 648 | "metadata": {}, 649 | "outputs": [], 650 | "source": [] 651 | }, 652 | { 653 | "cell_type": "code", 654 | "execution_count": null, 655 | "metadata": {}, 656 | "outputs": [], 657 | "source": [] 658 | }, 659 | { 660 | "cell_type": "markdown", 661 | "metadata": {}, 662 | "source": [ 663 | "#### Buscando elementos em uma lista" 664 | ] 665 | }, 666 | { 667 | "cell_type": "markdown", 668 | "metadata": {}, 669 | "source": [ 670 | "`list.index` retorna o índice de um dado elemento da lista, ou lança uma exception caso ele não esteja presente na lista." 671 | ] 672 | }, 673 | { 674 | "cell_type": "code", 675 | "execution_count": null, 676 | "metadata": {}, 677 | "outputs": [], 678 | "source": [] 679 | }, 680 | { 681 | "cell_type": "code", 682 | "execution_count": null, 683 | "metadata": {}, 684 | "outputs": [], 685 | "source": [] 686 | }, 687 | { 688 | "cell_type": "code", 689 | "execution_count": null, 690 | "metadata": {}, 691 | "outputs": [], 692 | "source": [] 693 | }, 694 | { 695 | "cell_type": "markdown", 696 | "metadata": {}, 697 | "source": [ 698 | "Outra alternativa melhor para saber se **uma lista contém ou não um dado elemento**, sem o lançamento de exception, é usar o `in`:" 699 | ] 700 | }, 701 | { 702 | "cell_type": "code", 703 | "execution_count": null, 704 | "metadata": {}, 705 | "outputs": [], 706 | "source": [] 707 | }, 708 | { 709 | "cell_type": "code", 710 | "execution_count": null, 711 | "metadata": {}, 712 | "outputs": [], 713 | "source": [] 714 | }, 715 | { 716 | "cell_type": "markdown", 717 | "metadata": {}, 718 | "source": [ 719 | "Podemos ainda usar o `not in` para checar se a lista **não possui um dado elemento**:" 720 | ] 721 | }, 722 | { 723 | "cell_type": "code", 724 | "execution_count": null, 725 | "metadata": {}, 726 | "outputs": [], 727 | "source": [] 728 | }, 729 | { 730 | "cell_type": "markdown", 731 | "metadata": {}, 732 | "source": [ 733 | "#### Concatenando listas\n", 734 | "Suponha que desejamos juntar/concatenar duas listas em uma só.
\n", 735 | "Podemos tentar usar o método `append`, pois ele adiciona um dado elemento ao final da lista.\n", 736 | "Vejamos:" 737 | ] 738 | }, 739 | { 740 | "cell_type": "code", 741 | "execution_count": null, 742 | "metadata": {}, 743 | "outputs": [], 744 | "source": [] 745 | }, 746 | { 747 | "cell_type": "code", 748 | "execution_count": null, 749 | "metadata": {}, 750 | "outputs": [], 751 | "source": [] 752 | }, 753 | { 754 | "cell_type": "code", 755 | "execution_count": null, 756 | "metadata": {}, 757 | "outputs": [], 758 | "source": [] 759 | }, 760 | { 761 | "cell_type": "code", 762 | "execution_count": null, 763 | "metadata": {}, 764 | "outputs": [], 765 | "source": [] 766 | }, 767 | { 768 | "cell_type": "markdown", 769 | "metadata": {}, 770 | "source": [ 771 | "Note que a a lista `cidades_estado_sp` tem agora alguns elementos que são _strings_, e o último elemento é uma _lista_.
\n", 772 | "O que queremos, na verdade, é ter uma lista **apenas com _strings_**.\n", 773 | "\n", 774 | "Para isso, podemo usar o método `lista.extend(lista_2)` que vai copiar todos os elementos dentro da lista `lista_2` e colocá-los no final da lista `lista`." 775 | ] 776 | }, 777 | { 778 | "cell_type": "code", 779 | "execution_count": null, 780 | "metadata": {}, 781 | "outputs": [], 782 | "source": [] 783 | }, 784 | { 785 | "cell_type": "code", 786 | "execution_count": null, 787 | "metadata": {}, 788 | "outputs": [], 789 | "source": [] 790 | }, 791 | { 792 | "cell_type": "markdown", 793 | "metadata": {}, 794 | "source": [ 795 | "### List Comprehensions\n", 796 | "É uma forma curta de se criar listas." 797 | ] 798 | }, 799 | { 800 | "cell_type": "markdown", 801 | "metadata": {}, 802 | "source": [ 803 | "**Ex 1)** Suponha que queremos criar uma lista cujo valor do índice [i] é i^2 (o índice ao quadrado).
\n", 804 | "Uma forma padrão seria:" 805 | ] 806 | }, 807 | { 808 | "cell_type": "code", 809 | "execution_count": null, 810 | "metadata": {}, 811 | "outputs": [], 812 | "source": [] 813 | }, 814 | { 815 | "cell_type": "markdown", 816 | "metadata": {}, 817 | "source": [ 818 | "Usando o **list comprehensions**:" 819 | ] 820 | }, 821 | { 822 | "cell_type": "code", 823 | "execution_count": null, 824 | "metadata": {}, 825 | "outputs": [], 826 | "source": [] 827 | }, 828 | { 829 | "cell_type": "markdown", 830 | "metadata": {}, 831 | "source": [ 832 | "**Ex 2)** Filtrando os elementos negativos de uma lista:" 833 | ] 834 | }, 835 | { 836 | "cell_type": "code", 837 | "execution_count": null, 838 | "metadata": {}, 839 | "outputs": [], 840 | "source": [] 841 | }, 842 | { 843 | "cell_type": "markdown", 844 | "metadata": {}, 845 | "source": [ 846 | "Outra maneira de aplicar funções a listas é usar **lambda functions**." 847 | ] 848 | }, 849 | { 850 | "cell_type": "markdown", 851 | "metadata": {}, 852 | "source": [ 853 | "**Ex 3)** Lambda functions:" 854 | ] 855 | }, 856 | { 857 | "cell_type": "code", 858 | "execution_count": null, 859 | "metadata": {}, 860 | "outputs": [], 861 | "source": [] 862 | } 863 | ], 864 | "metadata": { 865 | "kernelspec": { 866 | "display_name": "Python 3", 867 | "language": "python", 868 | "name": "python3" 869 | }, 870 | "language_info": { 871 | "codemirror_mode": { 872 | "name": "ipython", 873 | "version": 3 874 | }, 875 | "file_extension": ".py", 876 | "mimetype": "text/x-python", 877 | "name": "python", 878 | "nbconvert_exporter": "python", 879 | "pygments_lexer": "ipython3", 880 | "version": "3.9.0" 881 | } 882 | }, 883 | "nbformat": 4, 884 | "nbformat_minor": 4 885 | } 886 | -------------------------------------------------------------------------------- /codigos_base/06_strings.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Strings" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "#### Strings são também sequências" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "#### Strings são imutáveis" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "### Métodos de Strings" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "`.upper()` retorna a string com todas as letras maiúscula" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": null, 66 | "metadata": {}, 67 | "outputs": [], 68 | "source": [] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": {}, 73 | "source": [ 74 | "`.lower()` retorna a string com todas as letras minúsculas" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": null, 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "`str.startswith(substring)` checa se a string `str` começa com a substring `substring`. " 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": null, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "`str.endswith(substring)` checa se a string `str` termina com a substring `substring`. " 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "`string.split(substring)` divide uma string, a partir de uma substring passada, retorna uma lista com as divisões." 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": {}, 130 | "outputs": [], 131 | "source": [] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": null, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "metadata": {}, 143 | "source": [ 144 | "`join` junta uma lista de strings, a partir de uma substring. " 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": {}, 151 | "outputs": [], 152 | "source": [] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": {}, 157 | "source": [ 158 | "#### Concatenando strings" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": null, 164 | "metadata": {}, 165 | "outputs": [], 166 | "source": [] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": null, 171 | "metadata": {}, 172 | "outputs": [], 173 | "source": [] 174 | } 175 | ], 176 | "metadata": { 177 | "kernelspec": { 178 | "display_name": "Python 3", 179 | "language": "python", 180 | "name": "python3" 181 | }, 182 | "language_info": { 183 | "codemirror_mode": { 184 | "name": "ipython", 185 | "version": 3 186 | }, 187 | "file_extension": ".py", 188 | "mimetype": "text/x-python", 189 | "name": "python", 190 | "nbconvert_exporter": "python", 191 | "pygments_lexer": "ipython3", 192 | "version": "3.9.0" 193 | } 194 | }, 195 | "nbformat": 4, 196 | "nbformat_minor": 4 197 | } 198 | -------------------------------------------------------------------------------- /codigos_base/07_tuplas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Tuplas\n", 19 | "Tuplas são estruturas muito semelhantes às listas. Eles diferem de duas maneiras:" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "1. Elas usam _parênteses_ ao invés de _colchetes_:" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "2. Elas **não** podem ser modificadas (**imutáveis**)" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "#### Convertendo uma lista em tuplas e vice-versa" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": {}, 61 | "outputs": [], 62 | "source": [] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "### Descompactando tuplas" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "### Zip: Compactando listas" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": null, 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": {}, 96 | "outputs": [], 97 | "source": [] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": null, 102 | "metadata": {}, 103 | "outputs": [], 104 | "source": [] 105 | } 106 | ], 107 | "metadata": { 108 | "kernelspec": { 109 | "display_name": "Python 3", 110 | "language": "python", 111 | "name": "python3" 112 | }, 113 | "language_info": { 114 | "codemirror_mode": { 115 | "name": "ipython", 116 | "version": 3 117 | }, 118 | "file_extension": ".py", 119 | "mimetype": "text/x-python", 120 | "name": "python", 121 | "nbconvert_exporter": "python", 122 | "pygments_lexer": "ipython3", 123 | "version": "3.9.0" 124 | } 125 | }, 126 | "nbformat": 4, 127 | "nbformat_minor": 4 128 | } 129 | -------------------------------------------------------------------------------- /codigos_base/08_dicionarios.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Dicionários (tabelas hash)\n", 19 | "Dicionários são tabelas hash: estruturas que mapeiams _chaves_ à _valores_.
\n", 20 | "Muito utilizado quando queremos **acesso rápido** (_O(1)_) a elementos/valores associados a uma dada chave." 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "Neste caso, 'nome', 'idade' e 'peso' sãos as chaves com os respectivos valores 'Luke Skywalker', 16, 60.0." 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": {}, 40 | "source": [ 41 | "Um dado _valor_ é acessado passando a _chave_ via **colchetes**:" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": null, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "Podemos alterar um valor acessando da mesma maneira:" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": null, 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "Podemos **adicionar** um nome elemento, apenas informando o novo _par de chaves e valor_:" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": null, 75 | "metadata": {}, 76 | "outputs": [], 77 | "source": [] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "Note que usamos **diversos tipos** de _valores_ no mesmo dicionário. Podemos também usar **mais um tipo de chaves**, apesar que, geralmente, isso não é muito usado." 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "Para copiar um dicionário:" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": null, 103 | "metadata": {}, 104 | "outputs": [], 105 | "source": [] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "#### Checando se um dicionário possui uma dada chave" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": null, 117 | "metadata": {}, 118 | "outputs": [], 119 | "source": [] 120 | }, 121 | { 122 | "cell_type": "markdown", 123 | "metadata": {}, 124 | "source": [ 125 | "#### For-each em Dicionários" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": null, 145 | "metadata": {}, 146 | "outputs": [], 147 | "source": [] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "execution_count": null, 152 | "metadata": {}, 153 | "outputs": [], 154 | "source": [] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": null, 159 | "metadata": {}, 160 | "outputs": [], 161 | "source": [] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": null, 166 | "metadata": {}, 167 | "outputs": [], 168 | "source": [] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": null, 173 | "metadata": {}, 174 | "outputs": [], 175 | "source": [] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "metadata": {}, 180 | "source": [ 181 | "#### Dictionary Comprehensions" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": null, 187 | "metadata": {}, 188 | "outputs": [], 189 | "source": [] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "metadata": {}, 195 | "outputs": [], 196 | "source": [] 197 | } 198 | ], 199 | "metadata": { 200 | "kernelspec": { 201 | "display_name": "Python 3", 202 | "language": "python", 203 | "name": "python3" 204 | }, 205 | "language_info": { 206 | "codemirror_mode": { 207 | "name": "ipython", 208 | "version": 3 209 | }, 210 | "file_extension": ".py", 211 | "mimetype": "text/x-python", 212 | "name": "python", 213 | "nbconvert_exporter": "python", 214 | "pygments_lexer": "ipython3", 215 | "version": "3.9.0" 216 | } 217 | }, 218 | "nbformat": 4, 219 | "nbformat_minor": 4 220 | } 221 | -------------------------------------------------------------------------------- /codigos_base/09_bibliotecas_externas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **Python Essencial para Data Science**\n", 8 | "**Prof. Dr. Samuel Martins (@hisamuka @xavecoding)**
\n", 9 | "xavecoding: https://youtube.com/c/xavecoding

\n", 10 | "\n", 11 | "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "## Módulos externas" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "#### Importando um módulo (biblioteca)" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "#### Atribuindo um nome diferente (alias) a um modulo importado" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "#### Importando apenas algumas \"coisas\" (funções, atributos, constantes, ...) de um módulo\n", 54 | "Deixa todas as \"coisas\" acessíveis sem a necessidade de chamar `modulo.coisa`" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": {}, 61 | "outputs": [], 62 | "source": [] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "#### Importando todas as \"coisas\" (funções, atributos, constantes, ...) de um módulo" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "Apesar de possívels, tal prática **não é indicada**, uma vez que (1) \"coisas\", p. ex., de módulos diferentes mas de mesmo nome podem ser importadas, e (2) pode não haver necessidade de ter acesso a todas as \"coisas\" do módulo." 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "### Submódulos\n", 90 | "Alguns módulos podem possuir **submódulo**:" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": null, 96 | "metadata": {}, 97 | "outputs": [], 98 | "source": [] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": null, 103 | "metadata": {}, 104 | "outputs": [], 105 | "source": [] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "### Módulos Uteis" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "- `os`: funções do sistema operacional\n", 119 | "- `glob`: funções para criar listas a partir de diretórios do sistema\n", 120 | "- `shutil`: funções para gerenciar arquivos e diretórios\n", 121 | "- `math`: funções matemáticas\n", 122 | "- `random`: geradores de números aleatórios\n", 123 | "- `pickle`: protocolos para (de-)serialização de dados de entrada e saída" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "### Outros Tópicos" 131 | ] 132 | }, 133 | { 134 | "cell_type": "markdown", 135 | "metadata": {}, 136 | "source": [ 137 | "- Manipulação de arquivos\n", 138 | "- Orientação a objetos\n", 139 | " - Classes\n", 140 | " - Objetos\n", 141 | " - Métodos, métodos estáticos\n", 142 | " - Herança\n", 143 | "- Básico da biblioteca `numpy`\n", 144 | "- Básico da biblioteca `matplotlib`" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": {}, 151 | "outputs": [], 152 | "source": [] 153 | } 154 | ], 155 | "metadata": { 156 | "kernelspec": { 157 | "display_name": "Python 3", 158 | "language": "python", 159 | "name": "python3" 160 | }, 161 | "language_info": { 162 | "codemirror_mode": { 163 | "name": "ipython", 164 | "version": 3 165 | }, 166 | "file_extension": ".py", 167 | "mimetype": "text/x-python", 168 | "name": "python", 169 | "nbconvert_exporter": "python", 170 | "pygments_lexer": "ipython3", 171 | "version": "3.9.0" 172 | } 173 | }, 174 | "nbformat": 4, 175 | "nbformat_minor": 4 176 | } 177 | -------------------------------------------------------------------------------- /hello_world.py: -------------------------------------------------------------------------------- 1 | print('Hello world!') 2 | -------------------------------------------------------------------------------- /imagens/exemplo_lista_indices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xavecoding/python-essencial-para-data-science/4286cdf28a99154b0c9289eed72ad3c5024834d2/imagens/exemplo_lista_indices.png --------------------------------------------------------------------------------