Home > Software design >  Hangman, replace blanks with word. How would I do it?
Hangman, replace blanks with word. How would I do it?

Time:04-25

This is my current code, Im looking for any help as to how to replace the blanks with the letter/word. I am new to coding and this seems to be one issue I have been having. I have tried to look up and see different answers for this question before but I can't find a solution that I myself can understand.


#import-statements#
import random
import turtle as hangman
import time
#game-configuration#
words_list = ["aardvark","special","mathematics","tabletop","dog","crazy","stop"]
background = hangman.Screen()
background.setup(400,450)
background.bgcolor("lightblue")
font_setup = ("Arial", 20, "Normal")
hangman.penup()
#functions#
def description_name():
  print("Welcome to hangman. Your goal is to guess the word. You may guess words or letters, just remember you have six tries.")
  print("======================================")
  name = input("Enter a username of your choice: ")
  print("Ok " str(name)  ", lets begin!")
#-hangman_noose_function-#
def hangman_pole():
  hangman.penup()
  hangman.goto(-100,150)
  hangman.pendown()
  hangman.forward(100)
  hangman.right(90)
  hangman.forward(180)
  hangman.right(90)
  hangman.forward(65)
  hangman.left(180)
  hangman.forward(130)
#-Main game function-#
def game(word):
  hangman_pole()
  trials = 6
  words_guessed = []
  guessed_letters = []
  wrong_guesses = []
  right_guesses = []
  description_name()
  guessed = False
  print("======================================")
#-hangman drawings based off tries-#
  def hangman_graphic(hangmanparts):
    #drawing head#
    if hangmanparts == 5:
      hangman.penup()
      hangman.goto(-100,50)
      hangman.pendown()
      hangman.circle(50)
    #drawing body#
    elif hangmanparts == 4:
      hangman.penup()
      hangman.right(90)
      hangman.pendown()
      hangman.forward(90)
    #drawing left arm#
    elif hangmanparts == 3:
      hangman.penup()
      hangman.right(180)
      hangman.forward(45)
      hangman.left(45)
      hangman.pendown()
      hangman.forward(50)
    #drawing right arm#
    elif hangmanparts == 2:
      hangman.penup()
      hangman.right(180)
      hangman.forward(50)
      hangman.left(90)
      hangman.pendown()
      hangman.forward(50)
    #drawing left leg#
    elif hangmanparts == 1:
      hangman.penup()
      hangman.left(180)
      hangman.forward(50)
      hangman.left(45)
      hangman.forward(45)
      hangman.right(45)
      hangman.pendown()
      hangman.forward(60)
    #drawing right leg#
    elif hangmanparts == 0:
      hangman.penup()
      hangman.left(180)
      hangman.forward(60)
      hangman.right(90)
      hangman.pendown()
      hangman.forward(60)
  #iteration loop for guessing#
  while guessed is False and trials > 0:
    print(str(trials)   " tries left" )
    print("Correct Guessed Letters:"   str(right_guesses))
    print("Wrong Guessed Letters:"   str(wrong_guesses))
    print("Wrong Guessed Words:"   str(words_guessed))
    player_guess = input("Please guess a letter or a word: ").lower()
    print("======================================")
    if len(player_guess) == 1:
      #if the guess was already guessed#
      if player_guess in guessed_letters:
        print("Sorry, you lost a try, remember this letter was already guessed. Go again: ")
        trials = trials - 1
        hangman_graphic(trials)
      #checks if the guess is not in the word#
      elif player_guess not in word:
        print("Incorrect! " str(player_guess)  " is not in the word.")
        guessed_letters.append(player_guess)
        wrong_guesses.append(player_guess)
        trials = trials - 1
        hangman_graphic(trials)
      #checks if guess is found in the word#
      elif player_guess in word:
        print("Correct! "  str(player_guess)  " is in the word!")
        guessed_letters.append(player_guess)
        right_guesses.append(player_guess)
      else:
        #checks if the guess is a letter in the alphabet#
        if not player_guess.isalpha():
          print("Invalid guess: ")
    elif len(player_guess) > 1 and player_guess.isalpha():
      #checks if the guess is not the word#
      if player_guess != word:
        print(str(player_guess)  ' is not the secret word!')
        words_guessed.append(player_guess)
        trials = trials - 1
        hangman_graphic(trials)
      elif player_guess in words_guessed:
        print("Sorry, you lost a try, remember this word was already guess. Go again: ")
        trials = trials - 1
        hangman_graphic(trials)
      else:
        #checks if the word is the hangman secret word#
        if player_guess == word:
          guessed == True
          print("Nice you guessed the word! It was "  str(player_guess))
          print("======================================")
          ask = input("Would you like to play again? Y/N")
          if ask == "Y" or "y":
            print("======================================")
            hangman.reset()
            game(word)
  if trials == 0:
    print("======================================")
    print('Sorry, you are out of tries. The word was '  str(word))
    print("======================================")
    ask = input("Would you like to play again? Y/N")
    if ask == "Y" or "y":
      print("======================================")
      hangman.reset()
      game(word)
    else:
      quit()
#allows the game to run#
def run():
  word = random.choice(words_list)
  game(word)

  
  

run()

CodePudding user response:

Add something along these lines to the section of code where you print the current game status:

    print(' '.join(c if c in right_guesses else "_" for c in word))
    print(f"{trials} tries left" )
    print(f"Correct Guessed Letters: {right_guesses}")
    print(f"Wrong Guessed Letters: {wrong_guesses}")
    print(f"Wrong Guessed Words: {words_guessed}")

