May-31-2018, 06:20 PM
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))
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))