计算机科学和编程导论
Week3
ps3_hangman.py
________________________________________________________________
import random
import string
WORDLIST_FILENAME = "words.txt"
def loadWords():#调用字典
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 chooseWord(wordlist):#选择单词
"""
wordlist (list): list of words (strings)
Returns a word from wordlist at random
"""
return random.choice(wordlist)
# end of helper code
# -----------------------------------
wordlist = loadWords()
def isWordGuessed(secretWord, lettersGuessed):#单词是否在列表
for i in secretWord:#单词在输入列表
if i not in lettersGuessed:#单词不再在选择列表
return False#返回False
return True#返回True
#-----------------------------------
def getGuessedWord(secretWord, lettersGuessed):#返回单词猜测状态指示
txt = ''#返回的单词指示
for i in secretWord:#单词在输入列表
if i in lettersGuessed:#单词在列表
txt = txt + ' ' + i#加入txt
else:
txt = txt + ' _ '#输出’_’
return txt#返回txt
#-----------------------------------
def getAvailableLetters(lettersGuessed):#列表指示
bz = 'abcdefghijklmnopqrstuvwxyz'#默认字符
txt = ''#返回的列表指示 for i in bz:#单词在默认字符
if i not in lettersGuessed:#单词不在列表
txt += i#加入列表指示
return txt#返回txt
#-----------------------------------
def hangman(secretWord):#游戏主体
lettersGuessed = []#列表
mistakesMade = 8#猜测次数
print 'welcome to the game, Hangman!'
print 'I am thinking of a word that is ',len(secretWord),' letters long.'
print '----------'
while mistakesMade > 0.01 and not isWordGuessed(secretWord, lettersGuessed):
#当猜测次数大于0 和 not true状态下(小于0游戏结束)
print 'You have ',str(mistakesMade),' guesses left.'
print 'Available letters:',getAvailableLetters(lettersGuessed)
guess = raw_input('Please guess a letter:').lower()
#猜测开始(.lower())为小写
if guess in lettersGuessed:
print "Oops! You've already guessed that letter:", getGuessedWord(secretWord, lettersGuessed)
#猜测的单词在列表里,提示重复猜测,调用getGuessedWord返回单词猜测状态指示
else:
if guess in secretWord:
lettersGuessed.append(guess)
print 'Good guess:', getGuessedWord(secretWord, lettersGuessed)
#猜测的单词在正确词语,将猜测的单词加入列表,调用getGuessedWord返回单词猜测状态指示
else:
lettersGuessed.append(guess)
mistakesMade -= 1
print 'Oops! That letter is not in my word:', getGuessedWord(secretWord, lettersGuessed)
#猜测的单词不在正确词语,将猜测的单词加入列表,猜测次数-1,调用getGuessedWord返回单词猜测状态指示
print '----------'
if mistakesMade > 0.01:
print 'Congratulations, you won!'
else:
print 'Sorry, you ran out of guesses. The word was else.'
#猜测结束后,猜测次数大于0下,返回成功,否则返回失败
#-----------------------------------
secretWord = chooseWord(wordlist).lower()
hangman(secretWord)