In other words -- for each letter of word, print a blank if the letter hasn't been guessed, or the letter itself if it has been.

CodePudding user response:

print(''.join([l if l in right_guesses else '?' for l in word ]))

You can insert this code in line 95 with a character different from empty string. In this example I used the '?', but you can insert also a '_' or a '*'

Here a output example:

======================================
???????
6 tries left
Correct Guessed Letters:[]
Wrong Guessed Letters:[]
Wrong Guessed Words:[]
Please guess a letter or a word: a
======================================
Correct! a is in the word!
?????a?
6 tries left
Correct Guessed Letters:['a']
Wrong Guessed Letters:[]
Wrong Guessed Words:[]

Here the python code, with the addition of this:

#import-statements#
import random
import turtle as hangman
import time
#game-configuration#
words_list = ["aardvark","special","mathematics","tabletop","dog","crazy","stop"]
background = hangman.Screen()
background.setup(400,450)
background.bgcolor("lightblue")
font_setup = ("Arial", 20, "Normal")
hangman.penup()
#functions#
def description_name():
  print("Welcome to hangman. Your goal is to guess the word. You may guess words or letters, just remember you have six tries.")
  print("======================================")
  name = input("Enter a username of your choice: ")
  print("Ok " str(name)  ", lets begin!")
#-hangman_noose_function-#
def hangman_pole():
  hangman.penup()
  hangman.goto(-100,150)
  hangman.pendown()
  hangman.forward(100)
  hangman.right(90)
  hangman.forward(180)
  hangman.right(90)
  hangman.forward(65)
  hangman.left(180)
  hangman.forward(130)
#-Main game function-#
def game(word):
  hangman_pole()
  trials = 6
  words_guessed = []
  guessed_letters = []
  wrong_guesses = []
  right_guesses = []
  description_name()
  guessed = False
  print("======================================")
#-hangman drawings based off tries-#


  def hangman_graphic(hangmanparts):
    #drawing head#
    if hangmanparts == 5:
      hangman.penup()
      hangman.goto(-100,50)
      hangman.pendown()
      hangman.circle(50)
    #drawing body#
    elif hangmanparts == 4:
      hangman.penup()
      hangman.right(90)
      hangman.pendown()
      hangman.forward(90)
    #drawing left arm#
    elif hangmanparts == 3:
      hangman.penup()
      hangman.right(180)
      hangman.forward(45)
      hangman.left(45)
      hangman.pendown()
      hangman.forward(50)
    #drawing right arm#
    elif hangmanparts == 2:
      hangman.penup()
      hangman.right(180)
      hangman.forward(50)
      hangman.left(90)
      hangman.pendown()
      hangman.forward(50)
    #drawing left leg#
    elif hangmanparts == 1:
      hangman.penup()
      hangman.left(180)
      hangman.forward(50)
      hangman.left(45)
      hangman.forward(45)
      hangman.right(45)
      hangman.pendown()
      hangman.forward(60)
    #drawing right leg#
    elif hangmanparts == 0:
      hangman.penup()
      hangman.left(180)
      hangman.forward(60)
      hangman.right(90)
      hangman.pendown()
      hangman.forward(60)
        
  #iteration loop for guessing#
  while guessed is False and trials > 0:
    
    print(''.join([l if l in right_guesses else '?' for l in word ]))
    print(str(trials)   " tries left" )
    print("Correct Guessed Letters:"   str(right_guesses))
    print("Wrong Guessed Letters:"   str(wrong_guesses))
    print("Wrong Guessed Words:"   str(words_guessed))
    player_guess = input("Please guess a letter or a word: ").lower()
    print("======================================")
    if len(player_guess) == 1:
      #if the guess was already guessed#
      if player_guess in guessed_letters:
        print("Sorry, you lost a try, remember this letter was already guessed. Go again: ")
        trials = trials - 1
        hangman_graphic(trials)
      #checks if the guess is not in the word#
      elif player_guess not in word:
        print("Incorrect! " str(player_guess)  " is not in the word.")
        guessed_letters.append(player_guess)
        wrong_guesses.append(player_guess)
        trials = trials - 1
        hangman_graphic(trials)
      #checks if guess is found in the word#
      elif player_guess in word:
        print("Correct! "  str(player_guess)  " is in the word!")
        guessed_letters.append(player_guess)
        right_guesses.append(player_guess)
      else:
        #checks if the guess is a letter in the alphabet#
        if not player_guess.isalpha():
          print("Invalid guess: ")
    elif len(player_guess) > 1 and player_guess.isalpha():
      #checks if the guess is not the word#
      if player_guess != word:
        print(str(player_guess)  ' is not the secret word!')
        words_guessed.append(player_guess)
        trials = trials - 1
        hangman_graphic(trials)
      elif player_guess in words_guessed:
        print("Sorry, you lost a try, remember this word was already guess. Go again: ")
        trials = trials - 1
        hangman_graphic(trials)
      else:
        #checks if the word is the hangman secret word#
        if player_guess == word:
          guessed == True
          print("Nice you guessed the word! It was "  str(player_guess))
          print("======================================")
          ask = input("Would you like to play again? Y/N")
          if ask == "Y" or "y":
            print("======================================")
            hangman.reset()
            game(word)
  if trials == 0:
    print("======================================")
    print('Sorry, you are out of tries. The word was '  str(word))
    print("======================================")
    ask = input("Would you like to play again? Y/N")
    if ask == "Y" or "y":
      print("======================================")
      hangman.reset()
      game(word)
    else:
      quit()
#allows the game to run#
def run():
  word = random.choice(words_list)
  game(word)

  
  

run()
  • Related