Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Hangman python project

i have been trying to code a hangman game but couldn’t do it because there seems to be an error in the function get_available_letters but i cant see what the problem is you guys got any tips?

I become the respond:
Terminal_output

So not online does he not detect that the input is in the secret word but also he just crashes when it comes to the get_available_letters function.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

import random
import string

def check_guess(guess):
    try:
        str(guess)
        return True
    except:
        return False

def check_lvl(difficulty):
    try:
      int(difficulty)
      return True
    except:
      return False

def ask_for_difficulty(force_valid_input):
  while True:
      difficulty = input("Please choose your difficulty Level, starting from level 1 to 3: ")
      if check_lvl(difficulty) and difficulty == '1' or difficulty == '2' or difficulty == '3':
          return int(difficulty)
      else:
        if not check_lvl(difficulty):
          return None
        print("wrong input")


  
def get_words():
   print("Loading word list from file...")
   f = open("/home/hiighq/Desktop/VisualCode/hangman-python-shirelkatz/countries-and-capitals.txt", 'rb', 0)
   content = f.readline
   wordlist = []
   for content in f:
     wordlist.append(content.strip())
   print (" ", len(wordlist), "words loaded.")
   f.close
   
   return wordlist

def choose_word(wordlist):
   
   return str(random.choice(wordlist))  


wordlist = get_words()
word_to_guees = choose_word(wordlist)
pos_of_line = word_to_guees.rfind("|")  
pos_of_point = word_to_guees.rfind("'") 
secretWord = word_to_guees[pos_of_line+2:pos_of_point]

def is_word_guessed(secretWord, lettersGuessed):
  count = 0
  for i, c in enumerate(secretWord):
    if c in lettersGuessed:
      count += 1
  if count == len(secretWord):
    return True
  else:
    return False

def get_guessed_word(secretWord, lettersGuessed):
  count = 0
  blank = ["_ "] * len(secretWord)

  for i, c in enumerate(secretWord):
    if c in lettersGuessed:
      count += 1
      blank.insert(count-1,c)
      blank.pop(count)
      if count == len(secretWord):
        return ''.join(str(e)for e in blank)
    else:
      count +=1
      blank.insert(count-1, '_')
      blank.pop(count)
      if count == len(secretWord):
        return ''.join(str(e) for e in blank)

def get_availible_letters(lettersGuessed):
  alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
  alphabet2 = alphabet[:]

  def removeDupsBetter(L1, L2):
        L1Start = L1[:]
        for e in L1:
            if e in L1Start:
                L2.remove(e)
        return ''.join(str(e) for e in L2)

  return removeDupsBetter(lettersGuessed, alphabet2)

def set_difficulty(difficulty):
  lives = int
  if difficulty == 1:
       lives = 8
       print("At level 1, you will have ",(lives), "lives!")
       return lives
  elif difficulty == 2: 
       lives = 5
       print("At level 2, you will have ",(lives), "lives!")
       return lives 
  elif difficulty == 3:
        lives = 3 
        print("At level 3, you will have ",(lives), "lives!")
        return lives  
       

def hangman(secretWord):
  intro = len(str(secretWord))
  lettersGuessed= []
  guess = str
  mistakesMade = 0
  wordGuessed = False
  difficulty = int
  print("Welcome to the hangman game!")
  difficulty = ask_for_difficulty(True)
  lives = set_difficulty(difficulty)
  print("-----------------------------------------------")
  print("I am thinking of a word with ",intro," letters!",secretWord)
 
  while lives > 0 and mistakesMade <= lives and wordGuessed is False:
    if secretWord == get_guessed_word(secretWord, lettersGuessed):
      wordGuessed = True
      break
    print("You have",str(lives)," guesses left.")
    print("Available letters: ", get_availible_letters(lettersGuessed))
    guess = input("Please guess a letter: ").lower
    if str(guess) in secretWord:          #checks if input is in secretword
      if str(guess) in lettersGuessed:
        print("Looks like you have already tried this letter: ", get_availible_letters(lettersGuessed))     
        print("-----------------------------------------------")
      else:
       lettersGuessed.append(guess)
       print("Good guess: ", get_guessed_word(secretWord,lettersGuessed))
    else:
      if str(guess) in lettersGuessed:
        print("Looks like you have already tried this letter: ", get_availible_letters(lettersGuessed))   
        print("-----------------------------------------------") 
      else:
        lettersGuessed.append(guess)
        lives -= 1
        mistakesMade += 1
        print("That letter is not in the word! You have ", lives," left.",get_guessed_word(secretWord,lettersGuessed))
    
  if wordGuessed == True:
    return ("Congratz you won!:D")
  elif lives == 0:
    print("You ran out of lives. the word was", secretWord)
  


hangman(secretWord)

>Solution :

The problem arises in your removeDupsBetter method. You are trying to remove an element from L2 which is not present in L2.
Maybe you actually meant to do this:

  def removeDupsBetter(L1, L2):
        L1Start = L1[:]
        for e in L1:
            // Checking if element is present in L2 before removing it.
            if e in L2:
                L2.remove(e)
        return ''.join(str(e) for e in L2)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading