Python Project: Hangman Game - Solutions and Explanations
Hangman Game:
Build a hangman game where players guess a word by suggesting letters. The game continues until the player correctly guesses the word or runs out of attempts.
Input values:
Player suggests a letter to guess the word.
Output value:
Feedback on whether the guessed letter is correct or incorrect. With revealed letters, display the current state of the word.
Example:
Input values: Guess a letter: A Output value: Incorrect! Current state: _ Input values: Guess a letter: E Output value: Correct! Current state: E Input values: Guess a letter: S Output value: Incorrect! Current state: E Input values: Guess a letter: R Output value: Correct! Current state: E R _
Here are two different solutions for a "Hangman" game in Python. The game allows players to guess a word by suggesting letters. The game continues until the player either correctly guesses the word or runs out of attempts.
Solution 1: Basic Approach using Functions and Loops
Code:
# Solution 1: Basic Approach Using Functions and Loops
import random  # Import the random module to select a random word
# List of words for the Hangman game
word_list = ['python', 'hangman', 'programming', 'developer', 'algorithm']
def choose_word(word_list):
    """Randomly select a word from the word list."""
    return random.choice(word_list)
def display_current_state(word, guessed_letters):
    """Display the current state of the guessed word with correct letters revealed."""
    current_state = ''.join([letter if letter in guessed_letters else '_' for letter in word])
    return current_state
def hangman():
    """Main function to play the Hangman game."""
    # Choose a random word for the player to guess
    word_to_guess = choose_word(word_list)
    guessed_letters = set()  # Set to store guessed letters
    attempts_left = 6  # Number of attempts allowed
    print("Welcome to Hangman!")
    print("Try to guess the word!")
    # Game loop
    while attempts_left > 0:
        # Display the current state of the word
        current_state = display_current_state(word_to_guess, guessed_letters)
        print(f"Current state: {current_state}")
        
        # Check if the player has guessed the entire word
        if '_' not in current_state:
            print("Congratulations! You've guessed the word!")
            break
        # Get the player's guess
        guess = input("Guess a letter: ").lower()
        # Validate the player's guess
        if len(guess) != 1 or not guess.isalpha():
            print("Invalid input. Please enter a single letter.")
            continue
        # Check if the letter was already guessed
        if guess in guessed_letters:
            print("You've already guessed that letter. Try again.")
            continue
        # Add the guessed letter to the set of guessed letters
        guessed_letters.add(guess)
        # Check if the guessed letter is in the word
        if guess in word_to_guess:
            print("Correct!")
        else:
            print("Incorrect!")
            attempts_left -= 1
            print(f"Attempts left: {attempts_left}")
    # If the player runs out of attempts
    if attempts_left == 0:
        print(f"Sorry, you've run out of attempts. The word was '{word_to_guess}'.")
# Start the Hangman game
hangman()
Output:
Welcome to Hangman! Try to guess the word! Current state: _________ Guess a letter: D Incorrect! Attempts left: 5 Current state: _________ Guess a letter: E Incorrect! Attempts left: 4 Current state: _________ Guess a letter: P Incorrect! Attempts left: 3 Current state: _________ Guess a letter: Q Incorrect! Attempts left: 2 Current state: _________ Guess a letter: S Incorrect! Attempts left: 1 Current state: _________ Guess a letter: A Correct! Current state: a________ Guess a letter: C Incorrect! Attempts left: 0 Sorry, you've run out of attempts. The word was 'algorithm'.
Explanation:
- This solution uses basic functions and loops to implement the Hangman game.
- The 'choose_word()' function selects a random word from the list.
- The 'display_current_state()' function shows the current state of the word, revealing the correct guessed letters.
- The main 'hangman()' function handles the game logic, including user input, validation, checking for guessed letters, and updating attempts.
- This approach is simple and effective but lacks structure for future expansions or enhancements.
Solution 2: Using a Class-Based approach for Organization and Reusability
Code:
# Solution 2: Using a Class-Based Approach for Organization and Reusability
import random  # Import the random module to select a random word
class HangmanGame:
    """Class to handle the Hangman game logic"""
    def __init__(self, word_list):
        """Initialize the game with a list of words and default values"""
        self.word_list = word_list
        self.word_to_guess = random.choice(word_list)
        self.guessed_letters = set()
        self.attempts_left = 6
    def display_current_state(self):
        """Display the current state of the guessed word with correct letters revealed"""
        return ''.join([letter if letter in self.guessed_letters else '_' for letter in self.word_to_guess])
    def make_guess(self, guess):
        """Process the player's guess and update game state"""
        # Add the guessed letter to the set of guessed letters
        self.guessed_letters.add(guess)
        # Check if the guessed letter is in the word
        if guess in self.word_to_guess:
            print("Correct!")
        else:
            print("Incorrect!")
            self.attempts_left -= 1
            print(f"Attempts left: {self.attempts_left}")
    def play(self):
        """Main function to play the Hangman game"""
        print("Welcome to Hangman!")
        print("Try to guess the word!")
        # Game loop
        while self.attempts_left > 0:
            # Display the current state of the word
            current_state = self.display_current_state()
            print(f"Current state: {current_state}")
            
            # Check if the player has guessed the entire word
            if '_' not in current_state:
                print("Congratulations! You've guessed the word!")
                break
            # Get the player's guess
            guess = input("Guess a letter: ").lower()
            # Validate the player's guess
            if len(guess) != 1 or not guess.isalpha():
                print("Invalid input. Please enter a single letter.")
                continue
            # Check if the letter was already guessed
            if guess in self.guessed_letters:
                print("You've already guessed that letter. Try again.")
                continue
            # Make the guess and update the game state
            self.make_guess(guess)
        # If the player runs out of attempts
        if self.attempts_left == 0:
            print(f"Sorry, you've run out of attempts. The word was '{self.word_to_guess}'.")
# List of words for the Hangman game
word_list = ['python', 'hangman', 'programming', 'developer', 'algorithm']
# Create an instance of the HangmanGame class
game = HangmanGame(word_list)
# Start the Hangman game
game.play()
Output:
Welcome to Hangman! Try to guess the word! Current state: ______ Guess a letter: p Correct! Current state: p_____ Guess a letter: y Correct! Current state: py____ Guess a letter: t Correct! Current state: pyt___ Guess a letter: h Correct! Current state: pyth__ Guess a letter: o Correct! Current state: pytho_ Guess a letter: n Correct! Current state: python Congratulations! You've guessed the word!
Welcome to Hangman! Try to guess the word! Current state: _________ Guess a letter: v Correct! Current state: __v______ Guess a letter: d Correct! Current state: d_v______ Guess a letter: e Correct! Current state: deve___e_ Guess a letter: l Correct! Current state: devel__e_ Guess a letter: r Correct! Current state: devel__er Guess a letter: o Correct! Current state: develo_er Guess a letter: p Correct! Current state: developer Congratulations! You've guessed the word!
Explanation:
- This solution encapsulates all game logic within a 'HangmanGame' class, which is more organized and modular.
- The '__init__' method initializes the game state (word to guess, guessed letters, attempts left).
- The 'display_current_state()' method shows the current state of the word.
- The 'make_guess()' method processes each guess and updates the game state.
- The 'play()' method controls the game flow, taking user input and managing game progression.
- This approach follows Object-Oriented Programming (OOP) principles, making the code easier to extend, maintain, and reuse.
Note: 
  Both solutions achieve the goal of implementing a basic Hangman game where players guess a word by suggesting letters, with Solution 1 using a straightforward function-based approach and Solution 2 utilizing a more organized, class-based design.
Go to:
