{"id":22070957,"url":"https://github.com/jose-zothner-meyer/hangman100","last_synced_at":"2025-03-23T19:14:58.700Z","repository":{"id":251266859,"uuid":"836862567","full_name":"jose-zothner-meyer/hangman100","owner":"jose-zothner-meyer","description":"This is an implementation of the Hangman game, where the computer thinks of a random word and the player/user tries to guess it.","archived":false,"fork":false,"pushed_at":"2024-08-11T21:41:15.000Z","size":4121,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T01:45:47.849Z","etag":null,"topics":["software-engineering"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jose-zothner-meyer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-01T17:59:43.000Z","updated_at":"2024-11-10T22:32:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"06b69410-e152-423a-be17-712e1f6d12be","html_url":"https://github.com/jose-zothner-meyer/hangman100","commit_stats":null,"previous_names":["jose-zothner-meyer/hangman100"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-zothner-meyer%2Fhangman100","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-zothner-meyer%2Fhangman100/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-zothner-meyer%2Fhangman100/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-zothner-meyer%2Fhangman100/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jose-zothner-meyer","download_url":"https://codeload.github.com/jose-zothner-meyer/hangman100/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245153894,"owners_count":20569408,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["software-engineering"],"created_at":"2024-11-30T20:20:13.279Z","updated_at":"2025-03-23T19:14:58.673Z","avatar_url":"https://github.com/jose-zothner-meyer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hangman Game\n#### Under develpment. \u003cbr\u003e Updated: 02/07/2024\n\n## Overview\n\u003cp\u003eHangman is a classic game in which a player thinks of a word and the other player tries to guess that word within X amount of attempts.\u003c/p\u003e\n\n\u003cdiv style=\"display: flex; flex-direction: row;\"\u003e\n    \u003cimg src=\"./images/hangman_lost.png\" alt=\"Hangman lost Image\" style=\"width: 45%; margin-right: 5%;\"\u003e\n    \u003cimg src=\"./images/hangman_won.png\" alt=\"Hangman won Image\" style=\"width: 45%;\"\u003e\n\u003c/div\u003e\n\n\u003cdiv style=\"text-align: right; font-size: small;\"\u003e\n    \u003cp\u003e\u003ci\u003eSource: DALL-E by OpenAI\u003c/i\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cp\u003eThis is an implementation of the Hangman game, where the computer thinks of a random word and the player/user tries to guess it.\u003c/p\u003e\n\n## Credits\nAs an analogy, imagine the english alphabet: I began my coding journey at ‘M,’ skipping the first twelve letters.\n\u003cbr\u003e\nThe knowledge contained in this repository was primarily taught by \u003ca href='https://www.theaicore.com' \u003e AiCore\u003c/a\u003e, and I am immensely grateful to them for their teaching and support in my continous professional development.\n\n## Table of contents\n1. [Overview](#overview)\n2. [Milestones](#milestones)\n    - [2.1: Set up the environment](#21-set-up-the-environment)\n      - [2.1.1 OS Terminal](#211-os-terminal)\n      - [2.1.2 Conda Virtual Environment](#212-conda-virtual-environment)\n      - [2.1.3 Git](#213-git)\n      - [2.1.4 GitHub](#214-github)\n    - [2.2: Create the variables for the game](#22-create-the-variable-for-the-game)\n      - [2.2.1 Define the list of possible words](#221-define-the-list-of-possible-words)\n      - [2.2.2 Choose a random word from the list](#222-choose-a-random-word-from-the-list)\n      - [2.2.3 Ask the player/user for an input](#223-ask-the-playeruser-for-an-input)\n      - [2.2.4 Check that the input is a single character](#224-check-that-the-input-is-a-single-character)\n      - [2.2.5 Start documenting my experience](#225-start-documenting-my-experience)\n      - [2.2.6 Update the latest code changes to GitHub](#226-update-the-latest-code-changes-to-github)\n      - [2.2.7 Refactor and optimise current code](#227-refactor-and-optimise-current-code)\n    - [2.3: Check if the guessed character is in the word](#23-check-if-the-guessed-character-is-in-the-word)\n      - [2.3.1 Implement the function to check the guessed character](#231-implement-the-function-to-check-the-guessed-character)\n      - [2.3.2 Implement the function to ask for user input](#232-implement-the-function-to-ask-for-user-input)\n    - [2.4: Create the Game class](#24-create-the-game-class)\n      - [2.4.1 Define the \\_\\_init_\\_ method](#241-define-the-__init__-method)\n      - [2.4.2 Implement the function to check the guessed character](#242-implement-the-function-to-check-the-guessed-character)\n      - [2.4.3 Implement the function to ask for user input](#243-implement-the-function-to-ask-for-user-input)\n      - [2.4.4 Refactor and optimise current code](#244-refactor-and-optimise-current-code)\n    - [2.5: Putting it all together](#25-putting-it-all-together)\n      - [2.5.1 Logic of the game](#251-logic-of-the-game)\n    - [2.6: Wrapped up: Handover](#26-wrapped-up-handover-)\n      - [2.6.1 Improvements: step by step](#261-improvements-step-by-step)\n      - [2.6.2 New Functionalities](#262-new-functionalities)\n      - [2.6.3 Known Issues](#263-known-issues)\n3. [Installation](#installation-instructions)\n4. [Usage](#usage-instructions)\n5. [File Structure](#file-structure)\n6. [License Information](#license-information)\n7. [Demonstrated Skills](#demonstrated-skills)\n\n## Milestones\nThis is an implementation of the Hangman game, where the computer thinks of a word and the user tries to guess it. In order to achieve developing this game, I categorised it in milestones, which each has a specific subset of chapters.\n\n### 2.1: Set up the environment\nThe first step in setting up the environment was to navigate and create a new directory on my local machine using the OS terminal.\n\n#### 2.1.1 OS Terminal\n\u003cp\u003eThis was done with the following commands:\u003c/p\u003e\n\n```sh\ncd /path/to/parent-directory\nmkdir hangman\ncd hangman\n```\n\n#### 2.1.2 Conda Virtual Environment\nNext, I created and initialized a new Conda virtual environment. This helps manage dependencies and keep them isolated from other projects. I also needed to download essential packages, such as _Python_ and _random_.\n\n```sh\n# Create a new Conda environment with Python\nconda create -n hangman python=3.8\n\n# Activate the  created environment\nconda activate hangman\n\n# Install the random module\nconda install random\n```\n\n#### 2.1.3 Git\nTo manage the project’s version control, I initialized a Git repository, cloned the GitHub repository, and performed some basic Git operations.\n\n```sh\n# Initialize a new Git repository\ngit init\n\n# Clone the existing GitHub repository\ngit clone https://github.com/your-username/repository.git\n\n# Navigate into the cloned repository\ncd hangman\n\n# Check the current status of the repository\ngit status\n\n# Add all changes to staging\ngit add .\n\n# Commit the changes with a message\ngit commit -m \"Initial commit: Add cloned repo Hangman.\"\n\n# Create a new branch for development\ngit branch -M main\n```\n\n#### 2.1.4 GitHub\nFinally, once I want to push the local repository to GitHub, to keep it backed up and share it with others, I write the following commands:\n\n```\n# Set the remote origin to the GitHub repository\ngit remote add origin https://github.com/your-username/hangman-project.git\n\n# Push the changes to the remote repository\ngit push -u origin main\n```\n\n### 2.2: Create the variables for the game\n\n#### 2.2.1 Define the list of possible words\n\u003cp\u003eCreated a file named _milestone_2.py_.\u003cbr\u003eThis file will contain the code for the first milestone.\nIn Python, lists are used to store multiple data in a single variable. In this task, I am going to create a list of words.\u003c/p\u003e\n\nSteps:\n- Created a list containing the names of my five (5) favorite fruits.\n- Assigned the list to a variable called word_list\n- Printed out the created list to the standard output/terminal\n\n#### 2.2.2 Choose a random word from the list\nTo accomplish this task, I needed to use the `random` module.\u003cbr\u003e\nThe random module is one of Python’s built-in modules.\nIt has a _choice_ method which returns a random item from a given sequence.\n\nSteps:\n- Wrote `import random` on the first line of my Python code\n- Created the `random.choice` method and passed the _word_list_ variable into the choice method\n- Assigned the randomly generated word to a variable called _word_\n- Printed out word to the standard output. Ran the code several times and observed the words printed out after each run.\n\n#### 2.2.3 Ask the player/user for an input\nAs you now know, the `print()` function in Python displays output on the screen. Conversely, Python has an `input()` function that takes input from the screen. Note that the input function returns the user input in the form of a string.\n\nSteps:\n- Using the `input` function, I asked the user to enter a single letter.\n- Assigned the input to a variable called _guess_.\n\n#### 2.2.4 Check that the input is a single character\nUsually, when taking input from users, it is best to validate that the input makes sense.\nFor example, we may want to ensure that only a single letter is entered and that only alphabetical characters are provided by the user.\u003cbr\u003e\nTo do this, create conditional checks that must be passed before the input can be accepted.\n\nSteps:\n- Created an `if` statement that checks if the length, `len(variable)`, of the input is equal to 1 AND the input is alphabetical.\n- In the body of the `if` statement, printed a message that says “Good guess!”.\n- Created an `else` block that prints “Oops! That is not a valid input.” if the preceding conditions are not met.\n\n#### 2.2.5 Start documenting my experience\nAdded documentation to my GitHub \u003cb\u003eREADME.md\u003c/b\u003e file.\u003cbr\u003e I referred to the relevant material from \u003cb\u003eAiCore\u003c/b\u003e for this task.\nAs per the course's suggestion, my README file should contain certain specific information for the reader's understanding and guidance.\n\n#### 2.2.6 Update the latest code changes to GitHub\nUpdated my GitHub repository with the latest code changes from my local machine. Started by staging the modifications and creating a commit. Then, pushed the changes to my GitHub repository.\n\n```sh\n# 1. Stage all the changes\ngit add .\n\n# 2. Commit the changes with a descriptive message\ngit commit -m \"Add code for creating variables and user input validation\"\n\n# Push the changes to the remote repository (the first push needs to be in this format)\ngit push -u origin main\n\n# Once that is done you can simply push it (after part 1 and 2 of the process) by following this command:\ngit push\n```\n\n#### 2.2.7 Refactor and optimise current code\nAs my tutors say: \"Refactoring will be a continuous and constant process, but this is the time to really scrutinise your code.\"\n\n### 2.3: Check if the guessed character is in the word\nIn this milestone I am checking if the guessede letter is in the randomly chosen word.\n\n#### 2.3.1 Implement the function to check the guessed character\n\u003cp\u003eCreated a file named _milestone_3.py_ and updated the existing code.\u003cbr\u003e\nThe aim is to create a function that checks `if` the guessed character is in the _secret word_.\u003c/p\u003e\n\nSteps:\n- Created a function named `check_guess` that takes `guess` as a parameter.\n- Converted the `guess` to lowercase to ensure consistency.\n- Used an `if` statement to check if the `guess` is in the `secret_word`.\n- If the `guess` is in the `secret_word`, printed a message saying \"Good guess! {guess} is in the word.\"\n- Otherwise, printed a message saying \"Sorry, {guess} is not in the word. Try again.\"\n\n#### 2.3.2 Implement the function to ask for user input\n\u003cp\u003eThe next step is to create a function that asks the player for input and validates the input.\u003c/p\u003e\n\nSteps:\n- Created a function named `ask_for_input`.\n- Used a `while True` loop to continuously ask the user for a guess until a valid input is provided.\n- Inside the loop, used the `input` function to ask the player to \"Guess a letter\".\n- Checked if the input is a single alphabetical character.\n- If the input is valid, called the `check_guess` function and passed the input.\n- Used `break` to exit the loop after a valid guess.\n- If the input is invalid, printed \"Invalid letter. Please, enter a single alphabetical character.\"\n\n\n### 2.4: Create the Game class\nCreating the class **Game**: \n\n#### 2.4.1 Define the `__init__` method\nSteps:\n- Created a class called `Hangman`.\n- Defined an `__init__` method to initialize the attributes of the class.\n- Passed `word_list` and `num_lives` as parameters to the `__init__` method, with `num_lives` having a default value of 5.\n- Initialized the following attributes:\n  - `word`: The word to be guessed, picked randomly from the `word_list`.\n  - `word_guessed`: A list of underscores representing the letters of the word not yet guessed.\n  - `num_letters`: The number of unique letters in the word that have not been guessed yet.\n  - `num_lives`: The number of lives the player has at the start of the game.\n  - `word_list`: The list of words.\n  - `list_of_guesses`: A list of the guesses that have already been tried.\n\n#### 2.4.2 Implement the function to check the guessed character\nSteps:\n- Created a method called check_guess that takes guess as a parameter.\n- Converted the guessed letter to lowercase.\n- Created an `if` statement to check if the guess is in the word.\n  - \u003cb\u003eIf the guess is in the word\u003c/b\u003e:\n    - Printed a message saying “Good guess! {guess} is in the word.”\n    - Created a for-loop to loop through each letter in the word and replace the corresponding underscore in word_guessed with the guessed letter.\n    - Reduced `num_letters` by 1.\n  - \u003cb\u003eElse\u003c/b\u003e:\n\t- Reduced `num_lives` by 1.\n\t- Printed a message saying “Sorry, {guess} is not in the word.”\n\t- Printed another message saying “You have {num_lives} lives left.”\n\n### 2.4.3 Implement the function to ask for user input\nSteps:\n\n- Created a method called `ask_for_input`.\n- Used a `while True` loop to continually ask the user for input until a valid guess is made.\n- Asked the user to guess a letter and assigned it to a variable called _guess_.\n- Created an if statement to check if the guess is not a single alphabetical character (`not guess.isalpha() or len(guess) != 1`).\n\n### 2.4.4 Refactor and optimise current code\nThe optimised version of the code is located in the milestones folder of this repository under the filename [_milestone_4_optimised.py_](./milestones/milestone_4_optmised.py). The previous version is available as [_milestone_4.py_](./milestones/milestone_4.py).\n\u003cp\u003eMy personal suggestion is opening both on different windows to see and follow the changes that were made.\u003c/p\u003e\n\u003cp\u003e This revision makes the code clearer, more concise and user friendly.\u003c/p\u003e\n\n- **Meaningful naming**:\n    - Renamed methods to be more descriptive.\n    - e.g.: `update_word_guessed`, `handle_correct_guess`, `handle_incorrect_guess`.\n\n- **Elimination of code duplication**:\n    - Refactored the code to eliminate duplicated logic by introducing helper methods (`update_word_guessed`, `handle_correct_guess`, `handle_incorrect_guess`).\n\n- **Single responsibility principle**:\n    - Ensured that each method focuses on a specific task.\n    - Example: `handle_correct_guess` handles the logic for a correct guess, `handle_incorrect_guess` takes care of the logic for an incorrect guess, and `is_valid_guess` validates the guess.\n\n- **Access Modifiers**:\n    - Made helper methods private (using a single underscore: **_**\u0026nbsp;) to indicate that they are intended for internal use within the class.\n    - These methods are intended for internal use within the **Hangman class** and should not be accessed directly from outside the class.\n\n- **Minimal use of `self`**:\n    - Significantly optimized this version of the code from my previous version, ensuring `self` is only used for instance variables.\n\n- **Consistent docstrings**:\n    - Added docstrings to all methods to explain their purpose, parameters, and return values, following the integrated development environments (IDEs) structure format.\n\n### 2.5: Putting it all together\nIn [_milestone_5.py_](./milestones/milestone_5.py), we have taken the code from [_milestone_4_optimised.py_](./milestones/milestone_4_optmised.py) and made several improvements and additions to bring the **Hangman game** to a complete state. \u003cp\u003eHere is a detailed comparison and documentation of what was done:\u003c/p\u003e\n\n#### 2.5.1 Logic of the game\n\u003cb\u003e New Additions and Changes:\u003c/b\u003e\n\n- **New Function to Run the Game:**\n    - The `play_game` function has been added in `milestone_5.py` to initiate and run the Hangman game.\n    - This function creates an instance of the `Hangman` class and starts the game loop.\n    - The game continues until the player wins by guessing all letters or loses by running out of lives.\n    \n- **Game Loop Logic:**\n    - The game loop inside `play_game` checks if the player has lost all lives or has successfully guessed all letters in the word.\n    - If the player runs out of lives, a “You lost!” message is displayed.\n    - If the player guesses all letters correctly, a “Congratulations. You won the game!” message is displayed.\n    \n- **Enhanced Validation:**\n    - The `_is_valid_guess` method ensures that the player’s guess is a single alphabetical character and hasn’t been guessed before.\n    - The game continues to prompt the player for valid input until a valid guess is provided.\n    \n- **Class Structure and Methods:**\n    - The class structure and methods (`__init__`, `_update_word_guessed`, `_handle_correct_guess`, `_handle_incorrect_guess`, `_is_valid_guess`, `_check_guess`, `ask_for_input`) have been kept the same but are now utilized within the context of the `play_game` function for better modularity and flow.\n\n## 2.6: Wrapped up: Milestone_6.py\n\nThe provided code for the Hangman game has been significantly updated to improve functionality and integrate two new open-source modules: `english_words` and `PyDictionary`. Below is a detailed explanation of the changes made from the old code to the new version, the new functionalities added, and issues encountered during execution.\n\n### 2.6.1 Improvements: step by step\n\n### 1. Integration of `english_words` Module\n- **Old Code:** The word list for the Hangman game was manually provided.\n- **New Code:** The `english_words` module is now used to dynamically generate a set of English words (`word_list`) from the `\"web2\"` dataset, ensuring a more diverse and comprehensive selection of words.\n\n### 2. Integration of `PyDictionary` Module\n- **Old Code:** There was no functionality for providing the meaning of the word after the game ends.\n- **New Code:** The `PyDictionary` module is now used to fetch and display the meaning of the word after the game concludes, either through a win or a loss.\n\n### 3. Improved Word Selection\n- **Old Code:** The word was selected from a list directly.\n- **New Code:** The word list is a set, and a random word is selected after converting this set to a list. This change is necessary due to the nature of the `english_words` module, which returns a set.\n\n### 4. Enhanced User Feedback\n- **Old Code:** The initial display of the word's blanks and the word's progress after each correct guess was not shown.\n- **New Code:** The initial state of the word (as blanks) is displayed when the game starts, and it is updated with each correct guess, providing better visual feedback to the player.\n\n### 5. Game Over Enhancements\n- **Old Code:** Upon losing the game, there was no additional information provided about the word.\n- **New Code:** When the player loses, the game now reveals the word and attempts to fetch its meaning using the `PyDictionary` module. If the player wins, the same information is provided as a reward.\n\n### 2.6.2 New Functionalities\n\n### 1. Dynamic Word List Generation\n- The `english_words` module provides a set of words, enhancing the variability and challenge of the game.\n\n### 2. Word Meaning Fetching\n- After the game ends, the `get_word_meaning` method attempts to fetch the meaning of the word using `PyDictionary`. This feature adds an educational aspect to the game.\n\n### 3. Improved Game Flow\n- The game now gives more detailed feedback throughout, including showing the word with blanks at the start and updating it dynamically as correct letters are guessed.\n\n### 2.6.3 Known Issues\n\n### Duration Errors with `PyDictionary`\n- **Issue:** The `PyDictionary` module frequently causes duration errors when attempting to fetch the meaning of the word. This issue occurs almost every time the code is run, particularly when trying to play the game.\n- **Impact:** Due to these errors, the word's meaning may not be displayed, resulting in the fallback message suggesting the player look up the word online.\n- **Possible Solution:** Considering alternative methods or libraries for fetching word meanings may be necessary to mitigate this issue. For instance, using an API-based service, such as \u003ca href='https://developer.oxforddictionaries.com' \u003e Oxford Dictionaries\u003c/a\u003e or \u003ca href='https://languages.oup.com' \u003e Oxford Languages\u003c/a\u003e, with better reliability might be more appropriate for this feature.\n\n## Conclusion\nThe new code version of the Hangman game offers improved functionality, a better user experience, and additional educational value. However, the duration errors with `PyDictionary` present a challenge that needs addressing to ensure the game runs smoothly and reliably.\n\n## Installation Instructions\n\nSteps for Mac:\n\n1. **Install Miniconda**\u003cbr\u003e\nMiniconda is a free minimal installer for Conda. Conda is a package manager that helps manage dependencies and virtual environments.\n\n- Download the Miniconda installer for macOS from the following link: [Miniconda Installer](https://docs.conda.io/en/latest/miniconda.html)\n- Select the Python 3.8 version and click the link to download the macOS 64-bit package.\n- Open the downloaded `.pkg` file and follow the installation instructions.\n\n2. **Open a New Terminal Window**\u003cbr\u003e\nAfter installing _Miniconda_, you need to open a new Terminal window to start using Conda.\u003cbr\u003e\nYou can fin the Terminal by pressing the buttons _command_ and _spacebar_. Finally type Terminal in the searchbar and the system will open it for you.\n\n3. **Clone the Hangman Game Repository**\n- In the Terminal, paste the following command to clone the repository from _GitHub_:\n\n  ```sh\n    git clone https://github.com/YOUR-USERNAME/hangman100.git\n    cd hangman100\n  ```\n\n4. \u003cb\u003eSet up a _virtual environment_\u003c/b\u003e\u003cbr\u003e\nCreate and activate a Conda virtual environment using the following commands:\n    ```sh\n    conda create -n hangman python=3.8\n    conda activate hangman\n    ```\n\n5. \u003cb\u003eRun the game\u003c/b\u003e\u003cbr\u003e\nNow you can run the Hangman game by executing the following command in the Terminal:\n    ```sh\n    python milestone_5.py\n    ```\n\n6. \u003cb\u003eLeaving the OS Back to Normal\u003c/b\u003e\u003cbr\u003e\n- To deactivate the Conda virtual environment, run the following command in the Terminal:\n    ```sh\n    conda deactivate\n    ```\n\n- If you wish to remove the Conda environment entirely, use the following command:\n    ```sh\n    conda remove -n hangman -a\n    ```\n## Usage Instructions\n1. **Run the Game:**\n- Execute the game script:\n  ```\n  python milestone_5.py\n  ```\n\n2. **Gameplay:**\n- Follow the on-screen prompts to guess letters.\n- The game will provide feedback on your guesses and update the game state accordingly.\n\n## File Structure\nContent here...\n\n## License Information\nContent here...\n\n## Demonstrated Skills\nContent here...","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjose-zothner-meyer%2Fhangman100","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjose-zothner-meyer%2Fhangman100","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjose-zothner-meyer%2Fhangman100/lists"}