2019-09-15 12:20:18 +02:00
# An Introduction to Python and Programming
2019-09-16 10:58:33 +02:00
2020-04-02 15:49:27 +02:00
The purpose of this repository is to serve as an interactive book for a
2019-09-16 10:58:33 +02:00
thorough introductory course on programming in the
2020-04-02 15:49:27 +02:00
**[Python < img height = "12" style = "display: inline-block" src = "static/link_to_py.png" > ](https://www.python.org/)**
language.
2019-09-16 10:58:33 +02:00
The course's **main goal** is to **prepare** the student for **further
studies** in the "field" of **data science** .
2020-04-02 15:49:27 +02:00
The chapters are laid out in [Jupyter notebooks <img height="12" style="display: inline-block" src="static/link_to_jp.png"> ](https://jupyter-notebook.readthedocs.io/en/stable/ )
which are a de-facto standard for exchanging code and analyses among data
2019-09-16 10:58:33 +02:00
science professionals and researchers.
2020-04-02 15:49:27 +02:00
They can be viewed in a web browser either statically on [nbviewer <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/tree/master/ )
or interactively (i.e., you can execute the code) on [mybinder <img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab ):
- *Chapter 0*: Introduction
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/00_intro_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/00_intro_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=YTU8jaG27Xk&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/00_intro_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/00_intro_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/00_intro_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/00_intro_02_exercises.ipynb ))
2020-01-28 10:48:37 +01:00
- **Part A: Expressing Logic**
- *Chapter 1*: Elements of a Program
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/01_elements_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=v0lk1Qfaw8Y&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/01_elements_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/01_elements_02_exercises.ipynb ))
2020-01-28 10:48:37 +01:00
- *Chapter 2*: Functions & Modularization
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/02_functions_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/02_functions_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=j4Xn8QFysmc&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/02_functions_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/02_functions_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/02_functions_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/02_functions_02_exercises.ipynb ))
2020-01-28 10:48:37 +01:00
- *Chapter 3*: Conditionals & Exceptions
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/03_conditionals_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/03_conditionals_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=aDbblINzuGQ&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/03_conditionals_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/03_conditionals_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/03_conditionals_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/03_conditionals_02_exercises.ipynb ))
2020-01-28 10:48:37 +01:00
- *Chapter 4*: Recursion & Looping
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/04_iteration_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/04_iteration_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=jT6hr4vOJks&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/04_iteration_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/04_iteration_01_review.ipynb )
| [exercises 1 <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/04_iteration_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/04_iteration_02_exercises.ipynb )
| [exercises 2 <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/04_iteration_03_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/04_iteration_03_exercises.ipynb ))
2020-01-28 10:48:37 +01:00
- **Part B: Managing Data and Memory**
2020-03-30 02:50:49 +02:00
- *Chapter 5*: Numbers & Bits
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/05_numbers_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/05_numbers_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=nB00WGCnVjg&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/05_numbers_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/05_numbers_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/05_numbers_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/05_numbers_02_exercises.ipynb ))
2020-03-30 02:50:49 +02:00
- *Chapter 6*: Text & Bytes
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/06_text_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/06_text_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=3WTRlgN09sM&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/06_text_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/06_text_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/06_text_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/06_text_02_exercises.ipynb ))
2020-01-28 10:48:37 +01:00
- *Chapter 7*: Sequential Data
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/07_sequences_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/07_sequences_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=nx2sCDoeC3I&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/07_sequences_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/07_sequences_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/07_sequences_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/07_sequences_02_exercises.ipynb ))
2020-03-30 02:50:49 +02:00
- *Chapter 8*: Map, Filter, & Reduce
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/08_mfr_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/08_mfr_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=ePzzq2YBWjY&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/08_mfr_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/08_mfr_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/08_mfr_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/08_mfr_02_exercises.ipynb ))
2020-03-30 02:50:49 +02:00
- *Chapter 9*: Mappings & Sets
2020-04-02 15:49:27 +02:00
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/09_mappings_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/09_mappings_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=vbp0svA35TE&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/09_mappings_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/09_mappings_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/09_mappings_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/09_mappings_02_exercises.ipynb ))
- *Chapter 10*: Classes & Instances
([content < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/10_classes_00_content.ipynb)
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/10_classes_00_content.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/watch?v=ibDT0uOAOTI&list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f )
| [review <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/10_classes_01_review.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/10_classes_01_review.ipynb )
| [exercises <img height="12" style="display: inline-block" src="static/link_to_nb.png"> ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/10_classes_02_exercises.ipynb )
[<img height="12" style="display: inline-block" src="static/link_to_mb.png"> ](https://mybinder.org/v2/gh/webartifex/intro-to-python/master?urlpath=lab/tree/10_classes_02_exercises.ipynb ))
However, it is recommended to **install Python and [Jupyter <img height="12" style="display: inline-block" src="static/link_to_jp.png"> ](https://jupyter.org )
locally** and run the code in the notebooks on one's own machine in the [JupyterLab <img height="12" style="display: inline-block" src="static/link_to_jp.png"> ](https://jupyterlab.readthedocs.io/en/stable/ )
application.
Precise **installation instructions** are either in [Chapter 0 < img height = "12" style = "display: inline-block" src = "static/link_to_nb.png" > ](
https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/00_intro_00_content.ipynb#Installation)
2019-09-16 10:58:33 +02:00
or further below.
2020-03-30 02:50:49 +02:00
2020-04-02 15:49:27 +02:00
### Feedback
Feedback **is highly encouraged** and will be incorporated.
Simply open an issue in the [issues tracker <img height="12" style="display: inline-block" src="static/link_to_gh.png"> ](https://github.com/webartifex/intro-to-python/issues )
or initiate a [pull request <img height="12" style="display: inline-block" src="static/link_to_gh.png"> ](https://help.github.com/en/articles/about-pull-requests )
2019-09-16 10:58:33 +02:00
if you are familiar with the concept.
2020-04-02 15:49:27 +02:00
Simple issues that anyone can **help fix** are, for example,
**spelling mistakes** or **broken links** .
If you feel that some topic is missing entirely, you may also mention that.
The materials here are considered a **permanent work-in-progress** .
2019-09-16 10:58:33 +02:00
2020-04-02 15:49:27 +02:00
A "Show HN" post about this course was made on [Hacker News <img height="12" style="display: inline-block" src="static/link_to_hn.png"> ](https://news.ycombinator.com/item?id=22669084 )
2020-03-30 02:50:49 +02:00
and some ideas for improvement were discussed there.
2019-09-16 10:58:33 +02:00
2020-04-02 15:49:27 +02:00
### Videos
Presentations on the chapters are available either via the individual links to
[YouTube <img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com )
above or this [playlist <img height="12" style="display: inline-block" src="static/link_to_yt.png"> ](https://www.youtube.com/playlist?list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f ).
### Prerequisites
2019-09-16 10:58:33 +02:00
To be suitable for *total beginners* , there are *no* formal prerequisites.
It is only expected that the student has:
- a *solid* understanding of the **English language** ,
- knowledge of **basic mathematics** from high school,
- the ability to **think conceptually** and **reason logically** , and
2020-04-02 15:49:27 +02:00
- the willingness to **invest around 90 - 120 hours on this course** .
2019-09-16 10:58:33 +02:00
## Installation
2020-01-28 11:07:14 +01:00
To follow this course, a working installation of **Python 3.7** or higher is
2019-09-16 10:58:33 +02:00
expected.
A popular and beginner friendly way is to install the [Anaconda Distribution](
https://www.anaconda.com/distribution/) that not only ships Python but comes
pre-packaged with a lot of third-party libraries from the so-called
"scientific stack".
Just go to the [download ](https://www.anaconda.com/distribution/#download-section )
2020-01-28 11:07:14 +01:00
section and install the latest version (i.e., *2019-10* with Python 3.7 at the
2019-09-16 10:58:33 +02:00
time of this writing) for your operating system.
2020-04-02 15:49:27 +02:00
Then, among others, you will find an entry "[Anaconda Navigator](https://docs.anaconda.com/anaconda/navigator/)"
in your start menu like below.
2020-01-28 18:23:55 +01:00
Click on it.
2019-09-16 10:58:33 +02:00
2020-01-28 18:23:55 +01:00
< img src = "static/anaconda_start_menu.png" width = "30%" >
2019-09-16 10:58:33 +02:00
2020-01-28 18:23:55 +01:00
A window opens showing you several applications that come with the Anaconda
Distribution.
Now, click on "JupyterLab."
2019-09-16 10:58:33 +02:00
2020-01-28 18:23:55 +01:00
< img src = "static/anaconda_navigator.png" width = "50%" >
2019-09-16 10:58:33 +02:00
2020-01-28 18:23:55 +01:00
A new tab in your web browser opens with the website being "localhost" and some
number (e.g., 8888).
2020-04-02 15:49:27 +02:00
This is the [JupyterLab <img height="12" style="display: inline-block" src="static/link_to_jp.png"> ](https://jupyterlab.readthedocs.io/en/stable/ )
application that is used to display and run the notebooks mentioned above.
2020-01-28 18:23:55 +01:00
On the left, you see the files and folders in your local user folder.
This file browser works like any other.
2020-02-02 18:47:08 +01:00
In the center, you have several options to launch (i.e., "create") new files.
2020-01-28 18:23:55 +01:00
< img src = "static/jupyter_lab.png" width = "50%" >
Next, to download the course's materials as a ZIP file, click on the green
"Clone or download" button on the top right on this website.
Then, unpack the ZIP file into a folder of your choosing, ideally somewhere
within your personal user folder so that the files show up right away in
JupyterLab.
### Alternative Installation (for Instructors)
2019-09-16 10:58:33 +02:00
Python can also be installed in a "pure" way as obtained from its core
development team (i.e., without any third-party packages installed).
2020-01-28 18:23:55 +01:00
However, this may be too "advanced" for a beginner as it involves working
2020-04-02 15:49:27 +02:00
with a [terminal emulator <img height="12" style="display: inline-block" src="static/link_to_wiki.png"> ](https://en.wikipedia.org/wiki/Terminal_emulator ),
2020-01-28 18:23:55 +01:00
which looks like the one in the picture below and is used *without* a mouse by
typing commands into it.
2019-09-16 10:58:33 +02:00
< img src = "static/terminal.png" width = "50%" align = "center" >
2020-01-28 11:07:14 +01:00
Assuming that you already have a working version of Python 3.7 or higher
2020-04-02 15:49:27 +02:00
installed (cf., the official [download page <img height="12" style="display: inline-block" src="static/link_to_py.png"> ](https://www.python.org/downloads/ )),
2019-09-16 10:58:33 +02:00
the following summarizes the commands to be typed into a terminal emulator to
2020-01-28 18:23:55 +01:00
get the course materials up and running on a local machine without the
Anaconda Distribution.
2019-09-16 10:58:33 +02:00
You are then responsible for understanding the concepts behind them.
First, the [git ](https://git-scm.com/ ) command line tool is a more professional
way of "cloning" the course materials as compared to downloading them in a ZIP
file.
- `git clone https://github.com/webartifex/intro-to-python.git`
This creates a new folder *intro-to-python* with all the materials of this
repository in it.
Inside this folder, it is recommended to create a so-called **virtual
2020-04-02 15:49:27 +02:00
environment** with Python's [venv <img height="12" style="display: inline-block" src="static/link_to_py.png"> ](https://docs.python.org/3/library/venv.html )
2019-09-16 10:58:33 +02:00
module.
This must only be done the first time.
A virtual environment is a way of *isolating* the third-party packages
installed by different projects, which is considered a best practice.
- `python -m venv venv`
The second *venv* is the environment's name and by convention often chosen to
be *venv* .
However, it could be another name as well.
From then on, each time you want to resume work, go back into the
*intro-to-python* folder inside your terminal and "activate" the virtual
environment (*venv* is the name chosen before).
- `source venv/bin/activate`
2020-04-02 15:49:27 +02:00
This may change how the terminal's [command prompt <img height="12" style="display: inline-block" src="static/link_to_wiki.png"> ](https://en.wikipedia.org/wiki/Command-line_interface#Command_prompt )
2019-09-16 10:58:33 +02:00
looks.
[poetry ](https://poetry.eustace.io/docs/ ) and [virtualenvwrapper ](https://virtualenvwrapper.readthedocs.io/en/latest/ )
are popular tools to automate the described management of virtual environments.
After activation for the first time, you must install the project's
**dependencies** (= the third-party packages needed to run the code), most
2020-04-02 15:49:27 +02:00
notably [JupyterLab <img height="12" style="display: inline-block" src="static/link_to_jp.png"> ](https://pypi.org/project/jupyterlab/ ) in this project
2020-01-28 18:23:55 +01:00
(the "python -m" is often left out [but should not be ](https://snarky.ca/why-you-should-use-python-m-pip/ );
2019-11-06 11:10:46 +01:00
if you have poetry installed, you may just type `poetry install` instead).
2019-09-16 10:58:33 +02:00
- `python -m pip install -r requirements.txt`
With everything installed, you can now do the equivalent of clicking the
2020-01-28 18:23:55 +01:00
"JupyterLab" entry in the Anaconda Navigator.
2019-09-16 10:58:33 +02:00
2020-01-28 18:23:55 +01:00
- `jupyter lab`
2019-09-16 10:58:33 +02:00
This opens a new tab in your web browser just as above.
2020-02-02 17:24:06 +01:00
#### Interactive Presentation Mode & Live Coding
2020-04-02 15:49:27 +02:00
The *requirements.txt* file also installs the [nbextensions <img height="12" style="display: inline-block" src="static/link_to_gh.png"> ](https://github.com/ipython-contrib/jupyter_contrib_nbextensions )
for Jupyter notebooks, the [black <img height="12" style="display: inline-block" src="static/link_to_gh.png"> ](https://github.com/psf/black )
code formatting tool (incl. the [blackcellmagic <img height="12" style="display: inline-block" src="static/link_to_gh.png"> ](https://github.com/csurfer/blackcellmagic )
Jupyter extension) and the [RISE <img height="12" style="display: inline-block" src="static/link_to_gh.png"> ](https://github.com/damianavila/RISE )
Jupyter extension.
2020-02-02 17:24:06 +01:00
With them, the instructor can easily re-format code in a class session and
execute code in presentation mode.
**Note**: Currently, the RISE extension *only* works with the older
notebook command.
- `jupyter notebook` (so, `jupyter lab` may *not* be used).
After installing the dependencies, the instructor must copy the extensions'
JavaScript and CSS files into Jupyter's search directory.
- `jupyter contrib nbextension install --user`
Now, the instructor can enable/disable the various Jupyter notebook
extensions.
**Note**: The extension "Collapsible Headings" may interfere with the
RISE presentation if hotkeys are enabled.
2019-09-16 10:58:33 +02:00
## About the Author
Alexander Hess is a PhD student at the Chair of Logistics Management at the
[WHU - Otto Beisheim School of Management ](https://www.whu.edu ) where he
conducts research on urban delivery platforms and teaches an introductory
2019-11-20 10:58:54 +01:00
course on Python (cf., [Fall Term 2019 ](https://vlv.whu.edu/campus/all/event.asp?objgguid=0xE57C2715B01B441AAFD3E79AA05CACCF&from=vvz&gguid=0x6A2B0ED5B2B949E69957A2099E7DE2F1&mode=own&tguid=0x3980A9BBC3BF4A638E977F2DC163F44B&lang=en ),
[Spring Term 2020 ](https://vlv.whu.edu/campus/all/event.asp?objgguid=0x3354F4C108FF4E959CDD692A325D9AFE&from=vvz&gguid=0x262E29795DD742CFBDE72B12B69CEFD6&mode=own&lang=en&tguid=0x2E4A7D1FF3C34AD08FF07685461781C9 )).
2019-09-16 10:58:33 +02:00
Connect him on [LinkedIn ](https://www.linkedin.com/in/webartifex ).