Skip to content
Advertisement

Hangman python project

I have been trying to code a hangman game but couldn’t do it because there seems to be an error with my if requests, because he dosn’t detect a valid Letter in the word although there is .

please tell me if i can give you any more information. looking forward to hearing from yall and i am really interested in the skills i can learn:D

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)

Advertisement

Answer

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)
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement