Python Forum

Full Version: Please help me with my code
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Somehow the below mentioned code is getting into the infinite loop. Seems like it is not recognizing the
while loop termination conditions.
import random
import string

WORDLIST_FILENAME = "words.txt"


def load_words():
"""
Returns a list of valid words. Words are strings of lowercase letters.

Depending on the size of the word list, this function may
take a while to finish.
"""
print("Loading word list from file...")
# inFile: file
inFile = open(WORDLIST_FILENAME, 'r')
# line: string
line = inFile.readline()
# wordlist: list of strings
wordlist = line.split()
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)

# end of helper code

# -----------------------------------

# Load the list of words into the variable wordlist
# so that it can be accessed from anywhere in the program
wordlist = load_words()
secret_word = choose_word(wordlist)
####letters_guessed = list()
## #print('you have',guesses_available,'guesses avaialable')
x = int(len(secret_word))
print("secret_word",secret_word)

print(" Welcome to Hangman Game! ")
print("I am thinking of a word that is",x,"letters long")
print("------------------")
print("You have 6 guesses left")
print ("Available Characters : ", string.ascii_lowercase)
##for y in range(x):
## word = input("enter word: ")
## letters_guessed.append(word)



##print('letters_guessed = ',letters_guessed)


def is_word_guessed(secret_word, letters_guessed):
'''
secret_word: string, the word the user is guessing; assumes all letters are
lowercase
letters_guessed: list (of letters), which letters have been guessed so far;
assumes that all letters are lowercase
returns: boolean, True if all the letters of secret_word are in letters_guessed;
False otherwise
'''
# FILL IN YOUR CODE HERE AND DELETE "pass"
count = 0
for i in secret_word:
if i in letters_guessed:
count += 1
else:
break

if count == int(len(secret_word)):
return True
else:
return False

#print(len(letters_guessed))

##print(is_word_guessed(secret_word, letters_guessed))





def get_guessed_word(secret_word, letters_guessed):
guessed_word = ''

'''
secret_word: string, the word the user is guessing
letters_guessed: list (of letters), which letters have been guessed so far
returns: string, comprised of letters, underscores (_), and spaces that represents
which letters in secret_word have been guessed so far.
'''
# FILL IN YOUR CODE HERE AND DELETE "pass"

for i in secret_word:
if i in letters_guessed:

guessed_word += i
else:
guessed_word += '_'
return guessed_word
##print (get_guessed_word(secret_word, letters_guessed))




def get_available_letters(letters_guessed):



'''
letters_guessed: list (of letters), which letters have been guessed so far
returns: string (of letters), comprised of letters that represents which letters have not
yet been guessed.
'''
# FILL IN YOUR CODE HERE AND DELETE "pass"

available_letters = ''
#alphabets = string.ascii_lowercase 
for n in string.ascii_lowercase:
if n not in letters_guessed:
available_letters += n
return available_letters
##print(get_available_letters(letters_guessed))



def hangman(secret_word):

# FILL IN YOUR CODE HERE AND DELETE "pass"
guesses = 6
guess_count = 0

letters_guessed = list()
wordguessed = False
##is_word_guessed(secret_word, letters_guessed) = False

while (wordguessed is False) and (guesses > 0) :
print ("ini",wordguessed)


x = input(str("Please guess a letter : "))
if x in secret_word:
if x in letters_guessed:

print("you have already guessed it")
##letters_guessed.append(x)
y = get_guessed_word(secret_word, letters_guessed)
print("you have guessed so far:",y)
z = get_available_letters(letters_guessed)
print("you have avaialble:",z)
print("you have",guesses,"left")
##return letters_guessed

else:
letters_guessed.append(x)
k = get_guessed_word(secret_word, letters_guessed)
print("you have guessed so far:",k)
##print("Better luck next time")
n = get_available_letters(letters_guessed)
print("you have avaialble:",n)
print("you have",guesses,"left")

else:
if x in letters_guessed:

print("you have already guessed it")

else:
letters_guessed.append(x)
print(" Better luck next time")

n = get_available_letters(letters_guessed)
print("you have avaialble:",n)
guesses = guesses - 1
print("you have",guesses,"left")
## guesses = guesses - 1

wordguessed = is_word_guessed(secret_word, letters_guessed)
print (wordguessed)
if wordguessed is True:
print(" You have won the game")

elif guesses == 0:
print("you have ran out of guesses:")





print(hangman(secret_word))
Please put your code in Python code tags. You can find help here.
import random
import string

WORDLIST_FILENAME = "words.txt"


def load_words():
    """
    Returns a list of valid words. Words are strings of lowercase letters.
    
    Depending on the size of the word list, this function may
    take a while to finish.
    """
    print("Loading word list from file...")
    # inFile: file
    inFile = open(WORDLIST_FILENAME, 'r')
    # line: string
    line = inFile.readline()
    # wordlist: list of strings
    wordlist = line.split()
    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)

# end of helper code

# -----------------------------------

# Load the list of words into the variable wordlist
# so that it can be accessed from anywhere in the program
wordlist = load_words()
secret_word = choose_word(wordlist)
####letters_guessed = list()
##    #print('you have',guesses_available,'guesses avaialable')
x = int(len(secret_word))
print("secret_word",secret_word)

print(" Welcome to Hangman Game! ")
print("I am thinking of a word that is",x,"letters long")
print("------------------")
print("You have 6 guesses left")
print ("Available Characters : ", string.ascii_lowercase)
##for y in range(x):
##    word = input("enter word: ")
##    letters_guessed.append(word)



##print('letters_guessed = ',letters_guessed)


def is_word_guessed(secret_word, letters_guessed):
    '''
    secret_word: string, the word the user is guessing; assumes all letters are
      lowercase
    letters_guessed: list (of letters), which letters have been guessed so far;
      assumes that all letters are lowercase
    returns: boolean, True if all the letters of secret_word are in letters_guessed;
      False otherwise
    '''
    # FILL IN YOUR CODE HERE AND DELETE "pass"
    count = 0      
    for i in secret_word:
        if i in letters_guessed:
            count += 1
        else:
            break

    if count == int(len(secret_word)):
        return True
    else:
        return False

#print(len(letters_guessed))

##print(is_word_guessed(secret_word, letters_guessed))

    



def get_guessed_word(secret_word, letters_guessed):
    guessed_word = ''    

    '''
    secret_word: string, the word the user is guessing
    letters_guessed: list (of letters), which letters have been guessed so far
    returns: string, comprised of letters, underscores (_), and spaces that represents
      which letters in secret_word have been guessed so far.
    '''
    # FILL IN YOUR CODE HERE AND DELETE "pass"
        
    for i in secret_word:
        if i in letters_guessed:
            
            guessed_word += i
        else:
            guessed_word += '_'
    return guessed_word
##print (get_guessed_word(secret_word, letters_guessed))




def get_available_letters(letters_guessed):
    
  
        
    '''
    letters_guessed: list (of letters), which letters have been guessed so far
    returns: string (of letters), comprised of letters that represents which letters have not
      yet been guessed.
    '''
    # FILL IN YOUR CODE HERE AND DELETE "pass"
    
    available_letters = ''
    #alphabets = string.ascii_lowercase 
    for n in string.ascii_lowercase:
        if n not in letters_guessed:
            available_letters += n
    return available_letters
##print(get_available_letters(letters_guessed))
    
    

def hangman(secret_word):

    # FILL IN YOUR CODE HERE AND DELETE "pass"
    guesses = 6
    guess_count = 0
    
    letters_guessed = list()
    wordguessed = False
    ##is_word_guessed(secret_word, letters_guessed) = False
    
    while (wordguessed is False) and (guesses > 0) :
        print ("ini",wordguessed)
                
                  
        x = input(str("Please guess a letter : "))
        if x in secret_word:
            if x in letters_guessed:
                
                print("you have already guessed it")
                ##letters_guessed.append(x)
                y = get_guessed_word(secret_word, letters_guessed)
                print("you have guessed so far:",y)
                z = get_available_letters(letters_guessed)
                print("you have avaialble:",z)
                print("you have",guesses,"left")
                ##return letters_guessed
                
            else:
                letters_guessed.append(x)
                k = get_guessed_word(secret_word, letters_guessed)
                print("you have guessed so far:",k)
                ##print("Better luck next time")
                n = get_available_letters(letters_guessed)
                print("you have avaialble:",n)
                print("you have",guesses,"left")
                
        else:
            if x in letters_guessed:
                
                print("you have already guessed it")
                
            else:
                letters_guessed.append(x)
                print(" Better luck next time")
                
                n = get_available_letters(letters_guessed)
                print("you have avaialble:",n)
                guesses = guesses - 1
                print("you have",guesses,"left")
               ## guesses = guesses - 1
                
        wordguessed = is_word_guessed(secret_word, letters_guessed)
        print (wordguessed)
    if wordguessed is True:
        print(" You have won the game")
        
    elif guesses == 0:
        print("you have ran out of guesses:")
        
    
        
    
    
        
            

print(hangman(secret_word))
It seems to work ok for me.
Can you tell me which word you put in words.txt, or any other way I can replicate the error you get?