{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "# Exploratory Computing with Python\n", "*Developed by Mark Bakker*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notebook" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bugs\n", "It happens to anyone writing code: occasionally, you make errors. It is accepted knowledge that every 1000 lines of code contain 15-50 errors (see for example [here](https://www.mayerdan.com/ruby/2012/11/11/bugs-per-line-of-code-ratio)).\n", "Errors in your code, known as bugs, can be roughly divided in two kinds. The first kind are syntax errors, where Python throws an error message at you. Once you have resolved all the syntax errors, this means your code will run, but it doesn't mean, unfortunately, that you get the answer you want. There may be one or more bugs remaining in your logic. To find these bugs, it often helps to test small parts of the code separately and to write lots of print statements. There also exist tools called debuggers, which help you in stepping through the code to look at intermediate results. They do not, unfortunately, tell you what the bug is, that is still up to you, the programmer. \n", "\n", "In this Notebook, we will discuss a number of syntax errors. Syntax errors can be very long as they provide a traceback from the function that throws the error all the way back to the code that you wrote. The strategy to find out what is going on is to read the last sentence of the error message. This error message is designed to tell you what you are doing wrong. Sometimes it is easy for Python to figure out what is wrong and the error message is very informative. Other times you make a more confusing error and Python throws an error message that doesn't help much in explaining what you did wrong. A second important piece of information is that Python shows you in what line of your code things went haywire. It prints a few lines of your code to the screen and points to the line where it thinks the error occurred with an arrow. \n", "\n", "This Notebook is by no means exhaustive. A number of syntax errors are discussed so that you may start recognizing them and give you some practice in trying to resolve errors. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `IndexError: list index out of range`\n", "As a first example, run the code below" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "3\n" ] }, { "ename": "IndexError", "evalue": "list index out of range", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mIndexError\u001b[0m: list index out of range" ] } ], "source": [ "x = [1, 2, 3]\n", "for i in range(4):\n", " print(x[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You will get an error message `IndexError: list index out of range` and an arrow at the line of the code where this happened. This makes immediate sense, as the length of the array `x` is 3 (so `x[0]`, `x[1]`, and `x[2]`), while you are trying to print `x[3]`. Fix the code and run it again." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `invalid syntax`\n", "A common error message is `invalid syntax`. This means you are trying to do something that Python doesn't understand. This could very well be a typo, which you can often spot by looking carefully at the code. For example, run the code below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'numpy' has no attribute 'linspac'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinspac\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m20\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: module 'numpy' has no attribute 'linspac'" ] } ], "source": [ "x = np.linspac(0, 10, 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apparently, the `numpy` package doesn't have a function `linspac`, which is correct, as it is called `linspace`. Fix the code and run it again. Here is another syntax error that might be a bit harder to spot:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 2)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m if a = 8:\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "a = 7 \n", "if a = 8:\n", " print('the value of a equals 8')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, the error is that the statement `a = 8` needs to have two equal signs. Fix it and run the code again. \n", "You can also get an `invalid syntax` error when you forget, for example, to add a colon after an `if` statement. Python shows with the carrot (`^`) where it doesn't understand what is going on." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 2)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m if avalue < 10\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "avalue = 7 \n", "if avalue < 10\n", " print('the value of avalue is smaller than 10')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fix the bug and run the code again. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other times, the syntax error may not be so obvious, for example, in the code below " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 2)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m plt.title('Nice plot')\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "plt.plot([1,2,3]\n", "plt.title('Nice plot')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can stare all you want at the line `plt.title('Nice plot')` but it looks perfectly good. And it is! The problem lies with the line just above it, where the closing parenthesis is missing. Python thinks that the plotting statement continuous on the next line, but the `plt.title` command makes no sense in the `plt.plot` function, so it throws an error message. There is not much else it can do. Fix the parenthesis and run the code again. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Longer error messages\n", "Error messages can be rather long, depending on where in the code the error occurs. In the code below, the error occurs in the line `plt.plot(xdata, ydata)`, which calls a function in the `matplotlib` package, which throws the error when it tries to plot `y` vs. `x` (which is a generic error message from `matplotlib`; it doesn't substitute the names of the arrays you really want to plot). Run the code" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "x and y must not be None", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mydata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc_exp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mydata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m//anaconda/envs/python3/lib/python3.6/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 3356\u001b[0m mplDeprecation)\n\u001b[1;32m 3357\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3358\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3359\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3360\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hold\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwashold\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m//anaconda/envs/python3/lib/python3.6/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1853\u001b[0m \u001b[0;34m\"the Matplotlib list!)\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1854\u001b[0m RuntimeWarning, stacklevel=2)\n\u001b[0;32m-> 1855\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1856\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1857\u001b[0m inner.__doc__ = _add_data_doc(inner.__doc__,\n", "\u001b[0;32m//anaconda/envs/python3/lib/python3.6/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1525\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormalize_kwargs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_alias_map\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1526\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1527\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mline\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_lines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 1528\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1529\u001b[0m \u001b[0mlines\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m//anaconda/envs/python3/lib/python3.6/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_grab_next_args\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 404\u001b[0m \u001b[0mthis\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 405\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 406\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mseg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_plot_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mthis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\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 407\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mseg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 408\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m//anaconda/envs/python3/lib/python3.6/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_plot_args\u001b[0;34m(self, tup, kwargs)\u001b[0m\n\u001b[1;32m 364\u001b[0m \u001b[0;31m# downstream.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 366\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"x and y must not be None\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 367\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[0mkw\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[0;31mValueError\u001b[0m: x and y must not be None" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def func_exp(x, a=2, b=3):\n", " y = b * np.exp(-a * x)\n", "\n", "xdata = np.linspace(0, 4, 10)\n", "ydata = func_exp(xdata, b=4, a=1)\n", "\n", "plt.plot(xdata, ydata);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the code looks perfectly fine, but the `plt.plot` function complains that `x and y must not be None`. Note that `x` and `y` refer to `xdata` and `ydata`, because the plotting statement in the code is `plt.plot(xdata, ydata)`. Apparently, either `xdata` or `ydata` equals `None`. The thing to do here is to print `xdata` and `ydata` to the screen. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0.44444444 0.88888889 1.33333333 1.77777778 2.22222222\n", " 2.66666667 3.11111111 3.55555556 4. ]\n", "None\n" ] } ], "source": [ "print(xdata)\n", "print(ydata)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you see, it turns out that `xdata` is indeed an array with 10 values, but `ydata` is `None`. The error lies in the function `func_exp` that is defined. This function doesn't return the value of `y` that is computed. Fix the function and run the code again. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercises\n", "The best way to learn how to resolve errors in your code is by practice.\n", "Consider the following code snippets. Each code snippet contains one or two syntactical errors. It is up to you to fix the error so that the code runs properly. Note that you will need to make changes to only one or two lines in each code snippet. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1 " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'xvalues' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mxvalues\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mxvalues\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mxvalues\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mxvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r--'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m \u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'bo'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmarkersize\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[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'x-axis'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'xvalues' is not defined" ] } ], "source": [ "y = (xvalues + 2) * (xvalues - 1) * (xvalues - 2)\n", "xvalues = linspace(-3, 3, 100)\n", "plt.plot(xvalues, y, 'r--')\n", "plt.plot([-2, 1, 2], [0 ,0, 0], 'bo', markersize=10)\n", "plt.xlabel('x-axis')\n", "plt.ylabel('y-axis')\n", "plt.title('Nice Python figure!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2 " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 3)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m x = np.linspace(0, 10np.pi, 100)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "def test(x, alpha):\n", " return np.exp(-alpha * x) * np.cos(x)\n", "x = np.linspace(0, 10np.pi, 100)\n", "alpha = 0.2\n", "y = test(x)\n", "plt.plot(x, y, 'b')\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3 " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 6)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m6\u001b[0m\n\u001b[0;31m else\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "temperature = np.loadtxt('rome_temp.txt')\n", "plt.plot(np.arange(1, 13), temperature, 'k--')\n", "for i in range(len(temperature)):\n", " if temperature[i] < 15:\n", " plt.plot(i + 1, temperature[i], 'bo')\n", " else\n", " plt.plot(i + 1, temperature[i], 'ro')\n", "plt.xlim(1, 12)\n", "plt.xlabel('month')\n", "plt.ylabel('temperature (Celcius)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4 " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 8)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m8\u001b[0m\n\u001b[0;31m print('modified a:' a)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "a = np.array([2, 2, 4, 2, 4, 4])\n", "\n", "for i in range(a):\n", " if a[i] < 3: # replace value with 77 when value equals 2\n", " a[i] = 77\n", " else: # otherwise replace value with -77\n", " a[i] = -77\n", "print('modified a:' a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 5 " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 4)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m plt.title(image of array y);\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "y = np.zeros(20, 20)\n", "y[8:13] = 10\n", "plt.matshow(y)\n", "plt.title(image of array y);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answers to the exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 1" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xvalues = np.linspace(-3, 3, 100) # xvalues should be placed before y. linspace should be np.linspace\n", "y = (xvalues + 2) * (xvalues - 1) * (xvalues - 2)\n", "plt.plot(xvalues, y, 'r--')\n", "plt.plot([-2, 1, 2], [0 ,0, 0], 'bo', markersize=10)\n", "plt.xlabel('x-axis')\n", "plt.ylabel('y-axis')\n", "plt.title('Nice Python figure!');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 1\n", "\n", "Answer to Exercise 2" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEKCAYAAADuEgmxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8lOW5//HPxSYIKCARAiQSFCu4tGqKcFyqrbRCK9jTulu1LnTR/mp3z6nHql2Otb9jtdVTy1HqWikuVdqiVD3WYgUkyqJiFQSXABVkUZHNmOv8cU2aMUySSTIzz4z5vl+veU1m5snzXGHCfHPfz33fj7k7IiIi2eiSdAEiIlI6FBoiIpI1hYaIiGRNoSEiIllTaIiISNYUGiIikjWFhoiIZE2hISIiWVNoiIhI1rolXUCuDRw40IcPH550GSIiJeWpp556w93LWtvuAxcaw4cPp6amJukyRERKipm9ks126p4SEZGsKTRERCRrCg0REcmaQkNERLKm0BARkawlGhpmNs3M1prZs828bmb2CzNbbmZLzOyQQtcoIiKNkm5p3Awc18LrE4CRqdsU4FcFqElERJqRaGi4+1+BDS1sMhm41cM8oJ+Zleejlg0b4Ior4Omn87F3EZEPhmKf3DcUeC3tcW3quTXpG5nZFKIlQmVlZbsO1K0bXHZZfH2IOsFERDJKunuqNZbhOd/pCfep7l7t7tVlZa3Ogs9ot91g//1h7tx2fbuISKdQ7KFRC1SkPR4GrM7XwcaOhfnzob4+X0cQESltxR4aM4EzU6OoxgJvuvua1r6pvcaNg40b4cUX83UEEZHSlug5DTO7EzgaGGhmtcAPgO4A7n4DMAuYCCwHtgBfzGc948bF/dy5sN9++TySiEhpSjQ03P3UVl534IIClcOHPgT9+sG8efDFvMaTiEhpKvbuqYLq0gUOO0wnw0VEmqPQaGLcOHj2WXj77aQrEREpPgqNJsaOBXd48smkKxERKT4KjSYOOyzu1UUlIrIzhUYT/frB6NFxMlxERN5PoZHB2LERGr7T3HMRkc5NoZHBuHGwfj0sW5Z0JSIixUWhkUHDJD91UYmIvJ9CI4NRo6BnT1iyJOlKRESKi0Ijgy5doKoKVq5MuhIRkeKi0GhGVRWsWJF0FSIixUWh0YwRIyI0NIJKRKSRQqMZI0bAW2/FUukiIhIUGs2oqop7dVGJiDRSaDRjxIi418lwEZFGCo1mqKUhIrKzREPDzI4zsxfMbLmZXZzh9Uoze9TMFprZEjObWKja+vaFgQMVGiIi6RILDTPrClwPTABGA6ea2egmm10CzHD3g4FTgP8uZI0NI6hERCQk2dIYAyx39xXuvgOYDkxuso0Du6W+3h1YXcD6GDFC5zRERNIlGRpDgdfSHtemnkt3GXCGmdUCs4CvFaa0UFUFr7wCdXWFPKqISPFKMjQsw3NNp9KdCtzs7sOAicBtZrZTzWY2xcxqzKxm3bp1OStwxIgIjNranO1SRKSkJRkatUBF2uNh7Nz9dC4wA8Dd5wI9gYFNd+TuU9292t2ry8rKclaght2KiLxfkqGxABhpZlVm1oM40T2zyTavAp8AMLNRRGjkrinRCg27FRF5v8RCw93rgAuB2cDzxCip58zsCjOblNrsW8D5ZrYYuBM4271wq0FVVEDXrgoNEZEG3ZI8uLvPIk5wpz93adrXS4HDC11Xg27doLJS3VMiIg00I7wVmqshItJIodEKhYaISCOFRiuqqmDdOti8OelKRESSp9BohYbdiog0Umi0oiE01EUlIqLQaFXDXA21NEREFBqt2mMP6NNHLQ0REVBotMoMhg2DVauSrkREJHkKjSwMHQqrC7oou4hIcVJoZGHoULU0RERAoZGVIUNgzRqor0+6EhGRZCk0sjB0aFxXI4eX6hARKUkKjSwMTV1PUF1UItLZKTSyoNAQEQkKjSwMGRL3GkElIp2dQiMLgwdDly5qaYiIKDSy0K0bDBqk0BARSTQ0zOw4M3vBzJab2cXNbHOSmS01s+fM7LeFrrHBkCEKDRGRxC73amZdgeuB8UAtsMDMZqYu8dqwzUjg34DD3X2jme2ZTLVxMlyLFopIZ5dkS2MMsNzdV7j7DmA6MLnJNucD17v7RgB3X1vgGv9Js8JFRJINjaHAa2mPa1PPpdsX2NfM/mZm88zsuIJV18TQobBhA2zdmlQFIiLJSzI0LMNz3uRxN2AkcDRwKnCjmfXbaUdmU8ysxsxq1uVp2nbDsNs1a/KyexGRkpBkaNQCFWmPhwFNZ0LUAve7+7vuvhJ4gQiR93H3qe5e7e7VZWVleSlWE/xERJINjQXASDOrMrMewCnAzCbb3AccA2BmA4nuqkQuh6TQEBFJMDTcvQ64EJgNPA/McPfnzOwKM5uU2mw2sN7MlgKPAt9x9/VJ1KvQEBFJcMgtgLvPAmY1ee7StK8d+Gbqlqjdd4devbSUiIh0bpoRniUzDbsVEVFotIFCQ0Q6O4VGGwwZou4pEencFBpt0NDS8KazSUREOgmFRhsMHQrbt8fMcBGRzkih0QYNw27VRSUinZVCow0alhLRyXAR6awUGm2gCX4i0tkpNNpALQ0R6ewUGm3QoweUlSk0RKTzUmi0UXm5lkcXkc5LodFG5eXwj38kXYWISDIUGm2kloaIdGYKjTYaPDhaGvX1SVciIlJ4Co02Ki+HujrNCheRzkmh0Ubl5XGvLioR6YwUGm00eHDcKzREpDNKNDTM7Dgze8HMlpvZxS1s93kzczOrLmR9mTS0NDSCSkQ6o8RCw8y6AtcDE4DRwKlmNjrDdn2B/wfML2yFmamlISKdWZItjTHAcndf4e47gOnA5Azb/RC4CthWyOKa06dP3NTSEJHOKMnQGAq8lva4NvXcP5nZwUCFu/+xpR2Z2RQzqzGzmnXr1uW+0iY0V0NEOqskQ8MyPPfPa+KZWRfg58C3WtuRu09192p3ry4rK8thiZkNHqzQEJHOKcnQqAUq0h4PA9Ivb9QXOAD4i5m9DIwFZhbLyXB1T4lIZ5RkaCwARppZlZn1AE4BZja86O5vuvtAdx/u7sOBecAkd69JptxG6p4Skc4qsdBw9zrgQmA28Dwww92fM7MrzGxSUnVlY/BgePtteOedpCsRESmsbkke3N1nAbOaPHdpM9seXYiaspE+V2PvvZOtRUSkkDQjvB20lIiIdFYKjXbQBD8R6awUGu2gpUREpLNSaLTDHntAt25qaYhI56PQaIcuXWDQIIWGiHQ+Co120gQ/EemMFBrtpAl+ItIZKTTaqeFa4aWopgZ+9zvYujXpSkSk1Cg02qm8HNaujeuFl5J77oEjjoBTToEhQ+DCC+Hvf0+6KhEpFQqNdho8GNwjOErFddfBiSfCIYfAn/4En/403HgjfPSj8MorSVcnIqUgq9Awsz3N7LNmdoGZnWNmY1JLl3dapTZX46qr4Gtfg+OPh4cfhokT4fbbYenSeP2cc6C+PtkaRaT4tfjBb2bHmNls4E/EZVnLiUuzXgI8Y2aXm9lu+S+z+JTSUiIbNsDll8PkydE9teuuja+NGAFXXw3/+79www3J1SgipaG1BQsnAue7+6tNXzCzbsBngPHAPXmoraiV0lIiU6fCli3wwx/GpMSmzjsvwuQ734HjjosgERHJpMWWhrt/J1NgpF6rc/f73L3TBQY0hkaxd0/t2AG//CUceywceGDmbczi3Eb37tFN5Z55OxGRbM9p3GZmu6c9Hm5mj+SvrOK3yy4wYEDxtzTuugtWr4ZvfKPl7YYNg5/8BB57DObMKUxtIlJ6sj2Z/Tgw38wmmtn5wJ+Ba/JXVmko9muFu8f5iv32i26n1px9dgThtdfmvTQRKVFZhYa7/xo4D7gfuAI4yt3/0NGDm9lxZvaCmS03s4szvP5NM1tqZkvM7BEz26ujx8ylYp8VPmcOPP00XHRRrJfVml13hSlT4L774OWX816eiJSgbLunvgBMA84EbgZmmdmHO3JgM+sKXE+MyhoNnGpmo5tsthCodveDgLuBqzpyzFwbMqS4Q+Oaa2JF3i98Ifvv+epX4xzHddflry4RKV3Zdk99DjjC3e90938DvkyER0eMAZa7+wp33wFMByanb+Duj7r7ltTDecCwDh4zpxpaGsV44njrVnjgATj99PcPsW1NRQV87nNxYnzz5vzVJyKlKdvuqRPcfW3a4yeBwzp47KHAa2mPa1PPNedc4IEOHjOnystjdNKGDUlXsrO//AW2bYtJfG319a/Dm2/CrbfmvCwRKXGtTe67xMwGZHrN3XeY2cfN7DPtPLZl2m0zdZwBVAM/a+b1KWZWY2Y169ata2c5bTdkSNwXYxfVgw9Cz55w1FFt/95x46C6Gn7xC80SF5H3a62l8Qzwh9RJ6J+Z2XfN7NLUENxngOOB+e08di1QkfZ4GLC66UZmdizwfWCSu2/PtCN3n+ru1e5eXVZW1s5y2q5hVvjqnapO3oMPwjHHQK9ebf9es1jI8IUX4Ikncl+biJSu1kLj8+5+ODAbeA7oCrwF3A6McfdvuHt7/7RfAIw0syoz6wGcAsxM38DMDgZ+TQRG0S0NWKwtjRUr4MUXsxtm25x//dcInDvuyF1dIlL6WltG5NDUMNfTgWOavNYLaPcVGdy9zswuJAKpKzDN3Z8zsyuAGnefSXRH9QHuMjOAV919UnuPmWvFuv7U7Nlx35HQ6NsXTjgBZsyIeRs9euSmNhEpba2Fxg3Ag8AIoCbteSPOP3RolSJ3nwXMavLcpWlfH9uR/efbrrvCbrsVX/fUAw9AVRWMHNmx/Zx+Otx5Z3R1TSqaqBaRJLW29tQv3H0U0QoYkXarcncta0fxzdXYvj1WrD3uuDg30RGf/CQMHKguKhFplO2Q26/ku5BSVV5eXC2Nv/0N3nkHJkzo+L66d4eTT4aZM+Gttzq+PxEpfZ36Qkq5UGxLiTz4YHzYH9P0DFQ7nXFGzPe4997c7E9ESptCo4MauqeKZVb4gw/CkUdCnz652d9hh8Hee6uLSkSCQqODysvjL/FNm5KuJGZxP/ssHH107vZpFifEH3mkuFpUIpIMhUYHFdNcjQULosUzdmxu93vKKbHfu+/O7X5FpPQoNDqomOZqzJsX9x/9aG73O2pUXPVvxozc7ldESo9Co4OKaSmR+fPjgkv9+uV+3yefDI8/DqtW5X7fIlI6FBodVCwtDfcIjVx3TTU48cS4v+uu/OxfREpDazPCpRV9+8ZIpaRbGitXwrp1MdopH/bdFz7ykeiiuuii/Bwj17Ztg3vugYULYckSWL4cKiujq+3DH4bPfjYuUiUi2VNLIweKYa7G/NRaw/kKDYguqrlz4dVX83eMXHCH6dOjq+6MM+D66+OaJ2PGxPVPbr4Zzj8f9toLvvUtdbmJtIVCIweKYSmR+fNjVdoDD8zfMU46Ke6LuYvqpZfgX/4FTj0V+veHhx+OKxDW1ESQPPFEDE1euDBaGtdeCyNGwH/8RwSKiLRMoZEDxbCUyLx5ceGkbnnscBwxIo5RrKOonnkGjjgiloWfNi2C4hOfgK5d379dly7R1XbbbbBsWYThj34UF59aujSZ2kVKhUIjB5KeFb59e/zlnM+uqQYnnQRPPhnnUIrJk0/Cxz4WgTBnDnzxizuHRSZVVREe994b3W6HHAK//nX+6xUpVQqNHCgvhy1b4O23kzn+okXRtZKvkVPpTj457u+8M//HytbcudGi6N8/hgWPHt32fXz2szGb/phj4Mtfhq98Rd1VIpkoNHIg6bkahTgJ3qCyMta2uuOO4lhva/XquMrgoEHRwqiqav++Bg2CP/4RLr4YbrgBjj0W1hbd9SJFkqUhtzmQvpTIfvsV/vjz50cNw4YV5ninnx5/jS9eHOcGkrJjR8wfeesteOihxvehI7p2hf/8TzjoIDj33Bhx9cc/wgEHdHzfhbBlS3QdvvFGdFtu2xY/04ABcRs8GHbfPekqpZQlGhpmdhxwLXG51xvd/comr+8C3AocCqwHTnb3lwtdZ2uSbmnMm1eYrqkGn/88XHhhtDaSDI2LLorRUL/7Xe4/1E89NeamTJoUo7GmT4eJE3N7jI7asSPO5Tz2GPz1r9G9ls3v4J57xs82enQMbKiujn+/7t3zX7OUvsRCw8y6AtcD44FaYIGZzXT39PEr5wIb3X0fMzsF+ClwcuGrbVmSs8I3bYIVK+C88wp3zD32iIs83Xkn/PSncfK50G6/HX71K/j2txuHAufaoYfGh/KkSXD88XDVVfDNb3b8iogdsWNHDCOePh3uu6/xPNqBB8aVFvfZJ5ay33NP6NkTdtkF6upg48aYq1JbGyPGXnghhk5PnRrf36tXdG8ecUTcxo2LSxkXs/r6+Pm3bYOtW6Nl5d7Ybdq9e1zbfpddoHfvuDxzEr+rHzRJtjTGAMvdfQWAmU0HJgPpoTEZuCz19d3AdWZm7sXQm95ot93iFzKJ0Fi8OO4PPriwxz39dPjDH+Iv3FwuxZ6NVauipXP44dGVlE9Dh8bPeNZZEVALFsCNN+bueiXZWrkyzrNMmxZdT/36RdfcZz4DRx3Vvpnt7vEHx4IF0Vp9/HH4yU/iw7hLl5g1f+SRESBjx8ZkyEIE5vbtMZLtlVfgtdfitmoV/OMfcVu7Nv5YevPNtp9X6907/r/26xfddP37N94GDGj8ul+/xm12261x5Ydevdr/b+AO777bGHLpty1b4r7htW3b4rZ9e/yhsH17fG9dXdzeey/ep/r69x9jr73g619vX33ZSjI0hgKvpT2uBZqeyv3nNu5eZ2ZvAnsAb6RvZGZTgCkAlZWV+aq3WWbJzdVYtCjuC91NdPzx8Z/ojjsKGxruMZu7YWZ3PuelNOjdO/4qv+oq+Pd/j26ge++NLp58co/rvf/85zBrVnyQT54MZ58Nn/pU/BXdEWbRKtl771j+HuIv93nzYlDBnDnwP/8Dv/hFvLbnnvF7duCBcdt77xh4UF6e/V/w7vGBv3p1hEFtbYTDyy/HbeXKeK1pGJSVxXEGD4aRIxs/4Bv+YGtoVaXX8e67jR+4W7bEJM+3345zYJs2xW3dumh1bdiQfQj17Bnhscsu8fvXrVsctyFM6uvjQ72u7v017Nix84d8W5ntfMz0EKuu/mCHRqa8bvqWZbMN7j4VmApQXV2dSCtkyJDkQmPQoPjPVEi77hrDVO++G667Lv4DFcJvfgMPPBAfZPvsU5hjQvzH/N73osvqlFOiZfeTn0SLJ5v5IG2xfXucp7n66mhJDhoUM9bPPz//gx369oXx4+MG8aH3zDMx2OLJJ2MNr+uuixobdO8OAwc2/pW+yy7xb9KlS2z3zjtx27gxWknvvvv+Y3bpEj9XVVWMWKuqguHD46/myspo7RXi96u+PoJj48bGlsymTRE0b78dofPOO/EzNXSHvfde/Dzvvde4n/QP9m7dovYePeLWq1fcGoKnuVtDCDbc9+gR/87F0L2WZGjUAhVpj4cBTT92G7apNbNuwO7AhsKU1zZDh0Yzv9AWLUruZPQZZ8TEuJkzG1fBzadXX4VvfCNaNhdckP/jZXLssfFv/qUvxYn4GTOiu2rUqI7ve+3a6IL67/+G11+H/feHm26C006LD48kdO8eEx4POSTmrkD8Bf3SS9EqWLkyWgpvvBEfths3xodpw1/bPXpEq2DYsLgvK4sWy+DBUFERtyFDiuMkfJcujcEnLXD3RG5EYK0AqoAewGJg/ybbXADckPr6FGBGa/s99NBDPQnf/rb7Lru419cX7pjbt7t37+7+ve8V7pjp6urchw93P+aY/B+rvt594kT33r3dV6zI//GyqefWW93793fv0sX9tNPcn3227fupq3N/4AH3k05y79EjTuNOmOD+4IOF/V0SAWo8i8/uxBo77l4HXAjMBp5PBcJzZnaFmU1KbXYTsIeZLQe+CVycTLWtq6iIv7DWrSvcMZ9/PprGSbU0unaN+RqPPhq15NOMGdGv/+Mfd2wCX66YwRe+AH//e6yUe//9MWx14sRoKaxY0fz3vvFGdD+dd1783kyYECOivvSl+HecNSvOWSQ5SkukOebFNRCpw6qrq72mpqbgx/3972Nmck1N9HsXwi23xEnR559PZlIhREgOGxYfeA0nTHNt48b4+Sor4yRtrs8h5ML69fHz33Zb47pcQ4bE+Yg99oh+6VWr4sTvG6lhHLvvHsufnHZajIIq1HkhkUzM7Cl3r25tO80Iz5GK1NmZ114rXGgsWhQnzUaOLMzxMikri3kSt9wSJ4bzMRT1u9+ND+XZs4szMCCC4fLL4bLL4mJPDz4ITz0Vda9fH0ExZEjMhaiqivMyhx5amNFfIrmkX9kcSQ+NQlm0KJa7SPqD9Ktfjcl2v/0tTJmS230/9licaP7ud5OdfZ4tswjxJINcJJ+KYADXB0NZWYwUKVRouCc7cird2LFRx/XX53YRwy1bot+/qgp+8IPc7VdE2k+hkSMNY80LFRqvvhpjyIshNMyitbFkScwqzpVLLomunptuinkhIpI8hUYOVVQULjSSmgnenNNOi5O+3/9+blobTzwB11wTcwOOOabj+xOR3FBo5FChQ8Msv9cEb4veveMk8Jw5sSZVR2zdCuecE6OlfvrTnJQnIjmi0MihiooYVpm+pEC+LFoUax/17p3/Y2Xr3HPhQx+K5Tbq6tq/n0suifWAbrwxlrUQkeKh0MihiooIjH/8I//HKpaT4Om6d4crr4wJb9OmtW8fd90Vay5dcEEs2SEixUWhkUOFGnb75puxImixhQbEKqyHHx6jnTZvbtv3PvccfPGLsRT31Vfnpz4R6RiFRg4VKjSWLIn7D384v8dpDzP42c+itfW1r2V/UnzTplg1t0+fWDm3o8t+i0h+KDRyqNChcdBB+T1Oe40bB5deGte7uPzy1rd/8824hOzKlREYubjWt4jkh2aE51D//jGfoBChMWBAcX+4XnZZ/DtcfnnMX2nucrQrV8YFnV54IeZjHHFEQcsUkTZSaOSQWWGG3S5ZEq2MYl4F1Qx+/eu4MNWXvxzXhzj//LiWAsToqocfhjPPjJV6Z8+Gj3882ZpFpHXqnsqxfIdGfX1cSa1Yu6bSde8eo6E++ckYRjtsGJx8Mnzuc3GltwkTYqXXefMUGCKlQqGRY/kOjZUr45KTpRAaEPMsZs2CpUtjGO1DD8UVDk88Ma6RsXBhzO0QkdKg7qkcq6iIkUM7duRnBFCxnwRvzqhR8POfNw6lLeauNRFpXiItDTMbYGYPmdmy1P1OV+U1s4+Y2Vwze87MlpjZyUnU2lYVFTHMdHXTq53nyJIlsTji/vvnZ//5ZqbAECllSXVPXQw84u4jgUfIfBnXLcCZ7r4/cBxwjZn1K2CN7ZLvYbdLlsS1GrTqq4gkIanQmAzckvr6FuCEphu4+4vuviz19WpgLVBWsArbKd+hsXhx6XVNicgHR1KhMcjd1wCk7vdsaWMzGwP0AF4qQG0dks/Q2LwZXnpJoSEiycnbiXAzexgYnOGl77dxP+XAbcBZ7l7fzDZTgCkAlZWVbaw0t/r2jWGk+QiNZ5+Ne4WGiCQlb6Hh7s2uUWpmr5tZubuvSYXC2ma22w34E3CJu89r4VhTgakA1dXVObzgaPvka9htqY6cEpEPjqS6p2YCZ6W+Pgu4v+kGZtYD+D1wq7vfVcDaOiyfodG3L+y1V+73LSKSjaRC40pgvJktA8anHmNm1WZ2Y2qbk4CjgLPNbFHqVoSLge9s+PCYhJeLy56mK4XlQ0Tkgy2RyX3uvh74RIbna4DzUl/fDtxe4NJyYuTIWOp7/fpYLiMX3CM0Tj89N/sTEWkPLSOSByNHxv2yZbnb56uvxhLixXJNcBHpnBQaeZCP0Fi4MO4PPjh3+xQRaSuFRh5UVUHXrvDii7nb59NPxz41ckpEkqTQyIMePeJkeK5bGvvtB7165W6fIiJtpdDIk5Ejcx8a6poSkaQpNPKkITRyMex27VpYtQoOOaTj+xIR6QiFRp7su2+sFfX66x3fl06Ci0ixUGjkScMIqlycDH/66bj/SElMbRSRDzKFRp7kctjtwoUwYgT0K/qriYjIB51CI08qK6F799yFhrqmRKQYKDTypFu3aB10NDTefBOWL9dJcBEpDgqNPNp3346HxuLFca+WhogUA4VGHjUMu63PeOmo7DScBFdoiEgxUGjk0ciRsG1bzLFor4ULobwcBme6BqKISIEpNPIoFyOodBJcRIqJQiOPOhoaW7fC0qUKDREpHgqNPBo2DHr2bP8Ev8WL4b33NHJKRIpHIqFhZgPM7CEzW5a679/CtruZ2Sozu66QNeZCly6wzz7tb2k8/njcH3547moSEemIpFoaFwOPuPtI4JHU4+b8EHisIFXlQUdWu50zJ75/0KDc1iQi0l5JhcZk4JbU17cAJ2TayMwOBQYBfy5QXTk3alRMztuypW3fV18fLY0jj8xPXSIi7ZFUaAxy9zUAqfs9m25gZl2A/wK+U+DacmrsWKirg5qatn3f0qWwYYNCQ0SKS7d87djMHgYyzS74fpa7+Cowy91fM7PWjjUFmAJQWVnZljLzbuzYuJ87F446KvvvmzMn7hUaIlJM8hYa7n5sc6+Z2etmVu7ua8ysHFibYbNxwJFm9lWgD9DDzDa7+07nP9x9KjAVoLq6OgeXPcqdsrI4LzF3btu+b84cGDIk1q8SESkWSXVPzQTOSn19FnB/0w3c/XR3r3T34cC3gVszBUYpGDcuQiPbq/i5R2gceSS00sgSESmopELjSmC8mS0DxqceY2bVZnZjQjXlzbhxccnWlSuz2/6VV6C2Vl1TIlJ88tY91RJ3Xw98IsPzNcB5GZ6/Gbg574XlybhxcT93bnbdTTqfISLFSjPCC+CAA6BPH3jiiey2nzMnrtJ3wAH5rUtEpK0UGgXQtSscdlj2J8PnzIlZ4F307ohIkdHHUoGMGwdLlsA777S83bp18Pe/q2tKRIqTQqNAxo2LxQcXLGh5u1mz4v7oo/NekohImyk0CiR9kl9Lpk2LRQ7HjMl/TSIibaXQKJABA2C//Vo+Gb5sGfz1r3DOOZqfISLFSaFRQA2T/OrqMr/+m9/Eye8RJxpeAAAGfklEQVSzzsr8uohI0hQaBTR5MqxfD3fcsfNrdXVwyy0wYUIsHyIiUowUGgU0aRIceihcdhns2PH+12bPhtWr4dxzEylNRCQrCo0CMoMf/QhefjlOeKebNi0WN/z0pxMpTUQkKwqNAvvUp2Li3g9/CFu3xnO1tTBzJpx5JvTokWx9IiItSWTtqc7MDH7845iHceWVMXfj2mvjBPh5O626JSJSXBQaCfjYx2D8eLjiinh80klw6aUxJFdEpJgpNBLyy1/CddfBlClw4IFJVyMikh2FRkI+9KEIDhGRUqIT4SIikjWFhoiIZC2R0DCzAWb2kJktS933b2a7SjP7s5k9b2ZLzWx4YSsVEZF0SbU0LgYecfeRwCOpx5ncCvzM3UcBY4C1BapPREQySCo0JgO3pL6+BTih6QZmNhro5u4PAbj7ZnffUrgSRUSkqaRCY5C7rwFI3e+ZYZt9gU1mdq+ZLTSzn5lZ10w7M7MpZlZjZjXr1q3LY9kiIp1b3obcmtnDwOAML30/y110A44EDgZeBX4HnA3c1HRDd58KTAWorq72dpQrIiJZyFtouPuxzb1mZq+bWbm7rzGzcjKfq6gFFrr7itT33AeMJUNoiIhIYSQ1uW8mcBZwZer+/gzbLAD6m1mZu68DPg7UtLbjp5566g0ze6UDtQ0E3ujA9yet1OuH0v8ZVH/ySv1nSKL+vbLZyNwL35tjZnsAM4BKouvpRHffYGbVwJfd/bzUduOB/wIMeAqY4u47mtltrmqrcffqfB4jn0q9fij9n0H1J6/Uf4Zirj+Rloa7rwc+keH5GuC8tMcPAQcVsDQREWmBZoSLiEjWFBo7m5p0AR1U6vVD6f8Mqj95pf4zFG39iZzTEBGR0qSWhoiIZE2hkWJmx5nZC2a23MyaWwurqJnZy2b2jJktMrNWhycnzcymmdlaM3s27bmsFrMsFs38DJeZ2arU+7DIzCYmWWNLzKzCzB5NLQr6nJl9PfV8SbwPLdRfSu9BTzN70swWp36Gy1PPV5nZ/NR78Dsz65F0raDuKQBSy5O8CIwnJhUuAE5196WJFtZGZvYyUO3uJTE+3cyOAjYDt7r7AannrgI2uPuVqfDu7+7fS7LOljTzM1wGbHb3/59kbdlITa4td/enzawvMbT9BGL1haJ/H1qo/yRK5z0woLe7bzaz7sDjwNeBbwL3uvt0M7sBWOzuv0qyVlBLo8EYYLm7r0jNA5lOLKooeeTufwU2NHm61cUsi0kzP0PJcPc17v506uu3geeBoZTI+9BC/SXDw+bUw+6pmxMTmu9OPV8074FCIwwFXkt7XEuJ/eKlOPBnM3vKzKYkXUw7ZbOYZSm40MyWpLqvirJrp6nU9WoOBuZTgu9Dk/qhhN4DM+tqZouIJZUeAl4CNrl7XWqTovlMUmgEy/BcKfbbHe7uhwATgAtSXSdSeL8C9gY+AqwhVjUoambWB7gHuMjd30q6nrbKUH9JvQfu/p67fwQYRvR8jMq0WWGrykyhEWqBirTHw4DVCdXSbu6+OnW/Fvg98ctXal5P9VM39FeX3IW33P311IdAPfA/FPn7kOpHvwe4w93vTT1dMu9DpvpL7T1o4O6bgL8Qi7P2M7OGVTuK5jNJoREWACNToxV6AKcQiyqWDDPrnToRiJn1Bj4JPNvydxWlhsUsofnFLItaw4dtymcp4vchdRL2JuB5d7867aWSeB+aq7/E3oMyM+uX+roXcCxxbuZR4POpzYrmPdDoqZTUkLxrgK7ANHf/ccIltYmZjSBaFxBriv222H8GM7sTOJpY0fN14AfAfWRYzDKpGlvTzM9wNNEt4sDLwJcazg8UGzM7ApgDPAPUp57+d+K8QNG/Dy3Ufyql8x4cRJzo7kr8IT/D3a9I/Z+eDgwAFgJnuPv25CoNCg0REcmauqdERCRrCg0REcmaQkNERLKm0BARkawpNEREJGsKDRERyZpCQ0REsqbQEMkzM/toauG8nqmZ+8+Z2QFJ1yXSHprcJ1IAZvYjoCfQC6h19/9MuCSRdlFoiBRAak2zBcA24F/c/b2ESxJpF3VPiRTGAKAP0JdocYiUJLU0RArAzGYSi89VEZcnvTDhkkTapVvrm4hIR5jZmUCdu/82dT36J8zs4+7+v0nXJtJWammIiEjWdE5DRESyptAQEZGsKTRERCRrCg0REcmaQkNERLKm0BARkawpNEREJGsKDRERydr/AbmctXYOWojsAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def test(x, alpha):\n", " return np.exp(-alpha * x) * np.cos(x)\n", "x = np.linspace(0, 10 * np.pi, 100) # * between 10 and np.pi\n", "alpha = 0.2\n", "y = test(x, alpha) # forgot to pass alpha to test\n", "plt.plot(x, y, 'b')\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 2\n", "\n", "Answer to Exercise 3" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XucjfX6//HXNc6DENJ2mqmkQkJT2Z21qb4VdnylmiLylWNOm4hdJJRTu9Q2ZkvtGGIL6fCrsItiK8Qm2YVCymGMsxnGzFy/P9Yye4w5rDms9VlrzfV8PNZjZt1rrft+r2m1Lvd9f+7rI6qKMcYYAxDhOoAxxpjgYUXBGGNMJisKxhhjMllRMMYYk8mKgjHGmExWFIwxxmSyomCMMSaTFQVjjDGZrCgYY4zJVNp1AF/UqFFDo6OjXccwxpiQsmHDhkOqWrMgrwmJohAdHc369etdxzDGmJAiIrsL+ho7fGSMMSaTFQVjjDGZrCgYY4zJZEXBGGNMJisKxhhjMvmtKIhIPRH5XES2ichWERmQ7fE/iYiKSA1/ZTAmaCUkQHQ0RER4fiYkhPd2Tcjw55DUNGCIqn4rIpWBDSKyTFW/F5F6QBtgjx+3b0xwSkiAnj0hOdlzf/duz32A2Njw264JKX4rCqq6D9jn/f2EiGwD6gDfA68Aw4D3/bV9Y4LWyJH//WI+JzmZo337MvWHH2jUqBEPP/wwABMmTCAlJeW8pzZr1owOHToAMGbMGNLT0897/KabbuL+++8nLS2NF154IXP54Ndeo2oO22XkSCsKJpMEYo5mEYkGVgFNgDuBP6jqABHZBcSo6qEcXtMT6AlQv37963fvLvA1GMYEp4gIyOH/uwygtAgdOnRg4cKFANSoUYPDhw+f97yuXbvy1ltvAVCuXDnOnj173uP9+vXjtddeIzU1lfLly2cuT1PN+XixCGRkFOktmeAkIhtUNaYgr/H7Fc0iUgl4DxiI55DSSODu/F6nqvFAPEBMTIz/K5cxAXKiWjUqZ/uiB4iIiiJj167zlh06dMG/l85z5syZXB8rW7YsGVm/7KOjPYeMsqtfP89tmJLFr6OPRKQMnoKQoKqLgCuAy4B/e/cS6gLfisil/sxhTLD47LPP6HX4MKdLlTr/gchIGDfOvxsfN86znSxSIiJIff55/27XhBR/jj4S4E1gm6pOBVDVLap6iapGq2o0sBdooar7/ZXDmGDx448/0rlzZ7Zcey3Ex0NUlOfQTVSU576/j+vHxp633eSaNemRkUG35csJxGFkExr8uadwC/A4cJeIbPLe7vPj9owJWseOHaNdu3aULl2apUuXUr57d9i1y3Msf9euwJ3ojY3N3G7kwYM0GT+euXPnMnHixMBs3wQ9f44++gqQfJ4T7a/tGxNM3nzzTXbu3Mny5csJpjbww4cPZ8uWLTz//PPExsZSt25d15GMYwEZfVRUMTExaq2zTShTVTZt2kTz5s1dR7lASkoKmzdv5qabbnIdxRSzwow+sjYXxvjRkiVL2LFjByISlAUBoEKFCpkFYenSpSQlJTlOZFyyomCMn6xdu5bOnTvzzDPPuI7ik99++43OnTvTqVOnC659MCWHFQVj/GDv3r08+OCD1KlTh/j4eNdxfFK7dm3i4uL4/PPPGTx4sOs4xpGQmI7TmFCSkpLCH//4R06ePMny5cupXr2660g+69q1K1u2bGHKlClce+219DzXG8mUGLanYEwxmzBhAt9++y1z586lcePGruMU2Msvv8y9995L37592bFjh+s4JsBsT8GYYjZ8+HCuv/562rZt6zpKoZQqVYp58+bx0Ucf0aBBA9dxTIDZnoIxxWTNmjUcP36cyMhI2rdv7zpOkVStWpVY7wV13333HSdPnnScyASKFQVjisHWrVu555576NOnj+soxSopKYlbbrmFLl26nN9cz4QtKwrGFFFSUhLt2rWjUqVKvPTSS67jFKvq1aszevRoFi9efN7cDCZ82TkFY4rg7NmzdOrUib1797Jy5cqwbBMxcOBAtmzZwpgxY2jcuDGdOnVyHcn4ke0pGFMEo0eP5vPPPyc+Pp6WLVu6juMXIsL06dP5/e9/T9euXdm2bZvrSMaPbE/BmCLo3bs3l156KV27dnUdxa/KlSvHokWLeP31121EUpizhnjGFMLOnTuJjo6mVPbJckqIxMRELrroIsqVK+c6ismDNcQzJgB27dpFy5YtGTRokOsoTpw4cYIbbriBvn372uQ8YcifM6/VE5HPRWSbiGwVkQHe5ZNE5D8isllEFotIVX9lMKa4nTx5kvbt23P27Fn69evnOo4TlStX5vHHH+fNN99k2rRpruOYYubPPYU0YIiqXgO0BPqKSCNgGdBEVZsC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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "temperature = np.loadtxt('rome_temp.dat') # rome_temp.dat\n", "plt.plot(np.arange(1, 13), temperature, 'k--')\n", "for i in range(len(temperature)):\n", " if temperature[i] < 15:\n", " plt.plot(i + 1, temperature[i], 'bo')\n", " else: # add colon\n", " plt.plot(i + 1, temperature[i], 'ro')\n", "plt.xlim(1, 12)\n", "plt.xlabel('month')\n", "plt.ylabel('temperature (Celcius)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 3\n", "\n", "Answer to Exercise 4" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "modified a: [ 77 77 -77 77 -77 -77]\n" ] } ], "source": [ "a = np.array([2, 2, 4, 2, 4, 4])\n", "\n", "for i in range(len(a)): # range(len(a)) i.o. range(a)\n", " if a[i] < 3: # replace value with 77 when value equals 2\n", " a[i] = 77\n", " else: # otherwise replace value with -77\n", " a[i] = -77\n", "print('modified a:', a) # added comma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 4\n", "\n", "Answer to Exercise 5" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y = np.zeros((20, 20)) # add parentheses around (20, 20)\n", "y[8:13] = 10\n", "plt.matshow(y)\n", "plt.title('image of array y'); # add quotes around text string" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 5" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }