So, I’ve been dabbling in Python for a few days now — mostly theory, going over variables, loops, conditionals, and the usual suspects. And like every sane new coder, I decided my first “real” project should be something epic.

Naturally, that meant… Hangman.

It’s a perfect beginner’s challenge:

  • You practice variables by keeping track of the guessed letters and wrong attempts.
  • You use loops for gameplay flow.
  • You sprinkle in conditionals to decide who lives or dies (well, ASCII-wise).

After some trial and error (and a fair bit of “Oh right, Python is case-sensitive”), I got my version working. Admittedly, I did let ChatGPT “pimp” some parts — but hey, that’s how we learn faster, right?

What It Does

  • Picks a random word from a predefined list
  • Displays an ASCII stick figure with each wrong guess
  • Lets you guess letters or the entire word
  • Handles uppercase, lowercase, and repeat guesses
  • Shows off my growing Python superpowers

Why I Love It

It’s not just a game — it’s a little time capsule of where I am right now in my coding journey.
In a few months, I’ll look back at this and think, “Wow… I’ve come a long way.”
But for now, it’s pure joy watching my terminal fill with underscores, ASCII art, and victory messages (or tragic losses).

Final Thoughts

If you’re starting out with Python, make a Hangman game. Seriously. It’s the perfect playground for experimenting with loops, logic, and the magic of ASCII. And if you can make your code look clean and run bug-free, you’ve already won.

 

library.py

words = ["Apfel", "Banane", "Mango", "Kirsche", "Pfirsich", "Marlon", "Emilia", "Raphael", "Mama", "Kerstin"]

logo = ['''
 _                                             
| |                                            
| |__   __ _ _ __   __ _ _ __ ___   __ _ _ __  
| '_ \ / _` | '_ \ / _` | '_ ` _ \ / _` | '_ \ 
| | | | (_| | | | | (_| | | | | | | (_| | | | |
|_| |_|\__,_|_| |_|\__, |_| |_| |_|\__,_|_| |_|
                    __/ |                      
                   |___/''']

HANGMANPICS = ['''
  +---+
  |   |
      |
      |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
      |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
  |   |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|   |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|\  |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========''']

main.py

# =============================================================================
# Hangman Game
#
# File: main.py
# Author: Raphael Münch
# Email: Raphael.Muench@proton.me
# Website: https://www.apt-upgrade.me
#
# Created: 2025-08-15
# Last Updated: 2025-08-15
#
# Description:
#   A simple Hangman game played in the console.
#   Includes ASCII art, word guessing, and configurable max attempts.
#
# Copyright (c) 2025 Raphael Münch. All rights reserved.
#
# License:
#   This software is licensed under the MIT License.
#   You may use, copy, modify, merge, publish, distribute, sublicense,
#   and/or sell copies of the Software, provided the copyright notice
#   above appears in all copies.
#
# =============================================================================

import library
import os
import random

DEBUG = False

while True:
    # Clear the console (Windows = 'cls', others = 'clear')
    os.system('cls' if os.name == 'nt' else 'clear')
    print(library.logo[0])

    chosen_word = random.choice(library.words)
    word_lower = chosen_word.lower()

    # Create a mask: "_" for each letter in the word
    mask = ["_"] * len(chosen_word)

    guessed_letters = ""           # Letters guessed in the current round
    wrong_attempts = 0              # Count of wrong guesses
    max_attempts = len(library.HANGMANPICS) - 1  # e.g., 6 wrong guesses allowed
    found_letter = False

    while True:
        print(f"Your guesses: {guessed_letters}")
        print(f"Current word: {' '.join(mask)}")
        if DEBUG:
            print(f"Chosen word: {chosen_word}")
        print(f"Attempt: {wrong_attempts}/{max_attempts}")

        choice = input("Enter a letter or guess the word: ").strip()

        # Whole word guess
        if len(choice) > 1:
            if choice.lower() == word_lower:
                mask = list(chosen_word)  # Reveal the whole word
                print("You win!!!")
                break
            else:
                wrong_attempts += 1
                print(f"\n\n{library.HANGMANPICS[min(wrong_attempts, max_attempts)]}")
                if wrong_attempts >= max_attempts:
                    print("\n\aYou've lost!!!")
                    print(f"The word was: {chosen_word}")
                    break
                continue

        # Single letter guess
        if not choice:
            continue
        guess = choice.lower()

        # Skip if letter already guessed
        if guess in guessed_letters:
            print("Already guessed. Try another letter.")
            continue

        guessed_letters += guess

        # Check if guess matches any letter in the word
        found_letter = False
        for i, ch in enumerate(word_lower):
            if guess == ch:
                mask[i] = chosen_word[i]   # Preserve original case
                found_letter = True

        if not found_letter:
            wrong_attempts += 1

        print(f"\n\n{library.HANGMANPICS[min(wrong_attempts, max_attempts)]}")

        if wrong_attempts >= max_attempts:
            print("\n\aYou've lost!!!")
            print(f"The word was: {chosen_word}")
            break

        if "".join(mask).lower() == word_lower:
            print("You win!!!")
            break

    answer = input("Do you want to play again (y/n)? ").strip().lower()
    if answer != "y":
        break

By raphael

Leave a Reply