An implementation of ghost
MIT 6.00 homework.
You may download the dictionary from here,
#!/usr/bin/python
# Problem Set 5: Ghost
# Name: CH Chan
# Collaborators: Nil
# Time: An afternoon
#
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.
"""
#STFU print "Loading word list from file..."
# inFile: file
inFile = open(WORDLIST_FILENAME, 'r', 0)
# wordlist: list of strings
wordlist = []
for line in inFile:
wordlist.append(line.strip().lower())
# STFU print " ", len(wordlist), "words loaded."
return wordlist
def isValidWord(wordlist, inputWord):
''' Test for the validity for the word in GhosT
return 0 for OK, return 1 for word, return 2 for broken'''
#test 1: inputWord in wordlist with length < = 3
if inputWord in wordlist:
if len(inputWord) <=3:
return 0
else:
return 1
else:
#test #2: inputWord is a prefix
anymatch = 0
for word in wordlist:
if word.startswith(inputWord): #test #2: inputWord is a prefix
anymatch +=1
if anymatch == 0:
return 2
else:
return 0
def inputValidator():
keepOn = True
while keepOn:
userInput = raw_input()
if len(userInput) > 1:
print 'Too long, please input exactly one character.'
elif userInput not in string.ascii_letters:
print 'Invalid input, please input exactly one character.'
else:
keepOn=False
#process userInput
lowerUserInput = userInput.lower()
return lowerUserInput
# can change the number of players
NUM_PLAYERS = 2
STARTING_PLAYER = 1
def ghost(wordlist):
print 'Welcome to Ghost!'
loser = 0
currentPlayer = STARTING_PLAYER
fragment = ''
print 'Player '+str(currentPlayer)+' goes first...'
while loser == 0:
print 'Player '+str(currentPlayer)+' says letter:'
userInput = inputValidator()
fragment += userInput
validFragment = isValidWord(wordlist,fragment)
if validFragment == 1:
print 'Current word fraqment: '+str(fragment.upper())
loser=currentPlayer
warning='Player '+str(loser)+' loses because '+str(fragment.upper())+' is a word!'
if validFragment == 2:
print 'Current word fraqment: '+str(fragment.upper())
loser=currentPlayer
warning='Player '+str(loser)+' loses because no word begins with '+str(fragment.upper())
if validFragment == 0:
currentPlayer += 1
print 'Current word fraqment: '+str(fragment.upper())
if currentPlayer > NUM_PLAYERS:
currentPlayer = STARTING_PLAYER
print warning
# declare winners
allPlayer = range(1,NUM_PLAYERS+1)
allPlayer.remove(loser)
for winner in allPlayer:
print 'Player '+str(winner)+' wins!'
#main loop
if __name__ == '__main__':
wordlist = load_words()
ghost(wordlist)