├── README.md ├── data-cleaning-pandas.ipynb ├── data_visualization.ipynb ├── matplotlib-assignment.ipynb ├── numpy_assignment.ipynb ├── python-assignment-1.ipynb ├── python-assignment-2.ipynb ├── python-assignment-3.ipynb ├── python-assignment-4.ipynb └── python-assignment-5.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # iNeuron-ML-Assignments 2 | All the ML assignments from iNeuron ML course is uploaded here. 3 | -------------------------------------------------------------------------------- /data-cleaning-pandas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 7" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Take this monstrosity as the DataFrame to use in the following puzzles:\n", 15 | "df = pd.DataFrame({'From_To': ['LoNDon_paris', 'MAdrid_miLAN', 'londON_StockhOlm', 'Budapest_PaRis', 'Brussels_londOn'],\n", 16 | "\n", 17 | "'FlightNumber': [10045, np.nan, 10065, np.nan, 10085],\n", 18 | "\n", 19 | "'RecentDelays': [[23, 47], [], [24, 43, 87], [13], [67, 32]],\n", 20 | "\n", 21 | "'Airline': ['KLM(!)', ' (12)', '(British Airways. )', '12. Air France', '\"Swiss Air\"']})" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 1, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "import pandas as pd\n", 31 | "import numpy as np" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 2, 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "df = pd.DataFrame({'From_To': ['LoNDon_paris', 'MAdrid_miLAN', 'londON_StockhOlm', 'Budapest_PaRis', 'Brussels_londOn'],\n", 41 | "'FlightNumber': [10045, np.nan, 10065, np.nan, 10085],\n", 42 | "'RecentDelays': [[23, 47], [], [24, 43, 87], [13], [67, 32]],\n", 43 | "'Airline': ['KLM(!)', ' (12)', '(British Airways. )', '12. Air France', '\"Swiss Air\"']})" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 3, 49 | "metadata": {}, 50 | "outputs": [ 51 | { 52 | "data": { 53 | "text/html": [ 54 | "
\n", 55 | "\n", 68 | "\n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | "
From_ToFlightNumberRecentDelaysAirline
0LoNDon_paris10045.0[23, 47]KLM(!)
1MAdrid_miLANNaN[]<Air France> (12)
2londON_StockhOlm10065.0[24, 43, 87](British Airways. )
3Budapest_PaRisNaN[13]12. Air France
4Brussels_londOn10085.0[67, 32]\"Swiss Air\"
\n", 116 | "
" 117 | ], 118 | "text/plain": [ 119 | " From_To FlightNumber RecentDelays Airline\n", 120 | "0 LoNDon_paris 10045.0 [23, 47] KLM(!)\n", 121 | "1 MAdrid_miLAN NaN [] (12)\n", 122 | "2 londON_StockhOlm 10065.0 [24, 43, 87] (British Airways. )\n", 123 | "3 Budapest_PaRis NaN [13] 12. Air France\n", 124 | "4 Brussels_londOn 10085.0 [67, 32] \"Swiss Air\"" 125 | ] 126 | }, 127 | "execution_count": 3, 128 | "metadata": {}, 129 | "output_type": "execute_result" 130 | } 131 | ], 132 | "source": [ 133 | "df" 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "**Some values in the the FlightNumber column are missing. These numbers are meant to increase by 10 with each row so 10055 and 10075 need to be put in place. Fill in these missing numbers and make the column an integer column (instead of a float column).**" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 4, 146 | "metadata": {}, 147 | "outputs": [], 148 | "source": [ 149 | "df['FlightNumber'].fillna(value=df['FlightNumber'][0]+10, limit=1, inplace=True)\n", 150 | "df['FlightNumber'].fillna(value=df['FlightNumber'][2]+10, limit=1, inplace=True)" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": 5, 156 | "metadata": {}, 157 | "outputs": [ 158 | { 159 | "data": { 160 | "text/html": [ 161 | "
\n", 162 | "\n", 175 | "\n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | "
From_ToFlightNumberRecentDelaysAirline
0LoNDon_paris10045.0[23, 47]KLM(!)
1MAdrid_miLAN10055.0[]<Air France> (12)
2londON_StockhOlm10065.0[24, 43, 87](British Airways. )
3Budapest_PaRis10075.0[13]12. Air France
4Brussels_londOn10085.0[67, 32]\"Swiss Air\"
\n", 223 | "
" 224 | ], 225 | "text/plain": [ 226 | " From_To FlightNumber RecentDelays Airline\n", 227 | "0 LoNDon_paris 10045.0 [23, 47] KLM(!)\n", 228 | "1 MAdrid_miLAN 10055.0 [] (12)\n", 229 | "2 londON_StockhOlm 10065.0 [24, 43, 87] (British Airways. )\n", 230 | "3 Budapest_PaRis 10075.0 [13] 12. Air France\n", 231 | "4 Brussels_londOn 10085.0 [67, 32] \"Swiss Air\"" 232 | ] 233 | }, 234 | "execution_count": 5, 235 | "metadata": {}, 236 | "output_type": "execute_result" 237 | } 238 | ], 239 | "source": [ 240 | "df" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 6, 246 | "metadata": {}, 247 | "outputs": [ 248 | { 249 | "data": { 250 | "text/plain": [ 251 | "dtype('float64')" 252 | ] 253 | }, 254 | "execution_count": 6, 255 | "metadata": {}, 256 | "output_type": "execute_result" 257 | } 258 | ], 259 | "source": [ 260 | "df['FlightNumber'].dtype" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 7, 266 | "metadata": {}, 267 | "outputs": [ 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "dtype('int64')" 272 | ] 273 | }, 274 | "execution_count": 7, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | } 278 | ], 279 | "source": [ 280 | "df['FlightNumber'] = df['FlightNumber'].astype(np.int64)\n", 281 | "df['FlightNumber'].dtype" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 8, 287 | "metadata": {}, 288 | "outputs": [ 289 | { 290 | "data": { 291 | "text/html": [ 292 | "
\n", 293 | "\n", 306 | "\n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | "
From_ToFlightNumberRecentDelaysAirline
0LoNDon_paris10045[23, 47]KLM(!)
1MAdrid_miLAN10055[]<Air France> (12)
2londON_StockhOlm10065[24, 43, 87](British Airways. )
3Budapest_PaRis10075[13]12. Air France
4Brussels_londOn10085[67, 32]\"Swiss Air\"
\n", 354 | "
" 355 | ], 356 | "text/plain": [ 357 | " From_To FlightNumber RecentDelays Airline\n", 358 | "0 LoNDon_paris 10045 [23, 47] KLM(!)\n", 359 | "1 MAdrid_miLAN 10055 [] (12)\n", 360 | "2 londON_StockhOlm 10065 [24, 43, 87] (British Airways. )\n", 361 | "3 Budapest_PaRis 10075 [13] 12. Air France\n", 362 | "4 Brussels_londOn 10085 [67, 32] \"Swiss Air\"" 363 | ] 364 | }, 365 | "execution_count": 8, 366 | "metadata": {}, 367 | "output_type": "execute_result" 368 | } 369 | ], 370 | "source": [ 371 | "df" 372 | ] 373 | }, 374 | { 375 | "cell_type": "markdown", 376 | "metadata": {}, 377 | "source": [ 378 | "**The From_To column would be better as two separate columns! Split each string on the underscore delimiter _ to give a new temporary DataFrame with the correct values. Assign the correct column names to this temporary DataFrame.**" 379 | ] 380 | }, 381 | { 382 | "cell_type": "code", 383 | "execution_count": 9, 384 | "metadata": {}, 385 | "outputs": [ 386 | { 387 | "data": { 388 | "text/html": [ 389 | "
\n", 390 | "\n", 403 | "\n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | "
FromTo
0LoNDonparis
1MAdridmiLAN
2londONStockhOlm
3BudapestPaRis
4BrusselslondOn
\n", 439 | "
" 440 | ], 441 | "text/plain": [ 442 | " From To\n", 443 | "0 LoNDon paris\n", 444 | "1 MAdrid miLAN\n", 445 | "2 londON StockhOlm\n", 446 | "3 Budapest PaRis\n", 447 | "4 Brussels londOn" 448 | ] 449 | }, 450 | "execution_count": 9, 451 | "metadata": {}, 452 | "output_type": "execute_result" 453 | } 454 | ], 455 | "source": [ 456 | "temp_data = pd.DataFrame(df['From_To'].str.split('_', 1).to_list(), columns = ['From','To'])\n", 457 | "temp_data" 458 | ] 459 | }, 460 | { 461 | "cell_type": "markdown", 462 | "metadata": {}, 463 | "source": [ 464 | "**Notice how the capitalisation of the city names is all mixed up in this temporary DataFrame. Standardise the strings so that only the first letter is uppercase (e.g. \"londON\" should become \"London\".)**" 465 | ] 466 | }, 467 | { 468 | "cell_type": "code", 469 | "execution_count": 10, 470 | "metadata": {}, 471 | "outputs": [], 472 | "source": [ 473 | "temp_data['From'] = temp_data['From'].str.capitalize()\n", 474 | "temp_data['To'] = temp_data['To'].str.capitalize()" 475 | ] 476 | }, 477 | { 478 | "cell_type": "code", 479 | "execution_count": 11, 480 | "metadata": {}, 481 | "outputs": [ 482 | { 483 | "data": { 484 | "text/html": [ 485 | "
\n", 486 | "\n", 499 | "\n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | "
FromTo
0LondonParis
1MadridMilan
2LondonStockholm
3BudapestParis
4BrusselsLondon
\n", 535 | "
" 536 | ], 537 | "text/plain": [ 538 | " From To\n", 539 | "0 London Paris\n", 540 | "1 Madrid Milan\n", 541 | "2 London Stockholm\n", 542 | "3 Budapest Paris\n", 543 | "4 Brussels London" 544 | ] 545 | }, 546 | "execution_count": 11, 547 | "metadata": {}, 548 | "output_type": "execute_result" 549 | } 550 | ], 551 | "source": [ 552 | "temp_data" 553 | ] 554 | }, 555 | { 556 | "cell_type": "markdown", 557 | "metadata": {}, 558 | "source": [ 559 | "**Delete the From_To column from df and attach the temporary DataFrame from the previous questions.**" 560 | ] 561 | }, 562 | { 563 | "cell_type": "code", 564 | "execution_count": 12, 565 | "metadata": {}, 566 | "outputs": [ 567 | { 568 | "data": { 569 | "text/html": [ 570 | "
\n", 571 | "\n", 584 | "\n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | "
FlightNumberRecentDelaysAirline
010045[23, 47]KLM(!)
110055[]<Air France> (12)
210065[24, 43, 87](British Airways. )
310075[13]12. Air France
410085[67, 32]\"Swiss Air\"
\n", 626 | "
" 627 | ], 628 | "text/plain": [ 629 | " FlightNumber RecentDelays Airline\n", 630 | "0 10045 [23, 47] KLM(!)\n", 631 | "1 10055 [] (12)\n", 632 | "2 10065 [24, 43, 87] (British Airways. )\n", 633 | "3 10075 [13] 12. Air France\n", 634 | "4 10085 [67, 32] \"Swiss Air\"" 635 | ] 636 | }, 637 | "execution_count": 12, 638 | "metadata": {}, 639 | "output_type": "execute_result" 640 | } 641 | ], 642 | "source": [ 643 | "df.drop(['From_To'], inplace=True, axis=1)\n", 644 | "df" 645 | ] 646 | }, 647 | { 648 | "cell_type": "code", 649 | "execution_count": 13, 650 | "metadata": {}, 651 | "outputs": [ 652 | { 653 | "data": { 654 | "text/html": [ 655 | "
\n", 656 | "\n", 669 | "\n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | "
FromToFlightNumberRecentDelaysAirline
0LondonParis10045[23, 47]KLM(!)
1MadridMilan10055[]<Air France> (12)
2LondonStockholm10065[24, 43, 87](British Airways. )
3BudapestParis10075[13]12. Air France
4BrusselsLondon10085[67, 32]\"Swiss Air\"
\n", 723 | "
" 724 | ], 725 | "text/plain": [ 726 | " From To FlightNumber RecentDelays Airline\n", 727 | "0 London Paris 10045 [23, 47] KLM(!)\n", 728 | "1 Madrid Milan 10055 [] (12)\n", 729 | "2 London Stockholm 10065 [24, 43, 87] (British Airways. )\n", 730 | "3 Budapest Paris 10075 [13] 12. Air France\n", 731 | "4 Brussels London 10085 [67, 32] \"Swiss Air\"" 732 | ] 733 | }, 734 | "execution_count": 13, 735 | "metadata": {}, 736 | "output_type": "execute_result" 737 | } 738 | ], 739 | "source": [ 740 | "df = pd.concat([temp_data, df], axis=1, sort=False)\n", 741 | "df" 742 | ] 743 | }, 744 | { 745 | "cell_type": "markdown", 746 | "metadata": {}, 747 | "source": [ 748 | "**In the RecentDelays column, the values have been entered into the DataFrame as a list. We would like each first value in its own column, each second value in its own column, and so on. If there isn't an Nth value, the value should be NaN.**\n", 749 | "\n", 750 | "**Expand the Series of lists into a DataFrame named delays, rename the columns delay_1, delay_2, etc. and replace the unwanted RecentDelays column in df with delays.**" 751 | ] 752 | }, 753 | { 754 | "cell_type": "code", 755 | "execution_count": 14, 756 | "metadata": {}, 757 | "outputs": [ 758 | { 759 | "data": { 760 | "text/html": [ 761 | "
\n", 762 | "\n", 775 | "\n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | "
delay_1delay_2delay_3
023.047.0NaN
1NaNNaNNaN
224.043.087.0
313.0NaNNaN
467.032.0NaN
\n", 817 | "
" 818 | ], 819 | "text/plain": [ 820 | " delay_1 delay_2 delay_3\n", 821 | "0 23.0 47.0 NaN\n", 822 | "1 NaN NaN NaN\n", 823 | "2 24.0 43.0 87.0\n", 824 | "3 13.0 NaN NaN\n", 825 | "4 67.0 32.0 NaN" 826 | ] 827 | }, 828 | "execution_count": 14, 829 | "metadata": {}, 830 | "output_type": "execute_result" 831 | } 832 | ], 833 | "source": [ 834 | "delays = pd.DataFrame(df['RecentDelays'].to_list(), columns = ['delay_1', 'delay_2', 'delay_3'])\n", 835 | "delays" 836 | ] 837 | }, 838 | { 839 | "cell_type": "code", 840 | "execution_count": 15, 841 | "metadata": {}, 842 | "outputs": [ 843 | { 844 | "data": { 845 | "text/html": [ 846 | "
\n", 847 | "\n", 860 | "\n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | "
FromToFlightNumberAirline
0LondonParis10045KLM(!)
1MadridMilan10055<Air France> (12)
2LondonStockholm10065(British Airways. )
3BudapestParis1007512. Air France
4BrusselsLondon10085\"Swiss Air\"
\n", 908 | "
" 909 | ], 910 | "text/plain": [ 911 | " From To FlightNumber Airline\n", 912 | "0 London Paris 10045 KLM(!)\n", 913 | "1 Madrid Milan 10055 (12)\n", 914 | "2 London Stockholm 10065 (British Airways. )\n", 915 | "3 Budapest Paris 10075 12. Air France\n", 916 | "4 Brussels London 10085 \"Swiss Air\"" 917 | ] 918 | }, 919 | "execution_count": 15, 920 | "metadata": {}, 921 | "output_type": "execute_result" 922 | } 923 | ], 924 | "source": [ 925 | "df.drop(['RecentDelays'], inplace=True, axis=1)\n", 926 | "df" 927 | ] 928 | }, 929 | { 930 | "cell_type": "code", 931 | "execution_count": 16, 932 | "metadata": {}, 933 | "outputs": [ 934 | { 935 | "data": { 936 | "text/html": [ 937 | "
\n", 938 | "\n", 951 | "\n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | "
FromToFlightNumberdelay_1delay_2delay_3Airline
0LondonParis1004523.047.0NaNKLM(!)
1MadridMilan10055NaNNaNNaN<Air France> (12)
2LondonStockholm1006524.043.087.0(British Airways. )
3BudapestParis1007513.0NaNNaN12. Air France
4BrusselsLondon1008567.032.0NaN\"Swiss Air\"
\n", 1017 | "
" 1018 | ], 1019 | "text/plain": [ 1020 | " From To FlightNumber delay_1 delay_2 delay_3 \\\n", 1021 | "0 London Paris 10045 23.0 47.0 NaN \n", 1022 | "1 Madrid Milan 10055 NaN NaN NaN \n", 1023 | "2 London Stockholm 10065 24.0 43.0 87.0 \n", 1024 | "3 Budapest Paris 10075 13.0 NaN NaN \n", 1025 | "4 Brussels London 10085 67.0 32.0 NaN \n", 1026 | "\n", 1027 | " Airline \n", 1028 | "0 KLM(!) \n", 1029 | "1 (12) \n", 1030 | "2 (British Airways. ) \n", 1031 | "3 12. Air France \n", 1032 | "4 \"Swiss Air\" " 1033 | ] 1034 | }, 1035 | "execution_count": 16, 1036 | "metadata": {}, 1037 | "output_type": "execute_result" 1038 | } 1039 | ], 1040 | "source": [ 1041 | "df.insert(loc = 3, column='delay_1' , value=delays['delay_1'])\n", 1042 | "df.insert(loc = 4, column='delay_2' , value=delays['delay_2'])\n", 1043 | "df.insert(loc = 5, column='delay_3' , value=delays['delay_3'])\n", 1044 | "df" 1045 | ] 1046 | } 1047 | ], 1048 | "metadata": { 1049 | "kernelspec": { 1050 | "display_name": "Python 3", 1051 | "language": "python", 1052 | "name": "python3" 1053 | }, 1054 | "language_info": { 1055 | "codemirror_mode": { 1056 | "name": "ipython", 1057 | "version": 3 1058 | }, 1059 | "file_extension": ".py", 1060 | "mimetype": "text/x-python", 1061 | "name": "python", 1062 | "nbconvert_exporter": "python", 1063 | "pygments_lexer": "ipython3", 1064 | "version": "3.7.6" 1065 | } 1066 | }, 1067 | "nbformat": 4, 1068 | "nbformat_minor": 4 1069 | } 1070 | -------------------------------------------------------------------------------- /matplotlib-assignment.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 9" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### We have the min and max temperatures in a city In India for each months of the year. We would like to find a function to describe this and show it graphically, the dataset given below.\n", 15 | "\n", 16 | "**Data**\n", 17 | "\n", 18 | "Max = 39, 41, 43, 47, 49, 51, 45, 38, 37, 29, 27, 25\n", 19 | "\n", 20 | "Min = 21, 23, 27, 28, 32, 35, 31, 28, 21, 19, 17, 18" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 1, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "import numpy as np\n", 30 | "\n", 31 | "max_temp = np.array([39, 41, 43, 47, 49, 51, 45, 38, 37, 29, 27, 25])\n", 32 | "min_temp = np.array([21, 23, 27, 28, 32, 35, 31, 28, 21, 19, 17, 18])" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": {}, 39 | "outputs": [ 40 | { 41 | "data": { 42 | "text/plain": [ 43 | "Text(0, 0.5, 'Min and max temperature')" 44 | ] 45 | }, 46 | "execution_count": 2, 47 | "metadata": {}, 48 | "output_type": "execute_result" 49 | }, 50 | { 51 | "data": { 52 | "image/png": "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\n", 53 | "text/plain": [ 54 | "
" 55 | ] 56 | }, 57 | "metadata": { 58 | "needs_background": "light" 59 | }, 60 | "output_type": "display_data" 61 | } 62 | ], 63 | "source": [ 64 | "import matplotlib.pyplot as plt\n", 65 | "\n", 66 | "months = np.arange(12)\n", 67 | "plt.figure(figsize=(8,6))\n", 68 | "plt.plot(months, max_temp, 'ro')\n", 69 | "plt.plot(months, min_temp, 'bo')\n", 70 | "plt.xlabel('Months')\n", 71 | "plt.ylabel('Min and max temperature')" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "### Task:\n", 79 | "\n", 80 | "**1. Fitting it to the periodic function**" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 3, 86 | "metadata": {}, 87 | "outputs": [], 88 | "source": [ 89 | "from scipy import optimize\n", 90 | "\n", 91 | "def yearly_temps(times, avg, ampl, time_offset):\n", 92 | " return (avg\n", 93 | " + ampl * np.cos((times + time_offset) * 2 * np.pi / times.max()))\n", 94 | "\n", 95 | "res_max, cov_max = optimize.curve_fit(yearly_temps, months, max_temp, [20, 10, 0])\n", 96 | "res_min, cov_min = optimize.curve_fit(yearly_temps, months, min_temp, [-40, 20, 0])" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "**2. Plot the fit**" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 4, 109 | "metadata": {}, 110 | "outputs": [ 111 | { 112 | "data": { 113 | "image/png": "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\n", 114 | "text/plain": [ 115 | "
" 116 | ] 117 | }, 118 | "metadata": { 119 | "needs_background": "light" 120 | }, 121 | "output_type": "display_data" 122 | } 123 | ], 124 | "source": [ 125 | "days = np.linspace(0, 12, num=365)\n", 126 | "\n", 127 | "plt.figure(figsize=(8,6))\n", 128 | "plt.plot(months, max_temp, 'ro')\n", 129 | "plt.plot(days, yearly_temps(days, *res_max), 'r-')\n", 130 | "plt.plot(months, min_temp, 'bo')\n", 131 | "plt.plot(days, yearly_temps(days, *res_min), 'b-')\n", 132 | "plt.xlabel('Month')\n", 133 | "plt.ylabel('Temperature ($^\\circ$C)')\n", 134 | "\n", 135 | "plt.show()" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "### This assignment is for visualization using matplotlib:\n", 143 | "\n", 144 | "**Data to use:**\n", 145 | "**https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_original.csv**" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": 5, 151 | "metadata": {}, 152 | "outputs": [ 153 | { 154 | "data": { 155 | "text/html": [ 156 | "
\n", 157 | "\n", 170 | "\n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | "
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
01.01.0Allen, Miss. Elisabeth Waltonfemale29.00000.00.024160211.3375B5S2NaNSt Louis, MO
11.01.0Allison, Master. Hudson Trevormale0.91671.02.0113781151.5500C22 C26S11NaNMontreal, PQ / Chesterville, ON
21.00.0Allison, Miss. Helen Lorainefemale2.00001.02.0113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
31.00.0Allison, Mr. Hudson Joshua Creightonmale30.00001.02.0113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON
41.00.0Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.00001.02.0113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
\n", 278 | "
" 279 | ], 280 | "text/plain": [ 281 | " pclass survived name sex \\\n", 282 | "0 1.0 1.0 Allen, Miss. Elisabeth Walton female \n", 283 | "1 1.0 1.0 Allison, Master. Hudson Trevor male \n", 284 | "2 1.0 0.0 Allison, Miss. Helen Loraine female \n", 285 | "3 1.0 0.0 Allison, Mr. Hudson Joshua Creighton male \n", 286 | "4 1.0 0.0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female \n", 287 | "\n", 288 | " age sibsp parch ticket fare cabin embarked boat body \\\n", 289 | "0 29.0000 0.0 0.0 24160 211.3375 B5 S 2 NaN \n", 290 | "1 0.9167 1.0 2.0 113781 151.5500 C22 C26 S 11 NaN \n", 291 | "2 2.0000 1.0 2.0 113781 151.5500 C22 C26 S NaN NaN \n", 292 | "3 30.0000 1.0 2.0 113781 151.5500 C22 C26 S NaN 135.0 \n", 293 | "4 25.0000 1.0 2.0 113781 151.5500 C22 C26 S NaN NaN \n", 294 | "\n", 295 | " home.dest \n", 296 | "0 St Louis, MO \n", 297 | "1 Montreal, PQ / Chesterville, ON \n", 298 | "2 Montreal, PQ / Chesterville, ON \n", 299 | "3 Montreal, PQ / Chesterville, ON \n", 300 | "4 Montreal, PQ / Chesterville, ON " 301 | ] 302 | }, 303 | "execution_count": 5, 304 | "metadata": {}, 305 | "output_type": "execute_result" 306 | } 307 | ], 308 | "source": [ 309 | "import pandas as pd\n", 310 | "\n", 311 | "url = 'https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_original.csv'\n", 312 | "titanic = pd.read_csv(url)\n", 313 | "titanic.head()" 314 | ] 315 | }, 316 | { 317 | "cell_type": "markdown", 318 | "metadata": {}, 319 | "source": [ 320 | "**1. Create a pie chart presenting the male/female proportion**" 321 | ] 322 | }, 323 | { 324 | "cell_type": "code", 325 | "execution_count": 6, 326 | "metadata": {}, 327 | "outputs": [ 328 | { 329 | "data": { 330 | "text/plain": [ 331 | "0 0\n", 332 | "1 1\n", 333 | "2 0\n", 334 | "3 1\n", 335 | "4 0\n", 336 | "dtype: int8" 337 | ] 338 | }, 339 | "execution_count": 6, 340 | "metadata": {}, 341 | "output_type": "execute_result" 342 | } 343 | ], 344 | "source": [ 345 | "gender = titanic['sex'].astype('category')\n", 346 | "gender = gender.cat.codes\n", 347 | "gender.head()" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 7, 353 | "metadata": {}, 354 | "outputs": [ 355 | { 356 | "data": { 357 | "image/png": "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\n", 358 | "text/plain": [ 359 | "
" 360 | ] 361 | }, 362 | "metadata": {}, 363 | "output_type": "display_data" 364 | } 365 | ], 366 | "source": [ 367 | "plt.pie(gender.value_counts(), labels = titanic['sex'].unique(), autopct='%1.1f%%')\n", 368 | "plt.title('Male/Female Proportion')\n", 369 | "plt.axis('equal')\n", 370 | "plt.show()" 371 | ] 372 | }, 373 | { 374 | "cell_type": "markdown", 375 | "metadata": {}, 376 | "source": [ 377 | "**2. Create a scatterplot with the Fare paid and the Age, differ the plot color by gender**" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 8, 383 | "metadata": {}, 384 | "outputs": [ 385 | { 386 | "data": { 387 | "image/png": "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\n", 388 | "text/plain": [ 389 | "
" 390 | ] 391 | }, 392 | "metadata": { 393 | "needs_background": "light" 394 | }, 395 | "output_type": "display_data" 396 | } 397 | ], 398 | "source": [ 399 | "plt.figure(figsize=(8,6))\n", 400 | "plt.scatter(titanic['age'], titanic['fare'], c = gender)\n", 401 | "plt.xlabel(\"Age\")\n", 402 | "plt.ylabel(\"Fare Paid\")\n", 403 | "plt.show()" 404 | ] 405 | } 406 | ], 407 | "metadata": { 408 | "kernelspec": { 409 | "display_name": "Python 3", 410 | "language": "python", 411 | "name": "python3" 412 | }, 413 | "language_info": { 414 | "codemirror_mode": { 415 | "name": "ipython", 416 | "version": 3 417 | }, 418 | "file_extension": ".py", 419 | "mimetype": "text/x-python", 420 | "name": "python", 421 | "nbconvert_exporter": "python", 422 | "pygments_lexer": "ipython3", 423 | "version": "3.7.6" 424 | } 425 | }, 426 | "nbformat": 4, 427 | "nbformat_minor": 4 428 | } 429 | -------------------------------------------------------------------------------- /numpy_assignment.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "numpy-assignment.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "id": "yCkR_Uuu1XgQ", 19 | "colab_type": "text" 20 | }, 21 | "source": [ 22 | "# Assignment 6" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": { 28 | "id": "RoYVL1sE1em-", 29 | "colab_type": "text" 30 | }, 31 | "source": [ 32 | "### Write a function so that the columns of the output matrix are powers of the input vector.\n", 33 | "### The order of the powers is determined by the increasing boolean argument. Specifically, when increasing is False, the i-th output column is the input vector raised element-wise to the power of N - i - 1.\n", 34 | "\n", 35 | "**HINT: Such a matrix with a geometric progression in each row is named for Alexandre-Theophile Vandermonde.**" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "metadata": { 41 | "id": "fPwfKgaw8nho", 42 | "colab_type": "code", 43 | "colab": {} 44 | }, 45 | "source": [ 46 | "import numpy as np" 47 | ], 48 | "execution_count": 0, 49 | "outputs": [] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "metadata": { 54 | "id": "TNmGS6wS1GzT", 55 | "colab_type": "code", 56 | "colab": {} 57 | }, 58 | "source": [ 59 | "def alexTheoVander(iVector, n, increasing = False):\n", 60 | " if increasing:\n", 61 | " oMatrix = np.matrix([x**i for x in iVector for i in range(n)]).reshape(iVector.size, n)\n", 62 | " else:\n", 63 | " oMatrix = np.matrix([x**(n-i-1) for x in iVector for i in range(n)]).reshape(iVector.size, n)\n", 64 | " return oMatrix" 65 | ], 66 | "execution_count": 0, 67 | "outputs": [] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "metadata": { 72 | "id": "b0J4tOWB_0Ba", 73 | "colab_type": "code", 74 | "colab": {} 75 | }, 76 | "source": [ 77 | "iVector = np.array([1, 3, 5, 7, 9])\n", 78 | "n = 5" 79 | ], 80 | "execution_count": 0, 81 | "outputs": [] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "metadata": { 86 | "id": "mLuCu5RKA1XO", 87 | "colab_type": "code", 88 | "colab": { 89 | "base_uri": "https://localhost:8080/", 90 | "height": 109 91 | }, 92 | "outputId": "0812f95e-0b1a-4fc4-da77-972bb59fde25" 93 | }, 94 | "source": [ 95 | "oMtarix_asc = alexTheoVander(iVector, n, True)\n", 96 | "oMtarix_asc" 97 | ], 98 | "execution_count": 4, 99 | "outputs": [ 100 | { 101 | "output_type": "execute_result", 102 | "data": { 103 | "text/plain": [ 104 | "matrix([[ 1, 1, 1, 1, 1],\n", 105 | " [ 1, 3, 9, 27, 81],\n", 106 | " [ 1, 5, 25, 125, 625],\n", 107 | " [ 1, 7, 49, 343, 2401],\n", 108 | " [ 1, 9, 81, 729, 6561]])" 109 | ] 110 | }, 111 | "metadata": { 112 | "tags": [] 113 | }, 114 | "execution_count": 4 115 | } 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "metadata": { 121 | "id": "KvDjT30iA2yO", 122 | "colab_type": "code", 123 | "colab": { 124 | "base_uri": "https://localhost:8080/", 125 | "height": 109 126 | }, 127 | "outputId": "8033acf3-fdce-48bf-c6eb-0740dafded0d" 128 | }, 129 | "source": [ 130 | "oMtarix_desc = alexTheoVander(iVector, n, False)\n", 131 | "oMtarix_desc" 132 | ], 133 | "execution_count": 5, 134 | "outputs": [ 135 | { 136 | "output_type": "execute_result", 137 | "data": { 138 | "text/plain": [ 139 | "matrix([[ 1, 1, 1, 1, 1],\n", 140 | " [ 81, 27, 9, 3, 1],\n", 141 | " [ 625, 125, 25, 5, 1],\n", 142 | " [2401, 343, 49, 7, 1],\n", 143 | " [6561, 729, 81, 9, 1]])" 144 | ] 145 | }, 146 | "metadata": { 147 | "tags": [] 148 | }, 149 | "execution_count": 5 150 | } 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": { 156 | "id": "rvXcwej9Bv_O", 157 | "colab_type": "text" 158 | }, 159 | "source": [ 160 | "### Write a function to find moving average in an array over a window:\n", 161 | "Test it over [3, 5, 7, 2, 8, 10, 11, 65, 72, 81, 99, 100, 150] and window of 3." 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "metadata": { 167 | "id": "9Ox7Dqu8Pe8h", 168 | "colab_type": "code", 169 | "colab": {} 170 | }, 171 | "source": [ 172 | "def movingAverage(inputValue, k):\n", 173 | " z = 1\n", 174 | " output = np.convolve(inputValue, np.ones(k), 'valid') / k\n", 175 | " for i in output:\n", 176 | " print(\"y{0} = {1:.2f}\".format(z, i))\n", 177 | " z += 1" 178 | ], 179 | "execution_count": 0, 180 | "outputs": [] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "metadata": { 185 | "id": "65Nhe55iqA_x", 186 | "colab_type": "code", 187 | "colab": { 188 | "base_uri": "https://localhost:8080/", 189 | "height": 219 190 | }, 191 | "outputId": "45382c1d-1ef4-4ed2-d293-bd746bbbc967" 192 | }, 193 | "source": [ 194 | "inputValue = np.array([3, 5, 7, 2, 8, 10, 11, 65, 72, 81, 99, 100, 150])\n", 195 | "k = 3\n", 196 | "movingAverage(inputValue, k)" 197 | ], 198 | "execution_count": 7, 199 | "outputs": [ 200 | { 201 | "output_type": "stream", 202 | "text": [ 203 | "y1 = 5.00\n", 204 | "y2 = 4.67\n", 205 | "y3 = 5.67\n", 206 | "y4 = 6.67\n", 207 | "y5 = 9.67\n", 208 | "y6 = 28.67\n", 209 | "y7 = 49.33\n", 210 | "y8 = 72.67\n", 211 | "y9 = 84.00\n", 212 | "y10 = 93.33\n", 213 | "y11 = 116.33\n" 214 | ], 215 | "name": "stdout" 216 | } 217 | ] 218 | } 219 | ] 220 | } -------------------------------------------------------------------------------- /python-assignment-1.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 1" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "#### Question 1" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "**Write a program which will find all such numbers which are divisible by 7 but are not a multiple\n", 22 | "of 5, between 2000 and 3200 (both included). The numbers obtained should be printed in a\n", 23 | "comma-separated sequence on a single line.**" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 1, 29 | "metadata": {}, 30 | "outputs": [ 31 | { 32 | "name": "stdout", 33 | "output_type": "stream", 34 | "text": [ 35 | "2002, 2009, 2016, 2023, 2037, 2044, 2051, 2058, 2072, 2079, 2086, 2093, 2107, 2114, 2121, 2128, 2142, 2149, 2156, 2163, 2177, 2184, 2191, 2198, 2212, 2219, 2226, 2233, 2247, 2254, 2261, 2268, 2282, 2289, 2296, 2303, 2317, 2324, 2331, 2338, 2352, 2359, 2366, 2373, 2387, 2394, 2401, 2408, 2422, 2429, 2436, 2443, 2457, 2464, 2471, 2478, 2492, 2499, 2506, 2513, 2527, 2534, 2541, 2548, 2562, 2569, 2576, 2583, 2597, 2604, 2611, 2618, 2632, 2639, 2646, 2653, 2667, 2674, 2681, 2688, 2702, 2709, 2716, 2723, 2737, 2744, 2751, 2758, 2772, 2779, 2786, 2793, 2807, 2814, 2821, 2828, 2842, 2849, 2856, 2863, 2877, 2884, 2891, 2898, 2912, 2919, 2926, 2933, 2947, 2954, 2961, 2968, 2982, 2989, 2996, 3003, 3017, 3024, 3031, 3038, 3052, 3059, 3066, 3073, 3087, 3094, 3101, 3108, 3122, 3129, 3136, 3143, 3157, 3164, 3171, 3178, 3192, 3199\n" 36 | ] 37 | } 38 | ], 39 | "source": [ 40 | "l = list()\n", 41 | "for i in range(2000, 3201):\n", 42 | " if (i % 7) == 0 and (i % 5) != 0:\n", 43 | " l.append(i)\n", 44 | "print(str(l)[1:-1], sep = \",\")" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "#### Question 2" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "**Write a Python program to accept the user's first and last name and then getting them printed in\n", 59 | "the the reverse order with a space between first name and last name.**" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 2, 65 | "metadata": {}, 66 | "outputs": [ 67 | { 68 | "name": "stdout", 69 | "output_type": "stream", 70 | "text": [ 71 | "Enter your First Name: Vishweswar\n", 72 | "Enter your Last Name: Mohapatra\n", 73 | "Reverse Name letters is: rawsewhsiV artapahoM\n", 74 | "Reverse Full Name is: Mohapatra Vishweswar\n", 75 | "Reverse Full Name with letters is: artapahoM rawsewhsiV\n" 76 | ] 77 | } 78 | ], 79 | "source": [ 80 | "name = list()\n", 81 | "rev_name = list()\n", 82 | "first_name = input(\"Enter your First Name: \")\n", 83 | "name.append(first_name)\n", 84 | "rev_name.append(first_name[::-1])\n", 85 | "last_name = input(\"Enter your Last Name: \")\n", 86 | "name.append(last_name)\n", 87 | "rev_name.append(last_name[::-1])\n", 88 | "print(f\"Reverse Name letters is: {first_name[::-1]} {last_name[::-1]}\")\n", 89 | "print(\"Reverse Full Name is: \" + \" \".join(name[::-1]))\n", 90 | "print(\"Reverse Full Name with letters is: \" + \" \".join(rev_name[::-1]))" 91 | ] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "#### Question 3" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "**Write a Python program to find the volume of a sphere with diameter 12 cm.**\n", 105 | "\n", 106 | "**Formula: V = 4/3 * π * r3**" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 3, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "name": "stdout", 116 | "output_type": "stream", 117 | "text": [ 118 | "Volume of sphere is: 904.779 cm³\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "import math\n", 124 | "d = 12\n", 125 | "r = d/2\n", 126 | "pi = math.pi\n", 127 | "volume = (4/3) * pi * (r ** 3)\n", 128 | "print(f\"Volume of sphere is: {volume:.3f} cm\\u00b3\")" 129 | ] 130 | } 131 | ], 132 | "metadata": { 133 | "kernelspec": { 134 | "display_name": "Python 3", 135 | "language": "python", 136 | "name": "python3" 137 | }, 138 | "language_info": { 139 | "codemirror_mode": { 140 | "name": "ipython", 141 | "version": 3 142 | }, 143 | "file_extension": ".py", 144 | "mimetype": "text/x-python", 145 | "name": "python", 146 | "nbconvert_exporter": "python", 147 | "pygments_lexer": "ipython3", 148 | "version": "3.7.7" 149 | } 150 | }, 151 | "nbformat": 4, 152 | "nbformat_minor": 4 153 | } 154 | -------------------------------------------------------------------------------- /python-assignment-2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 2" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "#### Question 1" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "**Create the below pattern using nested for loop in Python.**\n", 22 | "\n", 23 | "

