From 8cb79dc0a50ddb548aa79649ee03fc0864353957 Mon Sep 17 00:00:00 2001 From: Niolon Date: Tue, 19 Aug 2025 09:51:01 +0100 Subject: [PATCH 1/3] Update README --- README.md | 65 +++++++++++++---------------------------- common-tools | 2 +- img/ARC448p.png | Bin 0 -> 36696 bytes notebook_settings.json | 2 +- 4 files changed, 23 insertions(+), 46 deletions(-) create mode 100644 img/ARC448p.png diff --git a/README.md b/README.md index dd63e9e..bc2abcf 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,41 @@ -# Learning to programme with python +![Course logo](img/ARC448p.png) -Welcome to the Course "Learning to programme with python" repository! This repository contains all the materials and resources for the course. +# Course: Learning to programme with python -## Organization - -The repository is organized as follows: - -- `Basic.ipynb`: The course's jupyter notebook with the corresponding materials. - -- `Basic_filled.ipynb`: The course's jupyter notebook with all the material filled in. It is meant for reference purposes for teaching the course and as a fallback if something is missing from the notes students made during the course. - -- `pull_files_from_repo.py`: download script that can be executed to extract this repository into a folder. - -## Getting Started as student -If you want to set up a new conda environment for the course you can use the environment.yml provided in this folder. +Welcome to the Learning to programme with python repository! This repository contains all the materials and resources for the course. -There are three possibilities to get the data: +## Course description -1. You only want to follow along. Just download and copy the Basics.ipynb to your environment +If you've never written a line of code but suspect programming might benefit your research, this course provides a gentle introduction through Python. Designed for complete beginners, we'll cover fundamental programming concepts, ensuring everyone builds solid foundations regardless of technical background. +The course takes a hands-on approach using Jupyter notebooks to explore essential programming elements: basic data types (strings, integers, floats, booleans), variables, operators, and control flow statements including if-statements and loops. You'll learn to write functions, handle user input, read and write files, and work with data structures like lists. +By the end, you'll understand how basic computer programs work, how to structure code effectively, and where to find resources for continued learning. There will be plenty of opportunities to experiment and ask questions throughout. No prior experience required, just curiosity about what programming can do. -2. To get everything (including the filled notebook) - - a. Download the `pull_files_from_repo.py` file and put it into your environment - - b. Execute `python pull_files_from_repo.py` in the folder. - -3. If you have git available you can just clone the repo with: - - `git clone https://github.com/DurhamARC-Training/BasicProgrammingPython.git` +## Organization -## Getting Started for Teaching +The repository is organized as follows: -To get started with teaching the course, follow these steps: +- `Basics.ipynb`: This file contains the course material we will be using during the course -1. Install the requirements including JupyterLab Deck by running the following command: +- `Basics_filled.ipynb`: This file contains the completed course material, the solutions to the exercises and the speaker notes. It is meant for reference purposes for teaching the course and as a fallback if something is missing from the notes students made during teaching. - ``` - conda env create -f environment.yml - ``` -2. Launch JupyterLab by running the following command: +## Accessing the Materials - ``` - conda activate basic_python - jupyter lab - ``` +For this course we are using [JupyterLite](https://jupyterlite.readthedocs.io/en/stable/), which is a tool that allows us to launch [JupyterLab](https://jupyterlab.readthedocs.io/en/latest/) and run our Python code in the web browser through the notebook (.ipynb) files contained in this repository. -3. Use the `Basics.ipynb` for the presentations and exercises to use during the course. If needed use the notebooks use the `Basics_filled.ipynb` as lecture notes +To access and run the course materials, start by: -4. Click on the little card styles JupyterLab-Deck icon for running a notebook as a presentation. +* Navigating to the course materials on our GitHub page: [https://durhamarc-training.github.io/BasicProgrammingPython/](https://durhamarc-training.github.io/BasicProgrammingPython/) -5. It is also possible to convert the Jupyter notebook to PDF (be sure first to run all cells you want to run and save): +* Start by accessing `Basics.ipynb` notebook. - * Call `jupyter nbconvert --to slides --post serve .\Basics.ipynb` - * Go to http://localhost:8000/Basics.slides.html?print-pdf#/ - * Print via Print to PDF function of your browser +You are now ready to start the course! +NOTE: The first time you run your code/load new modules, there may be a small wait while the module(s) are loaded. -## How to contribute +## Contributing If you find any issues or have suggestions for improvement, please feel free to open an issue or submit a pull request. Contributions are welcome! -If you're a co-developer of our training course, please read the workflow we suggest in our [Developer's Guide](development.md). \ No newline at end of file +You can add the files of the `common-tools` github submodule by typing in `git submodule update --init`. Consult the README in the then filled `common-tools` directory for further instructions. +In general you should never edit the content in the `Basics.ipynb` but work on `Basics_filled.ipynb` and have the tool generate the student notebook versions automatically as described in the `common-tools` README. diff --git a/common-tools b/common-tools index 99efee5..560c721 160000 --- a/common-tools +++ b/common-tools @@ -1 +1 @@ -Subproject commit 99efee5dbd3dc89ba01c7ff2d5878939b5db51c7 +Subproject commit 560c721e846cac60d2b67914d78783abf4128e1e diff --git a/img/ARC448p.png b/img/ARC448p.png new file mode 100644 index 0000000000000000000000000000000000000000..60047e9368466168475cc10120c59ba08b09c77e GIT binary patch literal 36696 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 Date: Tue, 19 Aug 2025 09:55:17 +0100 Subject: [PATCH 2/3] Move logo to images folder --- README.md | 2 +- {img => images}/ARC448p.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename {img => images}/ARC448p.png (100%) diff --git a/README.md b/README.md index bc2abcf..0f97214 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Course logo](img/ARC448p.png) +![Course logo](images/ARC448p.png) # Course: Learning to programme with python diff --git a/img/ARC448p.png b/images/ARC448p.png similarity index 100% rename from img/ARC448p.png rename to images/ARC448p.png From 43dc479a61750ee2e2046927caf0642eb2ed7fa3 Mon Sep 17 00:00:00 2001 From: Niolon Date: Tue, 19 Aug 2025 09:55:43 +0100 Subject: [PATCH 3/3] Update deploy.yml --- .github/workflows/deploy.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 92a88c7..fa51377 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,7 +41,6 @@ jobs: - name: Build the JupyterLite site run: | - cp README.md content jupyter lite build --contents content --output-dir dist - name: Upload artifact @@ -64,4 +63,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v4 \ No newline at end of file