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