{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Introduction to Computational Physics - Week 9 ##" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Table of contents week 9\n", " \n", "Introduction to Computational Physics - Week 9: [>>](#Introduction-to-Computational-Physics---Week-9) \n", "-Table of contents week 9: [>>](#Table-of-contents-week-9) \n", "-Introduction to week 9: [>>](#Introduction-to-week-9) \n", "-Module functions: [>>](#Module-functions) \n", "--Week 9 exercise 1: [>>](#Week-9-exercise-1) \n", "--Week 9 exercise 1 answer: [>>](#Week-9-exercise-1-answer) \n", "-Creating a module: [>>](#Creating-a-module) \n", "--Working in CoCalc: [>>](#Working-in-CoCalc) \n", "--Working on your own computer: [>>](#Working-on-your-own-computer) \n", "-Using the module: [>>](#Using-the-module) \n", "--Week 9 exercise 2: [>>](#Week-9-exercise-2) \n", "--Week 9 exercise 2 answer: [>>](#Week-9-exercise-2-answer) \n", "-Accessing modules in other folders: [>>](#Accessing-modules-in-other-folders) \n", "--Working in CoCalc: [>>](#Working-in-CoCalc) \n", "--Working on your own computer: [>>](#Working-on-your-own-computer) \n", "--Week 10 exercise 3: [>>](#Week-10-exercise-3) \n", "--Week 10 exercise 3 answer: [>>](#Week-10-exercise-3-answer) \n", "-Keyboard input to Python: [>>](#Keyboard-input-to-Python) \n", "--Week 9 exercise 4: [>>](#Week-9-exercise-4) \n", "--Week 9 exercise 4 answer: [>>](#Week-9-exercise-4-answer) \n", "--Week 9 exercise 5: [>>](#Week-9-exercise-5) \n", "--Week 9 exercise 5 answer: [>>](#Week-9-exercise-5-answer) \n", "-Week 9 marks: [>>](#Week-9-marks) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Introduction to week 9\n", "\n", "This week, we will first see how we can turn the functions we have written in a Jupyter Notebook into a module that can be loaded and used in the same way as the Numpy, Matplotlib or other libraries. We will then look at how we can provide input to Python programs from the keyboard. \n", "\n", "## Module functions \n", "\n", "Let's start by writing a few functions that we can use to create a module." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# \n", "#\n", "import numpy as np\n", "#\n", "def circleParams(r):\n", " '''\n", " Given the radius of a circle, this function returns its area and circumference.\n", " '''\n", " A = np.pi*r**2\n", " c = 2*np.pi*r\n", " return A, c\n", "#\n", "def rectangleParams(h, w):\n", " '''\n", " Given the height and width of a rectangle, this function returns its area and perimeter.\n", " '''\n", " A = h*w\n", " p = 2*(h + w)\n", " return A, p\n", "#\n", "def sphereParams(r):\n", " '''\n", " Given the radius of a sphere, this function returns its volume and its surface area.\n", " '''\n", " V = 4/3*np.pi*r**3\n", " A = 4*np.pi*r**2\n", " return V, A\n", "#\n", "def rectPrismParams(h, w, d):\n", " '''\n", " Given the height, width and depth of a rectangular prism, this function returns its volume, \n", " surface area and total side length.\n", " '''\n", " V = h*w*d\n", " A = 2*(h*w + w*d + h*d)\n", " s = 4*(h + w + d)\n", " return V, A, s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "As we have seen many times, we can use these functions in the Notebook in which they are defined. For example, here is a plot of the volume, $V$, and area, $A$, of a sphere as a function of its radius, $r$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# \n", "#\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "#\n", "nArr = 50\n", "rBot = 0.0\n", "rTop = 4.0\n", "rArr = np.linspace(rBot, rTop, nArr)\n", "Varr, Aarr = sphereParams(rArr)\n", "#\n", "plt.figure(figsize = (7, 5))\n", "plt.title(\"Volume and area of sphere\")\n", "plt.ylabel(\"Volume (m$^3$) or area (m$^2$)\")\n", "plt.xlabel(\"Radius (m)\")\n", "plt.plot(rArr, Varr, linestyle = '-', color = 'r')\n", "plt.plot(rArr, Aarr, linestyle = '-', color = 'b')\n", "plt.grid(color = 'green')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 1\n", "\n", "Make a plot showing the volume, surface area and side length of a rectangular prism of width $w$ and depth $d$ as a function of its height, $h$. Use $w = 1.5 \\,{\\rm m}$, $d = 2.5 \\,{\\rm m}$ and $h$ in the range $0 < h < 4.0 \\,{\\rm m}$. Include a legend showing what each of the lines on the plot represents! " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 1 answer" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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MmnSJLp3787kyZN/9V5GRoYHERljTPAyM+G//4XmzeGhh1xLbvVqmDABqlb1OrrgWMILg8OHD/PVV1/xyiuvZCe8OXPm0Lt3b6666irOPfdcMjIyuO++++jUqRNt27blpZdeyv5s37596dChA+eeey6ffBK1lZKMMVHuyy/dmpfXXQd167rX770HZ53ldWSFEyUN0ejy8ccf4/P5aN68OdWrV+fbb78FYNGiRaxYsYImTZowceJEqlSpwuLFizl+/DjdunVjwIABNGzYkI8++ojKlSuze/duzj//fH7/+98jkd45bowpMdavh1Gj4IMPoEED18K76iqIi/ImUolOeAFWB+LoyUaUjw/smAFUB2LSpEncddddAFxxxRVMmjSJiy66iM6dO9OkSRMApk2bxrJly3j//fcBOHDgAGvXrqVBgwY88MADzJs3j7i4OH755Rd27NjBGWecEViAxhhTSPv3wxNPwN//DvHx7p7dPfdA+QCrp0W6Ep3wvLBnzx5mzZrFihUrEBEyMjIQEQYOHEiFCjnVfFWVf/zjHyQlJZ3y+ddff51du3aRmppKfHw8jRs3Ji0trbi/DGNMDElPh5degrFj3WopN9wAjz8O9ep5HVloleiEF2B1IFbt2hSy8kDvv/8+1113XfY9OYCePXsyf/78U/ZLSkri3//+N3369CE+Pp4ff/yR+vXrc+DAAWrXrk18fDyzZ89m06ZNIYnLGGPyUoUpU9yIy9WroXdvePZZ15NVEkV5j2zkmTRpEpdccskp2y699FLeeeedU7b9+c9/plWrVnTo0IE2bdowbNgw0tPTufrqq1myZAkdO3bk7bffpkWLFsUZvjEmRixfDklJcNFFroX3yScwc2bJTXZQwlt4XpgzZ86vtt1xxx3ccccdp2yLi4tj3LhxjBs37lf7L1iwIFzhGWNi3I4dbnrByy9DlSquJ+wvf4EyZbyOLPws4RljTAxIS3PJbdw4OHYMhg93ia96da8jKz6W8IwxpgRThf/9D0aPhk2bXJ26CRPcRPJYY/fwjDGmhFqwAC64AK68EqpVc/foPv44NpMdWAvPGGNKnI0b4aeXn+CCxXDGGfDqq261lFKlvI7MW8XewhORBBFZJCLfi8hKEXnEv/1hEflFRJb6HwOLOzZjjIlmBw/C/fdDixawf2lPHnzQLfB8442W7MCbFt5xoI+q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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# \n", "#\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "#\n", "nArr = 50\n", "hBot = 0.0\n", "hTop = 4.0\n", "hArr = np.linspace(hBot, hTop, nArr)\n", "width = 1.5\n", "depth = 2.5\n", "Varr, Aarr, sArr = rectPrismParams(hArr, width, depth)\n", "#\n", "plt.figure(figsize = (7, 5))\n", "plt.title(\"Volume, area and side length of prism\")\n", "plt.ylabel(\"Volume (m$^3$), area (m$^2$) or length (m)\")\n", "plt.xlabel(\"Height (m)\")\n", "plt.plot(hArr, Varr, linestyle = '-', color = 'r', label = \"Vol\")\n", "plt.plot(hArr, Aarr, linestyle = '-', color = 'b', label = \"Area\")\n", "plt.plot(hArr, sArr, linestyle = '-', color = 'k', label = \"Len\")\n", "plt.grid(color = 'green')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "What we now want to do is to see how we can use these functions in a different Jupyter Notebook, without copying their definitions into that Notebook.\n", "\n", "## Creating a module\n", "### Working in CoCalc\n", "\n", "In order to create a module containing routines from this Notebook, go through the following steps:\n", "\n", "1. Click on the *File* menu (in the Notebook, not the CoCalc Files menu!), then, in *Download as...* select *Executable script (.txt)*.\n", "2. Wait until the process is complete.\n", "3. Close the *Download* box.\n", "4. Close the Phys105-Week09-Student.ipynb Notebook.\n", "5. You will now have a file called Phys105-Week09-Student.py in the Phys105-Week09 directory. Rename this file by selecting it (tick the box next to it) and choosing the *rename* option. Call it *Phys105W09.py*.\n", "6. Open *Phys105W09.py* (by clicking on it in CoCalc). You will see that it is just a copy of this Notebook written as Python code, i.e. all the Markdown cells have been turned into Python comments by sticking a \"#\" in front of them.\n", "7. Tidy up the file by deleting everything except the code for the functions *circleParams*, *rectangleParams*, *sphereParams* and *rectPrismParams*. Do not delete the line that reads `import numpy as np`!\n", "8. Close *Phys105W09.py*.\n", "9. Open *Phys105-Week09-Student.ipynb* again.\n", "\n", "### Working on your own computer\n", "\n", " \n", "In order to create a module containing routines from this Notebook, click on the *File* menu, then on *Download as* and select *Python*. (If you are running Jupyter Lab rather than Jupyter Notebook, you need to use *File*, *Export Notebook As...* and then *Export Notebook to Executable Script*.) Depending on the security settings on your browser, you may get a warning about the file that is created, saying that it can damage your computer. You can ignore this and click *Keep* or *Save*. In your default download location (usually your *Downloads* folder) you will then have a file called *Phys105-Week09-Student.py*. \n", "\n", "Move *Phys105-Week09-Student.py* into your working directory (the directory or folder which contains this Notebook) and rename it. Call it *Phys105W09.py*. Open *Phys105W09.py* by clicking on it in your Jupyter Notebook browser. You will see that it is just a copy of this Notebook written as Python code, i.e. all the Markdown cells have been turned into Python comments by sticking a \"#\" in front of them. Tidy up the file by deleting the superfluous comment lines - leave the ones that are useful! - and other material that isn't part of the functions *circleParams*, *rectangleParams*, *sphereParams* and *rectPrismParams*. Do not delete the line that reads `import numpy as np`!\n", "\n", "\n", "## Using the module\n", "\n", "You can now use all the functions in *Phys105W09.py* by importing it as a module, as shown in the following example. (The reason you had to rename the file is that hyphens are not allowed in module names in Python, so you wouldn't be able to import the file if it was called *Phys105-Week09-Student.py*.) Note, your file name should have the extension *.py*, but you don't include this in the `import` statement. \n", "\n", "Notice that, after doing `import Phys105W09 as ph`, we have called the routine `ph.circleParams` (with a `ph.` in front of the name to indicate it comes from the Phys105W09 module, cf. using `np.cos` to use the cosine function from the numpy library). The version of *circleParams* below is therefore that from the *Phys105W09* module, not the one defined in this Notebook! " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# \n", "#\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import Phys105W09 as ph\n", "#\n", "nArr = 50\n", "rBot = 0.0\n", "rTop = 4.0\n", "rArr = np.linspace(rBot, rTop, nArr)\n", "Aarr, cArr = ph.circleParams(rArr)\n", "#\n", "plt.figure(figsize = (7, 5))\n", "plt.title(\"Area and circumference of circle\")\n", "plt.ylabel(\"Area or circumference\")\n", "plt.xlabel(\"Radius\")\n", "plt.plot(rArr, Aarr, linestyle = '-', color = 'r')\n", "plt.plot(rArr, cArr, linestyle = '-', color = 'b')\n", "plt.grid(color = 'green')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "We have been careful to include the statement `import numpy as np` at the top of *Phys105W09.py*. This statement is executed when the module is first loaded, so even if we use the functions in *Phys105W09.py* from a program which doesn't import numpy, they will work OK.\n", "\n", "\n", "### Week 9 exercise 2\n", "\n", "Copy the code you used to solve exercise 1 into the cell below this one. Alter the code so that it produces a figure with two supbplots. On the left, use the version of *rectPrismParams* in this Notebook, on the right, the version from the module *Phys105W09*. Are the two graphs the same?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 2 answer\n", "\n", "The two graphs are of course the same, as seen below." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# \n", "#\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "#\n", "nArr = 50\n", "hBot = 0.0\n", "hTop = 4.0\n", "hArr = np.linspace(hBot, hTop, nArr)\n", "width = 1.5\n", "depth = 2.5\n", "Vhere, Ahere, sHere = rectPrismParams(hArr, width, depth)\n", "Vthere, Athere, sThere = ph.rectPrismParams(hArr, width, depth)\n", "#\n", "plt.figure(figsize = (14, 5))\n", "plt.subplot(1, 2, 1)\n", "plt.title(\"Prism parameters from this Notebook\")\n", "plt.ylabel(\"Volume (m$^3$), area (m$^2$) or length (m)\")\n", "plt.xlabel(\"Height (m)\")\n", "plt.plot(hArr, Vhere, linestyle = '-', color = 'r', label = \"Vol\")\n", "plt.plot(hArr, Ahere, linestyle = '-', color = 'b', label = \"Area\")\n", "plt.plot(hArr, sHere, linestyle = '-', color = 'k', label = \"Len\")\n", "plt.grid(color = 'green')\n", "plt.legend()\n", "#\n", "plt.subplot(1, 2, 2)\n", "plt.title(\"Prism parameters from Phys105W09\")\n", "plt.ylabel(\"Volume (m$^3$), area (m$^2$) or length (m)\")\n", "plt.xlabel(\"Height (m)\")\n", "plt.plot(hArr, Vthere, linestyle = '-', color = 'r', label = \"Vol\")\n", "plt.plot(hArr, Athere, linestyle = '-', color = 'b', label = \"Area\")\n", "plt.plot(hArr, sThere, linestyle = '-', color = 'k', label = \"Len\")\n", "plt.grid(color = 'green')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Accessing modules in other folders\n", "\n", "What we have done so far only allows us to use functions from a module in the directory in which we are working. We can also get at modules in other directories.\n", "\n", "### Working in CoCalc\n", "In order to do this, follow the procedure below:\n", "\n", "1. Close this Notebook.\n", "2. Use the menu to duplicate Phys105W09.py and call the new file Phys105W09new.py.\n", "3. Make a new folder (using the CoCalc `+New` menu) called Phys105lib. This will appear in your Phys105-Week09 folder.\n", "4. Using the CoCalc menu, move Phys105W09new.py into Phys105lib.\n", "\n", "Now you can restart the Phys105-Week09-Student.ipynb Notebook and run the code cell below.\n", "\n", "### Working on your own computer\n", "\n", "In order to try this, make a copy of Phys105W09.py and call it Phys105W09new.py. Make a new folder Phys105lib in your working directory. (You can do this using File Explorer on Windows, Finder on a Mac or the command mkdir on a Linux system.) Move the file Phys105W09new into the folder Phys105lib. Now try to run the cell below.\n", "" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "ename": "ModuleNotFoundError", "evalue": "No module named 'Phys105W09new'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mPhys105W09new\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mphnew\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;31m#\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mnArr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m50\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'Phys105W09new'" ] } ], "source": [ "# \n", "#\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import Phys105W09new as phnew\n", "#\n", "nArr = 50\n", "rBot = 0.0\n", "rTop = 4.0\n", "rArr = np.linspace(rBot, rTop, nArr)\n", "Aarr, cArr = phnew.circleParams(rArr)\n", "#\n", "plt.figure(figsize = (7, 5))\n", "plt.title(\"Area and circumference of circle\")\n", "plt.ylabel(\"Area or circumference\")\n", "plt.xlabel(\"Radius\")\n", "plt.plot(rArr, Aarr, linestyle = '-', color = 'r')\n", "plt.plot(rArr, cArr, linestyle = '-', color = 'b')\n", "plt.grid(color = 'green')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Python can't find the *Phys105W19new* module, because it only looks for it in the current working directory and in directories specified by a system variable called `path`. We can see which directories are in `path` using the `sys.path` command, after we have imported the `sys` module, as follows." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Directories in path are:\n", " ['C:\\\\Users\\\\green\\\\OneDrive\\\\OneDocuments\\\\Liverpool\\\\Teaching\\\\Phys105-Comp01-2020\\\\Phys105-Classes2020\\\\Phys105-Week09', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\python38.zip', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\DLLs', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib', 'C:\\\\Users\\\\green\\\\Anaconda3', '', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\locket-0.2.1-py3.8.egg', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32\\\\lib', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\Pythonwin', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\IPython\\\\extensions', 'C:\\\\Users\\\\green\\\\.ipython']\n" ] } ], "source": [ "# \n", "#\n", "import sys\n", "#\n", "print(\"Directories in path are:\\n\",sys.path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "The `path` variable is set up when Anaconda is installed on your computer, or when you create your CoCalc ID. On your computer, exactly what you see will depend on your computer's operating system and where Anaconda was installed. On CoCalc, everyone should see the same `path`. The `path` entries will always have the structure *top_level/second_level/third_level*, and this is what you will see on a Macintosh or a Linux system. On a Windows computer, the forward slashes (/) will be replaced by back-slashes (\\\\). These have to be represented by a double back-slash, as the first backslash is treated as an escape character (in both Python and Markdown). CoCalc runs on Linux, you will see forward slashes when using it.\n", "\n", "If we want to temporarily add a new directory to `path`, we can do it using `path.append` from the `sys` module as follows." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Directories in path are:\n", " ['C:\\\\Users\\\\green\\\\OneDrive\\\\OneDocuments\\\\Liverpool\\\\Teaching\\\\Phys105-Comp01-2020\\\\Phys105-Classes2020\\\\Phys105-Week09', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\python38.zip', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\DLLs', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib', 'C:\\\\Users\\\\green\\\\Anaconda3', '', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\locket-0.2.1-py3.8.egg', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32\\\\lib', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\Pythonwin', 'C:\\\\Users\\\\green\\\\Anaconda3\\\\lib\\\\site-packages\\\\IPython\\\\extensions', 'C:\\\\Users\\\\green\\\\.ipython', 'Phys105lib']\n" ] } ], "source": [ "# \n", "#\n", "sys.path.append('Phys105lib')\n", "print(\"Directories in path are:\\n\",sys.path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "You will see that *Phys105lib* has now been added to *path*. Now `import Phys105W09new as phnew` will work. \n", "\n", "### Week 10 exercise 3\n", "\n", "Copy the cell which uses the routine `phnew.circleParams` above and insert it below. Run it to prove that your modified *path* variable is doing what it should!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 10 exercise 3 answer\n", "\n", "Running copy of the above cell should now work, as below! " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# \n", "#\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import Phys105W09new as phnew\n", "#\n", "nArr = 50\n", "rBot = 0.0\n", "rTop = 4.0\n", "rArr = np.linspace(rBot, rTop, nArr)\n", "Aarr, cArr = phnew.circleParams(rArr)\n", "#\n", "plt.figure(figsize = (7, 5))\n", "plt.title(\"Area and circumference of circle\")\n", "plt.ylabel(\"Area or circumference\")\n", "plt.xlabel(\"Radius\")\n", "plt.plot(rArr, Aarr, linestyle = '-', color = 'r')\n", "plt.plot(rArr, cArr, linestyle = '-', color = 'b')\n", "plt.grid(color = 'green')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "The addition to `path` we have made above will allow us to use anything in the module *Phys105lib* if it is in our current working directory. If we want to be able to use routines from *Phys105lib* from *any* directory, we have to add the full description of its location to `path`. On CoCalc, this implies...\n", "\n", "```python\n", "import sys\n", "#\n", "sys.path.append('/home/user/Phys105 Introduction to Computational Physics/ComputerClasses/Phys105-Week09/Phys105lib')\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "On my computer, what is needed is...\n", "\n", "```python\n", "import sys\n", "#\n", "sys.path.append('C:/Users/green/OneDrive/OneDocuments/Liverpool/Teaching/Phys105-Comp01-2019/Phys105-Week09/Phys105lib')\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "In both cases, this is a bit of a mouthful. (You can work out what the full description of the location of *Phys105lib* should be on your computer by looking at the existing entries in your `path` variable.) Notice that you can use forward slashes in the `sys.path.append` command even on a Windows system; Python changes these to the format that is relevant for your operating system. (Because I am working on a Windows machine, I could have used the double back-slash notation, it's just a bit clumsier.) \n", "\n", "There are (system dependent) ways of permanently adding folders like `mylib` to `path`, but getting this wrong can cause problems, so we will use the above method. The downside is that before using any of the routines in the library `mylib`, we have to include the statement:\n", "\n", "```Python\n", "import sys\n", "sys.path.append('path to mylib')\n", "```\n", "\n", "The upside is that when we shut down our Jupyter Notebook, or restart the kernel, `path` returns to its original value and we don't influence how anything else on the computer works.\n", "\n", "## Keyboard input to Python\n", "\n", "Python programs can read input from the keyboard. They do this with the function `input()`, as is shown in the following example." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "What's your name? Tim\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Nice to meet you Tim!\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "How old are you? 123\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "So, you are already 123 years old Tim!\n" ] } ], "source": [ "# \n", "# \n", "name = input(\"What's your name?\")\n", "print(\"Nice to meet you \" + name + \"!\")\n", "age = input(\"How old are you?\")\n", "print(\"So, you are already\",age,\"years old\",name,\"\\b!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "We can check the type of the input as below:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Type of name is \n", "Type of age is \n" ] } ], "source": [ "# \n", "#\n", "print(\"Type of name is\",type(name))\n", "print(\"Type of age is\",type(age))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Everything (whether numbers or letters) is read as strings. This means the following code will not work (try it!):" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "What's your name? Tim\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Nice to meet you Tim!\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "How old are you? 123\n" ] }, { "ename": "TypeError", "evalue": "unsupported operand type(s) for -: 'int' and 'str'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minput\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"How old are you?\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[1;31m#\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 9\u001b[1;33m \u001b[0mretireIn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mretirementAge\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mage\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 10\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mretireIn\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 11\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"I guess you will retire in\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mretireIn\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"years,\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"\\b.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'int' and 'str'" ] } ], "source": [ "# \n", "#\n", "retirementAge = 67\n", "#\n", "name = input(\"What's your name?\")\n", "print(\"Nice to meet you \" + name + \"!\")\n", "age = input(\"How old are you?\")\n", "#\n", "retireIn = retirementAge - age\n", "if retireIn > 0:\n", " print(\"I guess you will retire in\",retireIn,\"years,\",name,\"\\b.\")\n", "else:\n", " print(\"I guess you retired\",-retireIn,\"years ago,\",name,\"\\b.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 4\n", "\n", "Copy the above cell and insert it below this one. Modify the code so that it runs wthout errors!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 4 answer" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "What's your name? Tim\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Nice to meet you Tim!\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "How old are you? 123\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "I guess you retired 56 years ago, Tim.\n" ] } ], "source": [ "# \n", "#\n", "name = input(\"What's your name?\")\n", "print(\"Nice to meet you \" + name + \"!\")\n", "age = input(\"How old are you?\")\n", "#\n", "retireIn = retirementAge - int(age)\n", "if retireIn > 0:\n", " print(\"I guess you will retire in\",retireIn,\"years,\",name,\"\\b.\")\n", "else:\n", " print(\"I guess you retired\",-retireIn,\"years ago,\",name,\"\\b.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 5\n", "\n", "Copy your answer to exercise 4 into the cell below this one and modify it so it checks that the age entered is in the range 0 < age < 120 years. If the age is out of range, ask that it be re-entered. If an out-of-range answer is given more than 3 times in a row, print an error message and stop the program!\n", "\n", "**Hint 1** You could do this using the `while`, `break` and `else` control structure, or using a `for` loop. Remember also the `sys.exit()` command we have mentioned in previous weeks! \n", "\n", "**Hint 2** Remember that Python reads the input as a string. Does the statement `if age > 0` when `age` is a string make sense? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Week 9 exercise 5 answer " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "What's your name? Tim\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Nice to meet you Tim!\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "How old are you? 123\n", "How old are you? 100\n" ] }, { "ename": "NameError", "evalue": "name 'retirementAge' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[1;31m#\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 20\u001b[1;33m \u001b[0mretireIn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mretirementAge\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 21\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mretireIn\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"I guess you will retire in\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mretireIn\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"years,\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"\\b.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mNameError\u001b[0m: name 'retirementAge' is not defined" ] } ], "source": [ "# \n", "#\n", "import sys\n", "#\n", "# Alternative one\n", "name = input(\"What's your name?\")\n", "print(\"Nice to meet you \" + name + \"!\")\n", "#\n", "count = 0\n", "maxCount = 3\n", "while count < maxCount:\n", " age = input(\"How old are you?\")\n", " if int(age) > 0 and int(age) < 120:\n", " break\n", " count += 1\n", "else:\n", " print(\"Too many incorrect inputs!\")\n", " sys.exit()\n", "#\n", "retireIn = retirementAge - int(age)\n", "if retireIn > 0:\n", " print(\"I guess you will retire in\",retireIn,\"years,\",name,\"\\b.\")\n", "else:\n", " print(\"I guess you retired\",-retireIn,\"years ago,\",name,\"\\b.\")" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "ename": "SystemExit", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mSystemExit\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Too many incorrect inputs!\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 18\u001b[1;33m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 19\u001b[0m \u001b[1;31m#\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[0mretireIn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mretirementAge\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mSystemExit\u001b[0m: " ] } ], "source": [ "# \n", "#\n", "# The following command will give the last full traceback, not relevant here if it was caused by an earlier error!\n", "%tb" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "What's your name? Tim\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Nice to meet you Tim!\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "How old are you? 123\n", "How old are you? 123\n", "How old are you? 123\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Too many incorrect inputs!\n" ] }, { "ename": "SystemExit", "evalue": "", "output_type": "error", "traceback": [ "An exception has occurred, use %tb to see the full traceback.\n", "\u001b[1;31mSystemExit\u001b[0m\n" ] } ], "source": [ "# \n", "#\n", "import sys\n", "#\n", "# Alternative two\n", "name = input(\"What's your name?\")\n", "print(\"Nice to meet you \" + name + \"!\")\n", "#\n", "for count in range(0, maxCount):\n", " age = input(\"How old are you?\")\n", " if int(age) > 0 and int(age) < 120:\n", " break\n", "#\n", "if count < maxCount - 1:\n", " retireIn = retirementAge - int(age)\n", " if retireIn > 0:\n", " print(\"I guess you will retire in\",retireIn,\"years,\",name,\"\\b.\")\n", " else:\n", " print(\"I guess you retired\",-retireIn,\"years ago,\",name,\"\\b.\")\n", "else:\n", " print(\"Too many incorrect inputs!\")\n", " sys.exit()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "ename": "SystemExit", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mSystemExit\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Too many incorrect inputs!\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 22\u001b[1;33m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mSystemExit\u001b[0m: " ] } ], "source": [ "# \n", "#\n", "# The following command will give the last full traceback, not relevant here if it was caused by an earlier error!\n", "%tb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Week 9 marks\n", "\n", "|Exercise | Mark | Comments |\n", "|-----------|---------|-----------------------------------------|\n", "| 1 | 2 | |\n", "| 2 | 2 | |\n", "| 3 | 2 | |\n", "| 4 | 2 | |\n", "| 5 | 2 | |\n", "| **Total** | **10** | |" ] } ], "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.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }