Hangman Python Game Index Error in For Loop with the Lists
Question: Okay, I am working on a homework assignment to build a hangman game in python.
So far, it was going well untill I get this annoying error:

    
    
    Traceback (most recent call last):  
      File "/Users/Toly/Downloads/ps2 6/ps2_hangman.py", line 82, in <module>
        if (remLetters[i] == userGuess):
    IndexError: string index out of range 
    

Here is my code:

    
    
        # 6.00 Problem Set 3
        # 
        # Hangman
        #
    
    
        # -----------------------------------
        # Helper code
        # (you don't need to understand this helper code)
        import random
        import string
        import time
    
        WORDLIST_FILENAME = "words.txt"
    
        def load_words():
            print "Loading word list from file..."
            # inFile: file
            inFile = open(WORDLIST_FILENAME, 'r', 0)
            # line: string
            line = inFile.readline()
            # wordlist: list of strings
            wordlist = string.split(line)
            print "  ", len(wordlist), "words loaded."
            return wordlist
    
        def choose_word(wordlist):
            """
            wordlist (list): list of words (strings)
    
            Returns a word from wordlist at random
            """
            return random.choice(wordlist)
    
        wordlist = load_words()
    
        blankword="_ "
        word=random.choice (wordlist)    
        remLetters = string.lowercase
        remGuesses = 8 #starting number of guesses
        remWord=len(word)
    
        #makes a blank with the length of the word
        print "Welcome to Hangman"
        time.sleep(1)
        print
        print "Your word is", remWord,"letters long."
        print
        time.sleep (1)
    
        while (remGuesses != 0 or blankword != word):
            remBlankword=len(blankword)
    
    
     remWordDoubled=remWord*2
        while (remWordDoubled!=len(blankword)):
            blankword=blankword + "_ "
        print blankword
        print
        print "You have",remGuesses," guesses left."
        print
        time.sleep(1)
        userGuess= str(raw_input ("Guess a letter:"))
        print
        if (userGuess in word):
            print "Excellent guess!"
    
        else:
           print "Bad Guess"
           remGuesses=remGuesses-1
        for i in range (1, len(remLetters)):
           if (remLetters[i] == userGuess):
                remLetters = remLetters[0:i] + remLetters[i+1:len(remLetters)]
    
        print remLetters
    
    
    if (remGuesses == 0):
        print
        print "Sorry, you died! Ha, sucks!"
        print
        print
        time.sleep (1)
        print "End of Game"
    
    
    if (blankword == word):
        print
        print "Congradulations! You won!"
        print
        time.sleep(1)
        print 
        print
        print
        print "End of Game"
    


Answer: You first get the range of indices in `remLetters`, but if the letter ==
`userGuess`, then you remove one letter out of `remLetters`. Meaning that now
the largest index in `remLetters` is 1 less than it was before. When you try
to index the highest number returned by your range, you are now out of bounds
and so you get an `IndexError`.

Something like this is probably what you're looking for:

    
    
    remLetters = ''.join(x for x in remLetters if x != userGuess)
    

Or:

    
    
    try:
        idx = remLetters.index(userGuess)
        remLetters = remLetters[:idx] + remLetters[idx+1:]
    except ValueError:
        pass
    

