Python Forum
Please help me with my code
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Please help me with my code
#1
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))
Reply
#2
Please put your code in Python code tags. You can find help here.
Reply
#3
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))
Reply
#4
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?
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020