From ea1d5928ad28d4ff89bfd460dfc3afe1f95d1677 Mon Sep 17 00:00:00 2001 From: giumas Date: Thu, 14 Mar 2019 13:41:59 -0400 Subject: [PATCH 01/12] bug fix in license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 65c5ca8..0a04128 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. From d4b25895abb8ebba4dbb0302d5c0b0c5417e4a65 Mon Sep 17 00:00:00 2001 From: giumas Date: Thu, 14 Mar 2019 14:31:16 -0400 Subject: [PATCH 02/12] added icon --- images/python_basics.ico | Bin 0 -> 31138 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/python_basics.ico diff --git a/images/python_basics.ico b/images/python_basics.ico new file mode 100644 index 0000000000000000000000000000000000000000..07cc61d666e70298a1d4101c6e466b63e452e29e GIT binary patch literal 31138 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 J@?xvK{|_xAG4%id literal 0 HcmV?d00001 From d8f49434749df8ef7e4c7704b0ee6245e0de9b4c Mon Sep 17 00:00:00 2001 From: giumas Date: Sun, 24 Mar 2019 13:59:06 -0400 Subject: [PATCH 03/12] fixed exercise bug in 006 --- 006_Read_and_Write_Text_Files.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/006_Read_and_Write_Text_Files.ipynb b/006_Read_and_Write_Text_Files.ipynb index 108fc30..559c470 100644 --- a/006_Read_and_Write_Text_Files.ipynb +++ b/006_Read_and_Write_Text_Files.ipynb @@ -659,7 +659,7 @@ { "cell_type": "markdown", "metadata": { - "solution2": "shown", + "solution2": "hidden", "solution2_first": true }, "source": [ @@ -672,7 +672,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "solution2": "shown" + "solution2": "hidden" }, "outputs": [], "source": [ From f59b6964fc828001ab8ee771ec91528199f3c0f1 Mon Sep 17 00:00:00 2001 From: giumas Date: Sun, 24 Mar 2019 14:14:33 -0400 Subject: [PATCH 04/12] fixed minor bugs in 006 and 007 after Jason --- 006_Read_and_Write_Text_Files.ipynb | 14 ++++++++------ 007_Dictionaries_and_Metadata.ipynb | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/006_Read_and_Write_Text_Files.ipynb b/006_Read_and_Write_Text_Files.ipynb index 559c470..e63df2a 100644 --- a/006_Read_and_Write_Text_Files.ipynb +++ b/006_Read_and_Write_Text_Files.ipynb @@ -19,7 +19,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You have learned about lists and how to write your own functions with loops and conditional statements. This allows you to write programs performing a variety of tasks. \n", + "You have learned about lists and how to [write your own functions](005_Write_Your_Own_Functions.ipynb) with [loops](004_Loops.ipynb) and [conditional statements](003_Conditional_Execution.ipynb). This allows you to write programs performing a variety of tasks. \n", "\n", "However, a convenient mechanism to access data that you want to analyze is currently missing. In this notebook, we will explore the use of [files](https://en.wikipedia.org/wiki/Computer_file) since they are a common way to access stored data." ] @@ -78,7 +78,7 @@ "source": [ "\n", "\n", - "In Python, a **module** is a file containing definitions and statements. " + "In Python, a **module** is a file containing code (e.g., definitions and statements). " ] }, { @@ -183,7 +183,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To be able to access the `data` sub-folder, we extend the previous code using `os.path.join()` and `os.path.exist()` functions to:\n", + "To be able to access the `data` sub-folder, we extend the previous code using `os.path.join()` and `os.path.exists()` functions to:\n", "\n", "- Create the absolute path to the `data` sub-folder.\n", "- Check whether the resulting path actually exists." @@ -242,7 +242,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We will now retrieve all the paths to the files in the `data` folder. Specifically, we will create a function `get_data_paths()` that returns a list containing all the files in that folder, using the `os.listdir()` function." + "We will now retrieve all the paths to the files in the `data` folder. Specifically, we will create a function `get_data_paths()` that returns a list containing all the files in that folder, using the `os.listdir()` function from the `os` module." ] }, { @@ -251,6 +251,8 @@ "metadata": {}, "outputs": [], "source": [ + "import os\n", + "\n", "def get_data_paths():\n", " data_paths = list() # create an empty list to be populated and returned\n", " data_folder = get_data_folder() # call the function you created to return the data directory path\n", @@ -289,7 +291,7 @@ "source": [ "\n", "\n", - "You do not need to remember all the names of the available Python functions, but you need to learn how to search for them. The [official Python documentation](https://docs.python.org/3.6/index.html) is a good place to start. You can also get a list of the functions in the `os.path` module by entering `dir('os.path')` in a code cell." + "You do not need to remember all the names of the available Python functions, but you need to learn how to search for them. The [official Python documentation](https://docs.python.org/3.6/index.html) is a good place to start. You can also get a list of the functions in the `os.path` module by entering `dir(os.path)` in a code cell." ] }, { @@ -428,7 +430,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You may ask why there are 100 characters instead of 80? Each of the 20 rows has 4 visible characters (e.g., `30.8`), but there is also the invisible [newline character](https://en.wikipedia.org/wiki/Newline) (i.e., `\\n`) that text editors treat as a new line. Thus, `(4+1) * 20 = 100` characters." + "You may ask why there are 100 characters instead of 80? Each of the 20 rows has 4 visible characters (e.g., `30.8`), but there is also the invisible [newline character](https://en.wikipedia.org/wiki/Newline) (i.e., `\\n`) that text editors treat as a break between two lines. Thus, `(4+1) * 20 = 100` characters." ] }, { diff --git a/007_Dictionaries_and_Metadata.ipynb b/007_Dictionaries_and_Metadata.ipynb index 8bad430..1131a5e 100644 --- a/007_Dictionaries_and_Metadata.ipynb +++ b/007_Dictionaries_and_Metadata.ipynb @@ -73,7 +73,7 @@ "\n", "- All the item pairs are printed between curly brackets (i.e., `{`, `}`). \n", "- The items are separated by a comma (e.g., the pair `\"Li\": \"Lithium\"` is an item). \n", - "- For each item, the two parts are separated by a `-`: the key on the left (e.g., `\"Li\"`) and the value on the right (e.g., `\"Lithium\"`).\n" + "- For each item, the two parts are separated by a `:` with the key (e.g., `\"Li\"`) on the left and the value (e.g., `\"Lithium\"`) on the right." ] }, { From c8bd64ffb87ec9a926376daab63549b64bce16e4 Mon Sep 17 00:00:00 2001 From: giumas Date: Tue, 9 Apr 2019 16:29:42 -0400 Subject: [PATCH 05/12] removed supplemental notebooks about classes --- 007_Dictionaries_and_Metadata.ipynb | 18 +- 008_A_Class_as_a_Data_Container.ipynb | 5 +- 009_Summing-Up.ipynb | 2 +- SUP_First_Steps_of_a_Class.ipynb | 608 -------------------------- SUP_More_About_Classes.ipynb | 458 ------------------- SUP_Summing-Up_With_Classes.ipynb | 332 -------------- index.ipynb | 7 +- 7 files changed, 7 insertions(+), 1423 deletions(-) delete mode 100644 SUP_First_Steps_of_a_Class.ipynb delete mode 100644 SUP_More_About_Classes.ipynb delete mode 100644 SUP_Summing-Up_With_Classes.ipynb diff --git a/007_Dictionaries_and_Metadata.ipynb b/007_Dictionaries_and_Metadata.ipynb index 1131a5e..5dbed65 100644 --- a/007_Dictionaries_and_Metadata.ipynb +++ b/007_Dictionaries_and_Metadata.ipynb @@ -134,13 +134,6 @@ "By now, you may have noticed that the `str` variables in the above `chem_dict` are printed within single quotes `'` rather than double quotes `\"`. This is an alternative and valid way to define strings in Python. However, mixing `'` and `\"` in the same string results in an error. For consistency, we always use `\"` here." ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## A `dict` is unordered" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -148,22 +141,13 @@ "When you print the content of a dictionary, you may have the items presented in an order that differs from the one that you used to populate the `dict`. This is **not** an error, but a specific property of a `dict`." ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "A `dict` is an **unordered** container. The order of items insertion is not preserved." - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", - "If you need to preserve the items order, Python provides a special dictionary called [`OrderedDict`](https://docs.python.org/3.6/library/collections.html?highlight=ordereddict#ordereddict-objects)." + "A `dict` is an **unordered** container. The order of items insertion is not preserved. If you need to preserve the items order, Python provides a special dictionary called [`OrderedDict`](https://docs.python.org/3.6/library/collections.html?highlight=ordereddict#ordereddict-objects)." ] }, { diff --git a/008_A_Class_as_a_Data_Container.ipynb b/008_A_Class_as_a_Data_Container.ipynb index b7e784b..ceed8af 100644 --- a/008_A_Class_as_a_Data_Container.ipynb +++ b/008_A_Class_as_a_Data_Container.ipynb @@ -349,7 +349,7 @@ "source": [ "\n", "\n", - "If you are interested in learning more about classes, you may read [this supplemental notebook](SUP_First_Steps_of_a_Class.ipynb)." + "If you are interested in learning more about classes, you may want to explore the [Foundations of Ocean Data Science](https://www.hydroffice.org/manuals/epom/foundations_of_ocean_data_science.html) notebooks." ] }, { @@ -373,7 +373,8 @@ "metadata": {}, "source": [ "* [The official Python 3.6 documentation](https://docs.python.org/3.6/index.html)\n", - " * [Classes](https://docs.python.org/3.6/tutorial/classes.html)" + " * [Classes](https://docs.python.org/3.6/tutorial/classes.html)\n", + "* [Foundations of Ocean Data Science](https://www.hydroffice.org/manuals/epom/foundations_of_ocean_data_science.html)" ] }, { diff --git a/009_Summing-Up.ipynb b/009_Summing-Up.ipynb index 4159329..5c42c29 100644 --- a/009_Summing-Up.ipynb +++ b/009_Summing-Up.ipynb @@ -258,7 +258,7 @@ "\n", "We can check the success of this operation by printing depths and sound speed values. We will do this by accessing the values by index with the help of the [`range()`](https://docs.python.org/3.6/library/stdtypes.html?#range) type.\n", "\n", - "A `range()` with an integer value as single parameter represents a sequence of numbers ranging from 0 to the value passed as a parameter. In the code below, we use `range` with `10`:" + "A `range()` with an integer value as single parameter represents a sequence of numbers ranging from 0 up to (but not including) the value passed as a parameter. In the code below, we use `range` with `10`:" ] }, { diff --git a/SUP_First_Steps_of_a_Class.ipynb b/SUP_First_Steps_of_a_Class.ipynb deleted file mode 100644 index 442c643..0000000 --- a/SUP_First_Steps_of_a_Class.ipynb +++ /dev/null @@ -1,608 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"ePOM\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"ePOM\"\n", - "# First Steps of a Class" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It is time to learn how to define your own type! " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Creating your own type is a bit more complicated than writing functions, but it comes with big advantages that will be apparent soon." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "A user-defined type is called a **class**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We used several built-in types (e.g., `int`, `str`, `list`), thus you should have some familiarity with the concepts that we are going to introduce. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "A class provides a powerful means of bundling data and functionalities together." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will learn how to create a class by example. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Class Definition and Instantiation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Assuming that we want to create a class that is able to read and write the content of the `sal.txt` file cited in the [previous notebook](007_Read_and_Write_Text_Files.ipynb). As such, we will call this new class `SalinityManager`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is what we need to define such a class:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class SalinityManager:\n", - " \"\"\"A file manager for salinity\"\"\" # This is a docstring" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first line of the above code contains: the `class` keyword, the class name (`SalinityManager`), and a `:`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The second line is a special text, called `docstring`, that provides a brief description of the class. The description is between `\"\"\" \"\"\"` (i.e., triple quotes)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "A class definition always starts with the `class` keyword. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once defined, we can create an instance of the `SalinityManager` class, by calling it with `()` at the end:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sal_mng = SalinityManager()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "A **class** is like a **factory** for creating new instances of a given type." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "**Class instances** are commonly called **objects**." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "type(sal_mng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Because the `SalinityManager` class is defined in this \"main\" notebook, the full name of the type is `__main__.SalinityManager`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "At the moment, this new defined class is not that exciting. We will soon start to populate it with a number of useful **methods** and **attributes**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "The attributes are used to maintain the state of each class instance. The methods may modify the attributes and thus its state." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "The **methods** definition **always** has `self` as first parameter. The `self` is absent in the generic **functions** that we have seen in the [Write Your Own Functions notebook](005_Write_Your_Own_Functions.ipynb)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Class Initialization and Attributes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "The **class initialization** happens within a special method called `__init__(self)`. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you don't provide a `__init__(self)` method (like in the above code), Python will create an implicit one for you." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the `__init__(self)` method, you should declare all the **class attributes**. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "A **class attribute** is a variable that will be present in each object instantiated from a given class." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class SalinityManager:\n", - " \"\"\"A file manager for salinity\"\"\"\n", - " \n", - " def __init__(self):\n", - " self.sal_values = list()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the above code, we declared that the class has an attribute named `sal_values` and that it will be initialized as an empty list." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can access the class attributes by using the `.` operator:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sal_mng = SalinityManager()\n", - "print(sal_mng.sal_values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialization Parameters" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It is often the case that you want to pass some parameters to the class constructor. Those parameters are the ones that you define in the `__init__()` method:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class SalinityManager:\n", - " \"\"\"A file manager for salinity\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.sal_values = list()\n", - " self.sal_path = data_path\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the above `__init__(self, data_path)`, the second parameter (`data_path`) becomes a mandatory parameter to be passed to the class constructor. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For being able to pass a valid `data_path` parameter, we will use an helper function based on the [previous notebook](005_Write_Your_Own_Functions.ipynb): " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - " \n", - "def get_data_paths():\n", - " data_paths = list()\n", - " cur_folder = os.path.abspath(os.path.curdir)\n", - " data_folder = os.path.join(cur_folder, \"data\")\n", - " data_filenames = os.listdir(data_folder)\n", - " \n", - " for data_filename in data_filenames:\n", - " data_path = os.path.join(data_folder, data_filename)\n", - " data_paths.append(data_path)\n", - " \n", - " data_paths.sort() # sort in alphabetical order\n", - " \n", - " return data_paths\n", - "\n", - "retrieved_paths = get_data_paths()\n", - "input_path = retrieved_paths[1]\n", - "print(\"The salinity file path is: \" + input_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we instantiate the class passing the salinity file path as parameter:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sal_mng = SalinityManager(data_path=input_path)\n", - "print(sal_mng.sal_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But what happens if we don't pass a value for the `data_path` parameter?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sal_mng = SalinityManager()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Read the above error message. It should be clear what Python is complaining about!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "***" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The String Representation Method" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another special method that may be explicitly added to a class is `__str__(self)`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "The `__str__(self)` method is called each time that you pass an object to the `print()` function." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you don't explicitly write it, Python will provide a default implementation:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(sal_mng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As you can see after executing the above **Code** cell, the default solution is to simply provide the name and the [memory address](https://en.wikipedia.org/wiki/Memory_address) of the object. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the next code, we will write a `__str__(self)` that returns a `str` with some meaningful information about the status of the object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class SalinityManager:\n", - " \"\"\"A file manager for salinity\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.sal_values = list()\n", - " self.sal_path = data_path\n", - " \n", - " def __str__(self):\n", - " sal_path_txt = \"path: \" + self.sal_path + \", \"\n", - " sal_values_txt = \"nr_values: \" + str(len(self.sal_values))\n", - " txt = \"SalinityManager[\" + sal_path_txt + sal_values_txt + \"]\"\n", - " return txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "After having execute the above code, the `print()` function of an object of this class will display what return by our custom `__str__(self)` method:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sal_mng = SalinityManager(data_path=input_path)\n", - "print(sal_mng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "There are not fixed rules of what to return as `str`. The only requirement is to be a **nicely printable representation** of an object." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "***" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "solution2": "hidden", - "solution2_first": true - }, - "source": [ - "\n", - "\n", - "Write a class for a `TemperatureManager` with functionalities similar to the above `SalinityManager`. Then, add the code to demonstrate its functionalities." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "solution2": "hidden" - }, - "outputs": [], - "source": [ - "class TemperatureManager:\n", - " \"\"\"A file manager for temperature\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.temp_values = list()\n", - " self.temp_path = data_path\n", - " \n", - " def __str__(self):\n", - " temp_path_txt = \"path: \" + self.temp_path + \", \"\n", - " temp_values_txt = \"nr_values: \" + str(len(self.temp_values))\n", - " txt = \"TemperatureManager[\" + temp_path_txt + temp_values_txt + \"]\"\n", - " return txt\n", - " \n", - "input_path = retrieved_paths[2]\n", - "temp_mng = TemperatureManager(data_path=input_path)\n", - "print(temp_mng)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "***" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## Useful References" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* [The official Python 3.6 documentation](https://docs.python.org/3.6/index.html)\n", - " * [Classes](https://docs.python.org/3.6/tutorial/classes.html)\n", - " * [String Representation Method](https://docs.python.org/3.6/reference/datamodel.html?highlight=repr#object.__str__)\n", - "* [Memory address](https://en.wikipedia.org/wiki/Memory_address)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "*For issues or suggestions related to this notebook, write to: epom@ccom.unh.edu*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "| [Contents](index.ipynb) | [More About Classes >](SUP_More_About_Classes.ipynb)" - ] - } - ], - "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.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/SUP_More_About_Classes.ipynb b/SUP_More_About_Classes.ipynb deleted file mode 100644 index ff47e44..0000000 --- a/SUP_More_About_Classes.ipynb +++ /dev/null @@ -1,458 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"ePOM\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"ePOM\"\n", - "# More About Classes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A Python class has all the standard features required for [object-oriented programming](https://en.wikipedia.org/wiki/Object-oriented_programming)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "These standard features are:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* The presence of a [class inheritance mechanism](https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)). (Multiple base classes are allowed.)\n", - "* The property that a derived class can [override any methods](https://en.wikipedia.org/wiki/Method_overriding) of its base class. \n", - "* The possibility for a method to call the method of a base class with the same name. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Digging into these features is quite outside of the scope of this collection of notebooks. Thus, at the end of this notebook, you will know just a subset of what you can do with classes in Python. \n", - "\n", - "However, that subset should be a good base for you in case that you decide to continue the learning on your own." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The Class Interface" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we have started to see in the [past notebook](008_First_Steps_of_a_Class.ipynb), objects contain data stored through the **class attributes**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The values in these attributes characterize the **class state**. Although you can directly modifies the attributes (and, thus, the class state), the proper way to proceed is to define the so-called **class interface**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "The **class interface** is represented by the set of the available methods for a class." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What is the advantage of designing and maintaining a **class interface**? \n", - "\n", - "You can change the internal implementation (e.g., some attributes) without having to change the interface. This means that other parts of your program do **not** have to change to accommodate those changes." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Adding a `read(self)` Method" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this first example of interface method, we will add a `read(self)`. \n", - "\n", - "This method performs similar operations to what was described in the [Read and Write Text Files notebook](007_Read_and_Write_Text_Files), but using the internal class attributes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "class SalinityManager:\n", - " \"\"\"A file manager for salinity\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.sal_values = list()\n", - " self.sal_path = data_path\n", - " \n", - " def __str__(self):\n", - " sal_path_txt = \"path: \" + self.sal_path + \", \"\n", - " sal_values_txt = \"nr_values: \" + str(len(self.sal_values))\n", - " txt = \"SalinityManager[\" + sal_path_txt + sal_values_txt + \"]\"\n", - " return txt\n", - " \n", - " def read(self): # NEW METHOD!\n", - " # check whether the passed file does not exist\n", - " if not os.path.exists(self.sal_path):\n", - " raise RuntimeError(\"Unable to locate \" + self.sal_path)\n", - " \n", - " # read the file content\n", - " sal_file = open(self.sal_path)\n", - " sal_content = sal_file.read()\n", - " sal_file.close()\n", - " \n", - " # convert to float and append to the internal list of values\n", - " sal_lines = sal_content.splitlines() # split the string retrieved from the file by new line\n", - " for sal_line in sal_lines:\n", - " self.sal_values.append(float(sal_line)) # convert the string in each line to float, then append to the list\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "After executing the previous **Code** cell, we can test whether the new `read(self)` method is working:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_data_paths():\n", - " data_paths = list()\n", - " cur_folder = os.path.abspath(os.path.curdir)\n", - " data_folder = os.path.join(cur_folder, 'data')\n", - " data_filenames = os.listdir(data_folder)\n", - " \n", - " for data_filename in data_filenames:\n", - " data_path = os.path.join(data_folder, data_filename)\n", - " data_paths.append(data_path)\n", - " \n", - " data_paths.sort() # sort in alphabetical order\n", - " \n", - " return data_paths\n", - "\n", - "retrieved_paths = get_data_paths()\n", - "input_path = retrieved_paths[1]\n", - "\n", - "sal_mng = SalinityManager(data_path=input_path)\n", - "sal_mng.read()\n", - "print(sal_mng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As you can see from reading the `print()` output, the resulting object has 20 salinity values. \n", - "\n", - "If you want to see those value, you can use the `.` operator to access the `sal_values` attribute." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(sal_mng.sal_values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "***" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Adding a `write(self, output_path)` Method" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Following the parallel with the [Read and Write Text Files notebook](007_Read_and_Write_Text_Files), we will now add a method to write the salinity data into an output file:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "class SalinityManager:\n", - " \"\"\"A file manager for salinity\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.sal_values = list()\n", - " self.sal_path = data_path\n", - " \n", - " def __str__(self):\n", - " sal_path_txt = \"path: \" + self.sal_path + \", \"\n", - " sal_values_txt = \"nr_values: \" + str(len(self.sal_values))\n", - " txt = \"SalinityManager[\" + sal_path_txt + sal_values_txt + \"]\"\n", - " return txt\n", - " \n", - " def read(self):\n", - " # check whether the passed file does not exist\n", - " if not os.path.exists(self.sal_path):\n", - " raise RuntimeError(\"Unable to locate \" + self.sal_path)\n", - " \n", - " # read the file content\n", - " sal_file = open(self.sal_path)\n", - " sal_content = sal_file.read()\n", - " sal_file.close()\n", - " \n", - " # convert to float and append to the internal list of values\n", - " sal_lines = sal_content.splitlines() # split the string retrieved from the file by new line\n", - " for sal_line in sal_lines:\n", - " self.sal_values.append(float(sal_line)) # convert the string in each line to float, then append to the list\n", - " \n", - " def write(self, output_path): # NEW METHOD!\n", - " output_file = open(output_path, mode=\"w\")\n", - " \n", - " for value in self.sal_values:\n", - " line_content = str(value) + \"\\n\" # the \"\\n\" is the character for the new line\n", - " output_file.write(line_content)\n", - " \n", - " output_file.close()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before calling the new `write(self, output_path)` method, we need to set the output path:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_output_folder():\n", - " cur_folder = os.path.abspath(os.path.curdir)\n", - " output_folder = os.path.join(cur_folder, \"output\")\n", - " if os.path.exists(output_folder):\n", - " return output_folder\n", - " else: # in case that the output folder does not exists, we raise a meaningful error\n", - " raise RuntimeError(\"Unable to locate the output folder: \" + output_folder)\n", - "\n", - "output_folder = get_output_folder()\n", - "output_sal_path = os.path.join(output_folder, \"output_salinity.txt\")\n", - "print(\"The output file path is: \" + output_sal_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With the retrieved `output_sal_path`, we can now call the method to write the salinity values to the disk:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sal_mng = SalinityManager(data_path=input_path)\n", - "sal_mng.read()\n", - "sal_mng.write(output_path=output_sal_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "solution2": "hidden", - "solution2_first": true - }, - "source": [ - "\n", - "\n", - "Write a class that reads and writes the provided temperature file (`input_path`). Then, demonstrate how to use the class (i.e., by reading the temperature values and then writing them to disk). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "solution2": "hidden" - }, - "outputs": [], - "source": [ - "class TemperatureManager:\n", - " \"\"\"A file manager for temperature\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.temp_values = list()\n", - " self.temp_path = data_path\n", - " \n", - " def __str__(self):\n", - " temp_path_txt = \"path: \" + self.temp_path + \", \"\n", - " temp_values_txt = \"nr_values: \" + str(len(self.temp_values))\n", - " txt = \"TemperatureManager[\" + temp_path_txt + temp_values_txt + \"]\"\n", - " return txt\n", - " \n", - " def read(self):\n", - " # check whether the passed file does not exist\n", - " if not os.path.exists(self.temp_path):\n", - " raise RuntimeError(\"Unable to locate \" + self.temp_path)\n", - " \n", - " # read the file content\n", - " temp_file = open(self.temp_path)\n", - " temp_content = temp_file.read()\n", - " temp_file.close()\n", - " \n", - " # convert to float and append to the internal list of values\n", - " temp_lines = temp_content.splitlines() # split the string retrieved from the file by new line\n", - " for temp_line in temp_lines:\n", - " self.temp_values.append(float(temp_line)) # convert the string in each line to float, then append to the list\n", - " \n", - " def write(self, output_path):\n", - " output_file = open(output_path, mode=\"w\")\n", - " \n", - " for value in self.temp_values:\n", - " line_content = str(value) + \"\\n\" # the \"\\n\" is the character for the new line\n", - " output_file.write(line_content)\n", - " \n", - " output_file.close() \n", - " \n", - "input_path = retrieved_paths[2]\n", - "print(\"The input file path is: \" + input_path) # this display the temperature text file to use as input\n", - "temp_mng = TemperatureManager(data_path=input_path)\n", - "temp_mng.read()\n", - "print(temp_mng)\n", - "\n", - "output_temp_path = os.path.join(output_folder, \"output_temperature.txt\")\n", - "print(\"The output file path is: \" + output_temp_path)\n", - "temp_mng.write(output_path=output_temp_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "input_path = retrieved_paths[2]\n", - "print(\"The input file path is: \" + input_path) # this display the temperature text file to use as input" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "***" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## Useful References" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* [The official Python 3.6 documentation](https://docs.python.org/3.6/index.html)\n", - " * [Classes](https://docs.python.org/3.6/tutorial/classes.html)\n", - "* [Object-oriented Programming](https://en.wikipedia.org/wiki/Object-oriented_programming)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "*For issues or suggestions related to this notebook, write to: epom@ccom.unh.edu*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "[< First Steps of a Class](SUP_First_Steps_of_a_Class.ipynb) | [Contents](index.ipynb) | [Summing-Up with Classes >](SUP_Summing-Up_with_Classes.ipynb)" - ] - } - ], - "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.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/SUP_Summing-Up_With_Classes.ipynb b/SUP_Summing-Up_With_Classes.ipynb deleted file mode 100644 index 94e7aa7..0000000 --- a/SUP_Summing-Up_With_Classes.ipynb +++ /dev/null @@ -1,332 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"ePOM\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"ePOM\"\n", - "# Summing-Up with Classes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the last notebook about classes. We will not introduce new big concepts, but we will apply what has been discussed in the past notebooks." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will do it by creating a class to manage the reading and the writing for a data format more complex that the ones that we met up to now." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the text content of the `ctd.txt` file in the `data` folder:\n", - "\n", - "![ctd_txt](images/010_000_ctd_txt.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As you can see in the above image, the first four rows contain some metadata information about when and where the data were collected." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The rows starting from the fifth line has a structure of four columns, with measures of depth, sound speed, temperature, and salinity." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The collection of multiple oceanographic measures is common for a [CTD instrument](https://en.wikipedia.org/wiki/CTD_(instrument)). " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initial Class Creation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As done in the [First Steps of a Class notebook](008_First_Steps_of_a_Class.ipynb), we will first create a class with just two special methods: `init(self)` and `print(self)`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "class CTDManager:\n", - " \"\"\"A file manager for CTD data\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.depth_values = list()\n", - " self.temp_values = list()\n", - " self.sal_values = list()\n", - " self.ss_values = list()\n", - " self.metadata = dict()\n", - " self.ctd_path = data_path\n", - " \n", - " def __str__(self):\n", - " ctd_path_txt = \"path: \" + self.ctd_path + \", \"\n", - " ctd_values_txt = \"nr_values: \" + str(len(self.depth_values))\n", - " txt = \"CTDManager[\" + ctd_path_txt + ctd_values_txt + \", \" + str(self.metadata) + \"]\"\n", - " return txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above class is richer of attributes than the previous ones that we have created. In fact, we need to accommodate the metadata and four columns representing different types of measures. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will retrieve the full path to the `ctd.txt` file, then we will pass it to the just created class:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_data_paths():\n", - " data_paths = list()\n", - " cur_folder = os.path.abspath(os.path.curdir)\n", - " data_folder = os.path.join(cur_folder, \"data\")\n", - " data_filenames = os.listdir(data_folder)\n", - " \n", - " for data_filename in data_filenames:\n", - " data_path = os.path.join(data_folder, data_filename)\n", - " data_paths.append(data_path)\n", - " \n", - " data_paths.sort() # sort in alphabetical order\n", - " \n", - " return data_paths\n", - "\n", - "retrieved_paths = get_data_paths()\n", - "input_path = retrieved_paths[0]\n", - "print(\"input path: \" + input_path)\n", - "\n", - "ctd_mng = CTDManager(data_path=input_path)\n", - "print(ctd_mng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Reading Data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similarly to the `SalinityManager`, the `CTDManager` is now extended by adding a methods to its interface for reading data:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class CTDManager:\n", - " \"\"\"A file manager for CTD data\"\"\"\n", - " \n", - " def __init__(self, data_path):\n", - " self.depth_values = list()\n", - " self.temp_values = list()\n", - " self.sal_values = list()\n", - " self.ss_values = list()\n", - " self.metadata = dict()\n", - " self.ctd_path = data_path\n", - " \n", - " def __str__(self):\n", - " ctd_path_txt = \"path: \" + self.ctd_path + \", \"\n", - " ctd_values_txt = \"nr_values: \" + str(len(self.depth_values))\n", - " txt = \"CTDManager[\" + ctd_path_txt + ctd_values_txt + ', ' + str(self.metadata) + \"]\"\n", - " return txt\n", - " \n", - " def read(self): # NEW METHOD!\n", - " # check whether the passed file does not exist\n", - " if not os.path.exists(self.ctd_path):\n", - " raise RuntimeError(\"Unable to locate \" + self.ctd_path)\n", - " \n", - " # read the file content\n", - " ctd_file = open(self.ctd_path)\n", - " ctd_content = ctd_file.read()\n", - " ctd_file.close()\n", - " \n", - " ctd_lines = ctd_content.splitlines()\n", - " count = 0 # to count the number of read rows\n", - " for ctd_line in ctd_lines:\n", - " \n", - " if count < 4: # measures \n", - " meta_pair = ctd_line.split(\":\"\")\n", - " self.metadata[meta_pair[0]] = meta_pair[1]\n", - " \n", - " else: # measures\n", - " measures = ctd_line.split()\n", - " self.depth_values.append(float(measures[0]))\n", - " self.temp_values.append(float(measures[1]))\n", - " self.sal_values.append(float(measures[2]))\n", - " self.ss_values.append(float(measures[3]))\n", - " \n", - " count += 1 # it is equal to write: count = count + 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the above code we have used the [`str.split()`](https://docs.python.org/3.6/library/stdtypes.html?#str.split) method. This method returns a list of the words in the string, using the passed delimiter string (e.g., `\":\"`). \n", - "\n", - "In case that a parameter is specified (as we did for the measures section of the code), the following splitting algorithm is applied: *\"runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace.\"*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before calling the `write(self, output_path)` method, we need to set the output path:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_output_folder():\n", - " cur_folder = os.path.abspath(os.path.curdir)\n", - " output_folder = os.path.join(cur_folder, \"output\")\n", - " if os.path.exists(output_folder):\n", - " return output_folder\n", - " else: # in case that the output folder does not exists, we raise a meaningful error\n", - " raise RuntimeError(\"Unable to locate the output folder: \" + output_folder)\n", - "\n", - "output_folder = get_output_folder()\n", - "output_ctd_path = os.path.join(output_folder, \"output_ctd.txt\")\n", - "print(\"The output file path is: \" + output_ctd_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With the retrieved `output_ctd_path`, we can now call the method to write the CTD values to the disk:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ctd_mng = CTDManager(data_path=input_path)\n", - "ctd_mng.read()\n", - "print(ctd_mng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It works! We have been able to read a complex format in just a few lines of code." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "***" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## Useful References" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* [The official Python 3.6 documentation](https://docs.python.org/3.6/index.html)\n", - "* [CTD instrument](https://en.wikipedia.org/wiki/CTD_(instrument))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "*For issues or suggestions related to this notebook, write to: epom@ccom.unh.edu*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "[< More About Classes](SUP_More_About_Classes.ipynb) | [Contents](index.ipynb) |" - ] - } - ], - "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.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/index.ipynb b/index.ipynb index 9f07366..0bc975c 100644 --- a/index.ipynb +++ b/index.ipynb @@ -52,10 +52,7 @@ "source": [ "| Notebook Name | Topics |\n", "| --- | --- |\n", - "| [Python is Dynamically and Strongly Typed](SUP_Python_is_Dynamically_and_Strongly_Typed.ipynb) | Statically vs. Dynamically Typing. Strongly vs. Weakly Typing. |\n", - "| [First Steps of a Class](SUP_First_Steps_of_a_Class.ipynb) | `class`, `__init__`, `self`, class variables |\n", - "| [More About Classes](SUP_More_About_Classes.ipynb) | `class` interface. |\n", - "| [Summing-Up with Classes](SUP_Summing-Up_with_Classes.ipynb) | Review. |" + "| [Python is Dynamically and Strongly Typed](SUP_Python_is_Dynamically_and_Strongly_Typed.ipynb) | Statically vs. Dynamically Typing. Strongly vs. Weakly Typing. |" ] }, { @@ -120,7 +117,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "1.0.0" + "1.1.0" ] }, { From 86c4abf229e907276a2cbe0c81e5c9437cffbbb8 Mon Sep 17 00:00:00 2001 From: giumas Date: Thu, 9 May 2019 13:03:36 -0400 Subject: [PATCH 06/12] minor changes for Piazza.com support --- 000_Welcome_on_Board.ipynb | 19 ++++++++++++------ 001_Variables_and_Types.ipynb | 2 +- 002_Lists_of_Variables.ipynb | 2 +- 003_Conditional_Execution.ipynb | 2 +- 004_Loops.ipynb | 2 +- 005_Write_Your_Own_Functions.ipynb | 2 +- 006_Read_and_Write_Text_Files.ipynb | 2 +- 007_Dictionaries_and_Metadata.ipynb | 2 +- 008_A_Class_as_a_Data_Container.ipynb | 2 +- 009_Summing-Up.ipynb | 2 +- ...on_is_Dynamically_and_Strongly_Typed.ipynb | 2 +- images/000_200_piazza_com.png | Bin 95862 -> 59377 bytes index.ipynb | 2 +- 13 files changed, 24 insertions(+), 17 deletions(-) diff --git a/000_Welcome_on_Board.ipynb b/000_Welcome_on_Board.ipynb index d089b43..445b996 100644 --- a/000_Welcome_on_Board.ipynb +++ b/000_Welcome_on_Board.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Welcome on Board!" ] }, @@ -676,14 +676,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "These notebooks have a virtual gathering place on [Piazza.com](https://piazza.com/e-learning_python_for_ocean_mapping/summer2019/om000/home) where you can ask (but also answer!) questions to instructors and fellow students." + "These notebooks have a virtual gathering place on [Piazza.com](https://piazza.com/class/js5dnu0q39n6qe) where you can ask (but also answer!) questions to instructors and fellow students." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\"Piazza.com\\\"" + "\"Piazza.com\\\"" ] }, { @@ -692,14 +692,21 @@ "source": [ "\n", "\n", - "A red megaphone at the top-right corner of each notebook provides a link to [Piazza.com](https://piazza.com/e-learning_python_for_ocean_mapping/summer2019/om000/home). " + "A red megaphone at the top-right corner of each notebook provides a link to [Piazza.com](https://piazza.com/class/js5dnu0q39n6qe). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "If you click on this [Piazza.com](https://piazza.com/e-learning_python_for_ocean_mapping/summer2019/om000/home) link, you can register yourself as a student to access the virtual gathering place.\n", + "You can learn more about Piazza.com by watching [this video](https://www.youtube.com/watch?v=2jLSiN8E18w)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you click on this [Piazza.com](https://piazza.com/class/js5dnu0q39n6qe) link, you can register yourself as a student to access the virtual gathering place.\n", "\n", "Once registered, what about introducing yourself to the community?" ] @@ -713,7 +720,7 @@ "source": [ "\n", "\n", - "Add a note containing your self-introduction in the \"community\" folder on [Piazza.com](https://piazza.com/e-learning_python_for_ocean_mapping/summer2019/om000/home). The following image shows how to do it in eight steps. Feel free to customize the text in the note as you prefer!\n", + "Add a note containing your self-introduction in the \"community\" folder on [Piazza.com](https://piazza.com/class/js5dnu0q39n6qe). The following image shows how to do it in eight steps. Feel free to customize the text in the note as you prefer!\n", "

\n", "![Seven steps for a self-introduction note](images/000_250_eight_steps.png)" ] diff --git a/001_Variables_and_Types.ipynb b/001_Variables_and_Types.ipynb index e3883a8..33ffe84 100644 --- a/001_Variables_and_Types.ipynb +++ b/001_Variables_and_Types.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Variables and Types" ] }, diff --git a/002_Lists_of_Variables.ipynb b/002_Lists_of_Variables.ipynb index 88d0b6b..c8044ff 100644 --- a/002_Lists_of_Variables.ipynb +++ b/002_Lists_of_Variables.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Lists of Variables" ] }, diff --git a/003_Conditional_Execution.ipynb b/003_Conditional_Execution.ipynb index 8acdee1..9a28bdf 100644 --- a/003_Conditional_Execution.ipynb +++ b/003_Conditional_Execution.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Conditional Execution" ] }, diff --git a/004_Loops.ipynb b/004_Loops.ipynb index e60df06..bde728a 100644 --- a/004_Loops.ipynb +++ b/004_Loops.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Loops" ] }, diff --git a/005_Write_Your_Own_Functions.ipynb b/005_Write_Your_Own_Functions.ipynb index e19951d..4f16532 100644 --- a/005_Write_Your_Own_Functions.ipynb +++ b/005_Write_Your_Own_Functions.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Functions" ] }, diff --git a/006_Read_and_Write_Text_Files.ipynb b/006_Read_and_Write_Text_Files.ipynb index e63df2a..50704a8 100644 --- a/006_Read_and_Write_Text_Files.ipynb +++ b/006_Read_and_Write_Text_Files.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Read and Write Text Files" ] }, diff --git a/007_Dictionaries_and_Metadata.ipynb b/007_Dictionaries_and_Metadata.ipynb index 5dbed65..53c4045 100644 --- a/007_Dictionaries_and_Metadata.ipynb +++ b/007_Dictionaries_and_Metadata.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Dictionaries" ] }, diff --git a/008_A_Class_as_a_Data_Container.ipynb b/008_A_Class_as_a_Data_Container.ipynb index ceed8af..b32e0d0 100644 --- a/008_A_Class_as_a_Data_Container.ipynb +++ b/008_A_Class_as_a_Data_Container.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# A Class as a Data Container" ] }, diff --git a/009_Summing-Up.ipynb b/009_Summing-Up.ipynb index 5c42c29..94ae105 100644 --- a/009_Summing-Up.ipynb +++ b/009_Summing-Up.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Summing-Up" ] }, diff --git a/SUP_Python_is_Dynamically_and_Strongly_Typed.ipynb b/SUP_Python_is_Dynamically_and_Strongly_Typed.ipynb index b30c1fd..efeb8c1 100644 --- a/SUP_Python_is_Dynamically_and_Strongly_Typed.ipynb +++ b/SUP_Python_is_Dynamically_and_Strongly_Typed.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Python is Dynamically and Strongly Typed" ] }, diff --git a/images/000_200_piazza_com.png b/images/000_200_piazza_com.png index 4e0ed6191706c8e757173c6c18467f1a77badde6..12a0d4db28551825f3e77a3dda8e3fdaa3e380fb 100644 GIT binary patch literal 59377 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 J<(m(F^$);mx#j=> literal 95862 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 diff --git a/index.ipynb b/index.ipynb index 0bc975c..f1e7b4f 100644 --- a/index.ipynb +++ b/index.ipynb @@ -117,7 +117,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "1.1.0" + "1.1.1" ] }, { From f92dcdb7b30b67ee33044e7e78e3df6fa87cdef4 Mon Sep 17 00:00:00 2001 From: giumas Date: Thu, 9 May 2019 13:06:11 -0400 Subject: [PATCH 07/12] minor fix --- empty.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empty.ipynb b/empty.ipynb index ba7efe1..4c1c4e5 100644 --- a/empty.ipynb +++ b/empty.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"ePOM\"\n", + "\"ePOM\"\n", "# Title" ] }, From 0d3f3986b42c0c7ffafea69d8fb189a221da09d7 Mon Sep 17 00:00:00 2001 From: giumas Date: Sat, 25 May 2019 12:19:37 -0400 Subject: [PATCH 08/12] updated index --- index.ipynb | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/index.ipynb b/index.ipynb index f1e7b4f..67da2a0 100644 --- a/index.ipynb +++ b/index.ipynb @@ -74,14 +74,9 @@ "\n", "* [Semme Dijkstra](mailto:semmed@ccom.unh.edu>)\n", "\n", - "* [Jordan Chadwick](mailto:jordan.chadwick@gmail.com>)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Code and Text License" + "* [Jordan Chadwick](mailto:jordan.chadwick@gmail.com>)\n", + "\n", + "* [Tyanne Faulkes](mailto:tyanne.faulkes@noaa.gov>)" ] }, { @@ -96,28 +91,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Code Repository" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "GitHub url: [https://github.com/hydroffice/python_basics](https://github.com/hydroffice/python_basics)" + "Version: 1.1.2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Version" + "GitHub repository: [https://github.com/hydroffice/python_basics](https://github.com/hydroffice/python_basics)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "1.1.1" + "Documentation: [https://www.hydroffice.org/manuals/epom/index.html](https://www.hydroffice.org/manuals/epom/index.html)" ] }, { From 120df112babc3df659609511831364d35307a436 Mon Sep 17 00:00:00 2001 From: giumas Date: Mon, 5 Aug 2019 14:38:24 -0400 Subject: [PATCH 09/12] minor fix --- 002_Lists_of_Variables.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/002_Lists_of_Variables.ipynb b/002_Lists_of_Variables.ipynb index c8044ff..30627ed 100644 --- a/002_Lists_of_Variables.ipynb +++ b/002_Lists_of_Variables.ipynb @@ -737,7 +737,7 @@ "outputs": [], "source": [ "cetaceans_list = [\"Bowhead whale\", \"North Atlantic right whale\", \"North Pacific right whale\", \"Southern right whale\"]\n", - "cetaceans_list.remove(\"North Atlantic right whale\")\n", + "cetaceans_list.remove(\"North Pacific right whale\")\n", "nr_or_cetaceans = len(cetaceans_list)\n", "print(nr_or_cetaceans)" ] From 3e2756c84b11e2b2f9312bf8926f16f5d853ae3a Mon Sep 17 00:00:00 2001 From: giumas Date: Mon, 5 Aug 2019 14:40:49 -0400 Subject: [PATCH 10/12] bug fix --- 003_Conditional_Execution.ipynb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/003_Conditional_Execution.ipynb b/003_Conditional_Execution.ipynb index 9a28bdf..504deb9 100644 --- a/003_Conditional_Execution.ipynb +++ b/003_Conditional_Execution.ipynb @@ -689,14 +689,14 @@ "outputs": [], "source": [ "cur_strength = 5.5 # m/s\n", - "cur_type = \"unknown\"\n", + "cur_type = \"Unknown\"\n", "\n", "if cur_strength < 1.0:\n", - " cur_type = \"weak\"\n", + " cur_type = \"Weak\"\n", "elif cur_strength < 5.0:\n", - " cur_type = \"moderate\"\n", + " cur_type = \"Moderate\"\n", "else: # any current >= 5.0\n", - " cur_type = \"strong\"\n", + " cur_type = \"Strong\"\n", " \n", "print(cur_type)" ] @@ -708,7 +708,7 @@ "outputs": [], "source": [ "cur_strength = 5.5 # m/s\n", - "cur_type = \"unknown\"" + "cur_type = \"Unknown\"" ] }, { From 63e092755c4c001d493d74be4ed06ec73e61b625 Mon Sep 17 00:00:00 2001 From: giumas Date: Fri, 9 Aug 2019 12:28:57 -0400 Subject: [PATCH 11/12] minor fix --- 004_Loops.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004_Loops.ipynb b/004_Loops.ipynb index bde728a..2785e43 100644 --- a/004_Loops.ipynb +++ b/004_Loops.ipynb @@ -303,7 +303,7 @@ " if (ss_value < 1400.0) or (ss_value > 1600.0):\n", " continue\n", " \n", - " print(\"Sound speed: \" + str(ss_value) + \" m/sec.\")" + " print(\"Sound speed: \" + str(ss_value) + \" m/s.\")" ] }, { From 69be12d16bbaf567b67b7dc805b27a6e56b4dc10 Mon Sep 17 00:00:00 2001 From: giumas Date: Sat, 17 Aug 2019 15:21:54 -0400 Subject: [PATCH 12/12] fixed broken link to Ocean Data Science notebooks --- 008_A_Class_as_a_Data_Container.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/008_A_Class_as_a_Data_Container.ipynb b/008_A_Class_as_a_Data_Container.ipynb index b32e0d0..24eb6b1 100644 --- a/008_A_Class_as_a_Data_Container.ipynb +++ b/008_A_Class_as_a_Data_Container.ipynb @@ -349,7 +349,7 @@ "source": [ "\n", "\n", - "If you are interested in learning more about classes, you may want to explore the [Foundations of Ocean Data Science](https://www.hydroffice.org/manuals/epom/foundations_of_ocean_data_science.html) notebooks." + "If you are interested in learning more about classes, you may want to explore the [Introduction to Ocean Data Science](https://www.hydroffice.org/manuals/epom/ocean_data_science_quickstart.html) notebooks." ] }, {