\n", 24 | "*
\n", 25 | "* *
\n", 26 | "* * *
\n", 27 | "* * * *
\n", 28 | "* * * * *
\n", 29 | "* * * *
\n", 30 | "* * *
\n", 31 | "* *
\n", 32 | "*
\n", 33 | "

" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 1, 39 | "metadata": {}, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "\n", 46 | "* \n", 47 | "* * \n", 48 | "* * * \n", 49 | "* * * * \n", 50 | "* * * * * \n", 51 | "* * * * \n", 52 | "* * * \n", 53 | "* * \n", 54 | "* \n" 55 | ] 56 | } 57 | ], 58 | "source": [ 59 | "for i in range(6):\n", 60 | " for j in range(i):\n", 61 | " print(\"*\", end = \" \")\n", 62 | " print(end=\"\\n\")\n", 63 | "for k in range(4, 0, -1):\n", 64 | " for l in range(k):\n", 65 | " print(\"*\", end = \" \")\n", 66 | " print(end=\"\\n\")" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "#### Question 2" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "**Write a Python program to reverse a word after accepting the input from the user.**\n", 81 | "\n", 82 | "**Input word: Ineuron**\n", 83 | "\n", 84 | "**Output: noruenI**" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 2, 90 | "metadata": {}, 91 | "outputs": [ 92 | { 93 | "name": "stdout", 94 | "output_type": "stream", 95 | "text": [ 96 | "Enter a word: Ineuron\n", 97 | "Reverse word is: noruenI\n" 98 | ] 99 | } 100 | ], 101 | "source": [ 102 | "word = input(\"Enter a word: \")\n", 103 | "print(f\"Reverse word is: {word[::-1]}\")" 104 | ] 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.7.7" 124 | } 125 | }, 126 | "nbformat": 4, 127 | "nbformat_minor": 4 128 | } 129 | -------------------------------------------------------------------------------- /python-assignment-3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 3" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Write a Python Program to implement your own myreduce() function which works exactly like Python's built-in function reduce()" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "def myreduce(func, values):\n", 24 | " result = values[0]\n", 25 | " for i in values[1:]:\n", 26 | " result = func(result, i)\n", 27 | " return result" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 2, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "def func(a, b):\n", 37 | " return a * b" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 3, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "name": "stdout", 47 | "output_type": "stream", 48 | "text": [ 49 | "My Reduce Output is: 14400\n" 50 | ] 51 | } 52 | ], 53 | "source": [ 54 | "l = [2,5,6,1,8,3,10]\n", 55 | "print(f\"My Reduce Output is: {myreduce(func, l)}\")" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "### Write a Python program to implement your own myfilter() function which works exactly like Python's built-in function filter()" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 4, 68 | "metadata": {}, 69 | "outputs": [], 70 | "source": [ 71 | "def myfilter(fun, values):\n", 72 | " result = list()\n", 73 | " for i in values:\n", 74 | " if fun(i):\n", 75 | " result.append(i)\n", 76 | " return result" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 5, 82 | "metadata": {}, 83 | "outputs": [], 84 | "source": [ 85 | "def fun(x):\n", 86 | " if x % 5 == 0:\n", 87 | " return True\n", 88 | " else:\n", 89 | " return False" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 6, 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "My Filter Output is: [15, 60]\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "lst = [12, 15, 60, 34, 53]\n", 107 | "print(f\"My Filter Output is: {myfilter(fun, lst)}\")" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": {}, 113 | "source": [ 114 | "### Implement List comprehensions to produce the following lists." 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": {}, 120 | "source": [ 121 | "**1. ['x', 'xx', 'xxx', 'xxxx', 'y', 'yy', 'yyy', 'yyyy', 'z', 'zz', 'zzz', 'zzzz']**" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 7, 127 | "metadata": {}, 128 | "outputs": [], 129 | "source": [ 130 | "l1 = ['x', 'y', 'z']\n", 131 | "lst1 = [i*j for j in l1 for i in range(1, 5)]" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 8, 137 | "metadata": {}, 138 | "outputs": [ 139 | { 140 | "data": { 141 | "text/plain": [ 142 | "['x', 'xx', 'xxx', 'xxxx', 'y', 'yy', 'yyy', 'yyyy', 'z', 'zz', 'zzz', 'zzzz']" 143 | ] 144 | }, 145 | "execution_count": 8, 146 | "metadata": {}, 147 | "output_type": "execute_result" 148 | } 149 | ], 150 | "source": [ 151 | "lst1" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": {}, 157 | "source": [ 158 | "**2. ['x', 'y', 'z', 'xx', 'yy', 'zz', 'xxx', 'yyy', 'zzz', 'xxxx', 'yyyy', 'zzzz']**" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 9, 164 | "metadata": {}, 165 | "outputs": [], 166 | "source": [ 167 | "l2 = ['x', 'y', 'z']\n", 168 | "lst2 = [i*j for j in range(1, 5) for i in l2]" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 10, 174 | "metadata": {}, 175 | "outputs": [ 176 | { 177 | "data": { 178 | "text/plain": [ 179 | "['x', 'y', 'z', 'xx', 'yy', 'zz', 'xxx', 'yyy', 'zzz', 'xxxx', 'yyyy', 'zzzz']" 180 | ] 181 | }, 182 | "execution_count": 10, 183 | "metadata": {}, 184 | "output_type": "execute_result" 185 | } 186 | ], 187 | "source": [ 188 | "lst2" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "**3. [[2], [3], [4], [3], [4], [5], [4], [5], [6]]**" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 11, 201 | "metadata": {}, 202 | "outputs": [], 203 | "source": [ 204 | "lst3 = [[x + y] for y in range(3) for x in range(2, 5)]" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": 12, 210 | "metadata": {}, 211 | "outputs": [ 212 | { 213 | "data": { 214 | "text/plain": [ 215 | "[[2], [3], [4], [3], [4], [5], [4], [5], [6]]" 216 | ] 217 | }, 218 | "execution_count": 12, 219 | "metadata": {}, 220 | "output_type": "execute_result" 221 | } 222 | ], 223 | "source": [ 224 | "lst3" 225 | ] 226 | }, 227 | { 228 | "cell_type": "markdown", 229 | "metadata": {}, 230 | "source": [ 231 | "**4. [[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]**" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 13, 237 | "metadata": {}, 238 | "outputs": [], 239 | "source": [ 240 | "lst4 = [[a+b for b in range(2, 6)] for a in range(4)]" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 14, 246 | "metadata": {}, 247 | "outputs": [ 248 | { 249 | "data": { 250 | "text/plain": [ 251 | "[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]" 252 | ] 253 | }, 254 | "execution_count": 14, 255 | "metadata": {}, 256 | "output_type": "execute_result" 257 | } 258 | ], 259 | "source": [ 260 | "lst4" 261 | ] 262 | }, 263 | { 264 | "cell_type": "markdown", 265 | "metadata": {}, 266 | "source": [ 267 | "**5. [(1, 1), (2, 1), (3, 1), (1, 2), (2, 2), (3, 2), (1, 3), (2, 3), (3, 3)]**" 268 | ] 269 | }, 270 | { 271 | "cell_type": "code", 272 | "execution_count": 15, 273 | "metadata": {}, 274 | "outputs": [], 275 | "source": [ 276 | "lst5 = [(p, q) for q in range(1, 4) for p in range(1, 4)]" 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": 16, 282 | "metadata": {}, 283 | "outputs": [ 284 | { 285 | "data": { 286 | "text/plain": [ 287 | "[(1, 1), (2, 1), (3, 1), (1, 2), (2, 2), (3, 2), (1, 3), (2, 3), (3, 3)]" 288 | ] 289 | }, 290 | "execution_count": 16, 291 | "metadata": {}, 292 | "output_type": "execute_result" 293 | } 294 | ], 295 | "source": [ 296 | "lst5" 297 | ] 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.7.7" 317 | } 318 | }, 319 | "nbformat": 4, 320 | "nbformat_minor": 4 321 | } 322 | -------------------------------------------------------------------------------- /python-assignment-4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 4" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Write a Python Program(with class concepts) to find the area of the triangle using the below formula.\n", 15 | "\n", 16 | "### area = (s\\*(s-a)\\*(s-b)\\*(s-c)) ** 0.5\n", 17 | "\n", 18 | "### Function to take the length of the sides of triangle from user should be defined in the parent class and function to calculate the area should be defined in subclass." 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 1, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "class Triangle:\n", 28 | " def __init__(self):\n", 29 | " self.a = float(input(\"Enter side a: \"))\n", 30 | " self.b = float(input(\"Enter side b: \"))\n", 31 | " self.c = float(input(\"Enter side c: \"))" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 2, 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "class Area(Triangle):\n", 41 | " def area(self):\n", 42 | " s = (self.a + self.b + self.c) / 2\n", 43 | " area = (s * (s - self.a)*(s - self.b)*(s - self.c)) ** 0.5\n", 44 | " print(f\"Area of traingle is {area:.3f} cm\\u00b2\")" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 3, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "Enter side a: 5\n", 57 | "Enter side b: 6\n", 58 | "Enter side c: 7\n", 59 | "Area of traingle is 14.697 cm²\n" 60 | ] 61 | } 62 | ], 63 | "source": [ 64 | "a = Area()\n", 65 | "a.area()" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "### Write a function filter_long_words() that takes a list of words and an integer n and returns the list of words that are longer than n." 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 4, 78 | "metadata": {}, 79 | "outputs": [], 80 | "source": [ 81 | "def filter_long_words(words, n):\n", 82 | " l = list()\n", 83 | " for i in words:\n", 84 | " if len(i) > n:\n", 85 | " l.append(i)\n", 86 | " print(f\"Longest words are: {l}\")" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 5, 92 | "metadata": {}, 93 | "outputs": [ 94 | { 95 | "name": "stdout", 96 | "output_type": "stream", 97 | "text": [ 98 | "Longest words are: ['computer science', 'data science']\n" 99 | ] 100 | } 101 | ], 102 | "source": [ 103 | "lst = [\"hello\", \"world\", \"name\", \"words\", \"computer science\", \"data science\"]\n", 104 | "filter_long_words(lst, 5)" 105 | ] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "### Write a Python program using function concept that maps list of words into a list of integers representing the lengths of the corresponding words.\n", 112 | "\n", 113 | "**Hint:** If a list [ ab,cde,erty] is passed on to the python function output should come as [2,3,4] Here 2,3 and 4 are the lengths of the words in the list." 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 6, 119 | "metadata": {}, 120 | "outputs": [], 121 | "source": [ 122 | "def word_len(words):\n", 123 | " return len(words)" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 7, 129 | "metadata": {}, 130 | "outputs": [], 131 | "source": [ 132 | "l = ['ab', 'cde', 'erty']\n", 133 | "result = map(word_len, l)" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": 8, 139 | "metadata": {}, 140 | "outputs": [ 141 | { 142 | "data": { 143 | "text/plain": [ 144 | "[2, 3, 4]" 145 | ] 146 | }, 147 | "execution_count": 8, 148 | "metadata": {}, 149 | "output_type": "execute_result" 150 | } 151 | ], 152 | "source": [ 153 | "list(result)" 154 | ] 155 | }, 156 | { 157 | "cell_type": "markdown", 158 | "metadata": {}, 159 | "source": [ 160 | "### Write a Python function which takes a character (i.e. a string of length 1) and returns True if it is a vowel, False otherwise." 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 9, 166 | "metadata": {}, 167 | "outputs": [], 168 | "source": [ 169 | "def vowel_check(char):\n", 170 | " if char == \"a\" or char == \"e\" or char == \"i\" or char == \"o\" or char == \"u\":\n", 171 | " return True\n", 172 | " else:\n", 173 | " return False" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 10, 179 | "metadata": {}, 180 | "outputs": [ 181 | { 182 | "name": "stdout", 183 | "output_type": "stream", 184 | "text": [ 185 | "Input your character a\n" 186 | ] 187 | }, 188 | { 189 | "data": { 190 | "text/plain": [ 191 | "True" 192 | ] 193 | }, 194 | "execution_count": 10, 195 | "metadata": {}, 196 | "output_type": "execute_result" 197 | } 198 | ], 199 | "source": [ 200 | "vowel_check(input(\"Input your character \"))" 201 | ] 202 | } 203 | ], 204 | "metadata": { 205 | "kernelspec": { 206 | "display_name": "Python 3", 207 | "language": "python", 208 | "name": "python3" 209 | }, 210 | "language_info": { 211 | "codemirror_mode": { 212 | "name": "ipython", 213 | "version": 3 214 | }, 215 | "file_extension": ".py", 216 | "mimetype": "text/x-python", 217 | "name": "python", 218 | "nbconvert_exporter": "python", 219 | "pygments_lexer": "ipython3", 220 | "version": "3.7.7" 221 | } 222 | }, 223 | "nbformat": 4, 224 | "nbformat_minor": 4 225 | } 226 | -------------------------------------------------------------------------------- /python-assignment-5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Assignment 5" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Write a function to compute 5/0 and use try/except to catch the exceptions." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "def HandlingExecption():\n", 24 | " try:\n", 25 | " x = 5 / 0\n", 26 | " except ZeroDivisionError:\n", 27 | " return f\"Division by zero gives infinity!\"" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 2, 33 | "metadata": {}, 34 | "outputs": [ 35 | { 36 | "data": { 37 | "text/plain": [ 38 | "'Division by zero gives infinity!'" 39 | ] 40 | }, 41 | "execution_count": 2, 42 | "metadata": {}, 43 | "output_type": "execute_result" 44 | } 45 | ], 46 | "source": [ 47 | "HandlingExecption()" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "### Implement a Python program to generate all sentences where subject is in [\"Americans\", \"Indians\"] and verb is in [\"Play\", \"watch\"] and the object is in [\"Baseball\",\"cricket\"].\n", 55 | "\n", 56 | "### Hint: Subject,Verb and Object should be declared in the program as shown below.\n", 57 | "\n", 58 | "**subjects=[\"Americans\",\"Indians\"]**\n", 59 | "\n", 60 | "**verbs=[\"play\",\"watch\"]**\n", 61 | "\n", 62 | "**objects=[\"Baseball\",\"Cricket\"]**\n", 63 | "\n", 64 | "### Output should come as below:\n", 65 | "\n", 66 | "**Americans play Baseball.**\n", 67 | "\n", 68 | "**Americans play Cricket.**\n", 69 | "\n", 70 | "**Americans watch Baseball.**\n", 71 | "\n", 72 | "**Americans watch Cricket.**\n", 73 | "\n", 74 | "**Indians play Baseball.**\n", 75 | "\n", 76 | "**Indians play Cricket.**\n", 77 | "\n", 78 | "**Indians watch Baseball.**\n", 79 | "\n", 80 | "**Indians watch Cricket.**" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 3, 86 | "metadata": {}, 87 | "outputs": [], 88 | "source": [ 89 | "subjects = [\"Americans\",\"Indians\"]\n", 90 | "verbs = [\"play\",\"watch\"]\n", 91 | "objects = [\"Baseball\",\"Cricket\"]\n", 92 | "\n", 93 | "sentence = [s + \" \" + v + \" \" + o for s in subjects for v in verbs for o in objects]" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 4, 99 | "metadata": {}, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "Americans play Baseball\n", 106 | "Americans play Cricket\n", 107 | "Americans watch Baseball\n", 108 | "Americans watch Cricket\n", 109 | "Indians play Baseball\n", 110 | "Indians play Cricket\n", 111 | "Indians watch Baseball\n", 112 | "Indians watch Cricket\n" 113 | ] 114 | } 115 | ], 116 | "source": [ 117 | "for i in sentence:\n", 118 | " print(i)" 119 | ] 120 | } 121 | ], 122 | "metadata": { 123 | "kernelspec": { 124 | "display_name": "Python 3", 125 | "language": "python", 126 | "name": "python3" 127 | }, 128 | "language_info": { 129 | "codemirror_mode": { 130 | "name": "ipython", 131 | "version": 3 132 | }, 133 | "file_extension": ".py", 134 | "mimetype": "text/x-python", 135 | "name": "python", 136 | "nbconvert_exporter": "python", 137 | "pygments_lexer": "ipython3", 138 | "version": "3.7.7" 139 | } 140 | }, 141 | "nbformat": 4, 142 | "nbformat_minor": 4 143 | } 144 | --------------------------------------------------------------------------------