My hangman game keeps printing out extra underscores for every correct guess

Question:

word = input("Input your word> ").strip().lower()

list = []
counter = 6
def counter1():
  global counter 
  counter -= 1  
  return counter

def checker():  
  for index in range(len(word)):
      for index1 in range(len(list)):
        if list[index1] in word[index]:
          location1 = word.find(list[index1])
          print(word[location1], end='')
        else:
          print("_",end='')


def program():
  ask1 = input("Letter> ")
  print()
  if ask1.lower().strip() in list:
    print()
    print("33[31m","You already picked this!","33[0m")
    print()
    checker()
    print()
    print()
    program()
      
  elif ask1.lower().strip() not in list: 
      if ask1 in word:
        list.append(ask1)
        checker()
        print()
        print()
        program()

      else: 
        print("33[31m","WRONG!!","33[0m")
        print()
        for index in range(len(word)):
          for index1 in range(len(list)):
            if list[index1] in word[index]:
              location1 = word.find(list[index1])
              print(word[location1], end='')
            else:
              print("_",end='')
        print()
        print()
        if counter == 1:
          print(f"You lost!, The answer was >> {word}")
          exit()
        else:
          print(counter1(),"Attempts left")
          print()
        
        
        program()
        
    

program()

For some reason, every time the user inputs the correct guess, it adds extra underscores in between the characters.

for example in the terminal it looks like this:

letter> b

b___

Letter> r

b__r____

Letter> u

b___r___u___

Letter> h

b____r____u____h

I tried to make a subroutine for checking where the correct guess is supposed to go in the word. I expected the result to reset and redo the for loops every time but it looks like it’s adding extra underscores. Thank you, guys!

Asked By: Zein

||

Answers:

Your checker() function is faulty. It should check for every letter in the answer whether it is guessed or not. This is done by the following code:

def checker():  
  for index in range(len(word)):
    if word[index] in list:
      print(word[index],end="")
    else:
      print("_",end='')

It loops for all letters in the word. If the letter is found in the list of guessed letters, it prints the letter. If not, it prints an underscore.

Answered By: Lexpj
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.