Python exercise trainer, inspired by rustlings.
Project description
Pylings
Purpose
Pylings is an interactive Python learning tool heavily inspired by the renowned Rustlings. It provides small, focused exercises to help you learn Python by fixing code snippets and experimenting with them.
Pylings is designed to help beginners and experienced developers alike improve their Python skills through hands-on practice. Each exercise covers core Python concepts such as variables, data structures, loops, and more. This includes reading and responding to compiler and interpreter messages!
Installation
Prerequisites
Steps
-
Install via
pip(preferred) :Windowspy -m pip install pylingsLinux/Unixpip install pylingsor use
gitand install locally:git clone git@github.com:CompEng0001/pylings.git pylings-package cd pylings-package pip install .
Working environment
Editor
General recommendation is VS Code with the python plugin. But any editor that supports python should be enough for working on the exercises.
Will run in GitHub Codespaces
Terminal
While working with Pylings, please use a modern terminal for the best user experience, especially we recommend the Windows Terminal, with Git Bash via VS Code.
The default terminal on Linux and Mac should be sufficient too.
[!IMPORTANT] There are some rendering issues, with Linux based terminals and some terminal multiplexers.
Doing Exercises
The exercises are sorted by topic and can be found in the subdirectory exercises/<topic>.
For every topic, there is an additional README.md file with some resources to get you started on the topic.
We highly recommend that you have a look at them before you start.
Most exercises contain an error that keeps them from compiling, and it's up to you to fix it!
Some exercises contain tests that need to pass for the exercise to be done
Search for TODO to find out what you need to change.
Ask for hints by entering h
Running Pylings
Once installed via pip or git, navigate to a directory of your choice and run:
<py,python3> -m pylings init
or provide the path as an argument:
<py,python3> -m pylings init --path path/to/initialise-pylings
If a directory already exists with the same name you can use:
<py,python3> -m pylings init --force [--path path/to/initialise-pylings]
Then you can launch pylings in the initialised directory
<py,python3> -m pylings
[!TIP] Of course you could always add the following to your
PATH, and you callpylingsdirectly:
Windows
$HOME/AppData/Local/Programs/Python/Python313/Linux
$HOME/.local/bin
Commands/Arguments
Pylings v1.1.0 supports additional developer-friendly commands:
-
update [--path path/to/initialised-pylings]updates the workspace with the current version:-
Useful after upgrading Pylings via
pip install --upgrade pylings -
Defaults to the current working directory (
cwd) -
Adds new exercises and removes obsolete ones from the workspace
-
-
run, starts pylings from a specific exercise:pylings run exercises/01_variables/variables1.py- Triggers welcome message if it's your first time
-
dry-run, executes an exercise non-interactively:pylings dry-run 01_variables/variables1.py- Accepts paths with or without the
exercises/prefix - Use
--source workspace(default) to run from local files - Use
--source packageto run the exercise bundled with the installed Pylings package
-
reset, resets an exercise non-interactively:pylings reset exercises/01_variables/variables1.py
-
sol, executes a solution file non-interactively:pylings solution 01_variables/variables1.py- Accepts paths with or without the
solutions/prefix --source package(default) uses installed Pylings files--source workspaceruns your own solution from the local workspace
-
--debug, enables debug logging for advanced output, log file is workspace.pylings_debug.log -
-v,--version, displays version, license, and repository link -
-h,--help, shows usage info for all commands
List mode
You can open an interactive list of all exercises by pressing l after launching pylings
- See the status of all exercises (done or pending)
s: Continue at selected exercise, allowing you to tempoarily skipping exercises or revisitng a previous oner: Resets the current selected exercise back to its pending state, live!c: Checks all exercises and updates the state, incase you modify outside of pylings.
See the footer of the list for all possibilities.
Themes
As of v1.2.0 you can set a theme. Currently there are two ways, builtin or custom
-
Builtin:
defaultdarkhigh_contrastcatppuccin_mochacatppuccin_macchiatogruvbox_darkonedarksolarized_darknordtender
-
Custom
custom
The following fields are available for customising:
[theme]
name = "default" # default is a builtin, change from list above, or change the values below using "custom"
GREEN = "bold green"
RED = "bold red"
ORANGE = "bold orange"
LIGHT_BLUE = "bold lightblue"
BACKGROUND = "#1e1e2e"
[!NOTE]
- If you have updated to
v1.2.0, you will need to add the above in manually, luckily, thedefaultwill load- Use HEX colours or refer to: https://textual.textualize.io/styles/color/#syntax
- For font styling refer to: https://textual.textualize.io/styles/text_style/
Contributing
See CONTRIBUTING.md 🔗
Contributions are welcome! Feel free to open issues or submit pull requests.
License
This project is licensed under the MIT License.
Author
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pylings-1.2.0.tar.gz.
File metadata
- Download URL: pylings-1.2.0.tar.gz
- Upload date:
- Size: 89.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b37bc99717caa2b1d872b4af87399f5388b008e9ba615161e25ef123688d637
|
|
| MD5 |
d894d1005ddb7e5f37c620faadf17f37
|
|
| BLAKE2b-256 |
03903e25d75eed2008e3622327ba4be79bf8f98001d5e4192d4191acdf5ff975
|
Provenance
The following attestation bundles were made for pylings-1.2.0.tar.gz:
Publisher:
python-publish.yml on CompEng0001/Pylings
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pylings-1.2.0.tar.gz -
Subject digest:
8b37bc99717caa2b1d872b4af87399f5388b008e9ba615161e25ef123688d637 - Sigstore transparency entry: 256299091
- Sigstore integration time:
-
Permalink:
CompEng0001/Pylings@7743c8563ed29b7f5f64b30e1049caad2cf27c17 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/CompEng0001
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@7743c8563ed29b7f5f64b30e1049caad2cf27c17 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pylings-1.2.0-py3-none-any.whl.
File metadata
- Download URL: pylings-1.2.0-py3-none-any.whl
- Upload date:
- Size: 131.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
904c43cbf72c6d866e3768b0b82b8b8b1f06ebd79464f7bc299d3cf75a7f4cbd
|
|
| MD5 |
13bfe778b13764c0e25e4545238cbbb3
|
|
| BLAKE2b-256 |
26f9b77a2041b36a961eb24b1df0923bb9ce5abeb585a6fde881211772980c10
|
Provenance
The following attestation bundles were made for pylings-1.2.0-py3-none-any.whl:
Publisher:
python-publish.yml on CompEng0001/Pylings
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pylings-1.2.0-py3-none-any.whl -
Subject digest:
904c43cbf72c6d866e3768b0b82b8b8b1f06ebd79464f7bc299d3cf75a7f4cbd - Sigstore transparency entry: 256299094
- Sigstore integration time:
-
Permalink:
CompEng0001/Pylings@7743c8563ed29b7f5f64b30e1049caad2cf27c17 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/CompEng0001
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@7743c8563ed29b7f5f64b30e1049caad2cf27c17 -
Trigger Event:
release
-
Statement type: