HiighQ
HiighQ

Reputation: 55

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)

Upvotes: 2

Views: 480

Answers (1)

Josip Domazet
Josip Domazet

Reputation: 2880

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)

Upvotes: 2

Related Questions