MIT6_0001F16_Pset2
完成Hangman Game的编写,就是一个猜词游戏
# Problem Set 2, hangman.py
# Name: Ding
# Collaborators:
# Time spent:
# Hangman Game
import random #用于随机性抽取单词
import string
WORDLIST_FILENAME = "words.txt" #文件名
def load_words(): #加载txt文件中的单词,并说明单词数量,并返回[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 #返回的是所有单词的列表 --> [words]
def choose_word(wordlist): #返回列表中的一个单词
"""
wordlist (list): list of words (strings)
Returns a word from wordlist at random
"""
#随机地从文本的单词中挑一个
return random.choice(wordlist)
wordlist = load_words() #wordlist为包含所有单词的列表
#用于判断单词中出现的字母是否都被猜过
#如果secret_word中所有组成单词的字母均在letters_guessed中,则返回true
#因此在这里可以直接用循环加in的方法完成判断
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"
for each1 in secret_word: #each1为每一个在secret_word中的字母
if each1 not in letters_guessed: #如果有字母不在已经猜过的字母内,返回False
return False
return True #说明所有的字母都在已经猜过的单词内,故返回True
#将secret_word中的已经猜测的字母显示出来,未猜的字母显示未'_ ' !!注意,这里是下划线加空格
#思路:如果secret_word中的某个字母已经出现,则显示,否则用'_ '代替
# 类似上一题思路,用for循环加in的方式判断即可
def get_guessed_word(secret_word, letters_guessed):
'''
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.
'''
#通过已经猜过的字母确定出现在猜词的样子 例如这样标识“app_ _”
result='' #创建一个新的空字符串,用于存储结果
for each in secret_word: #each是secret_word中出现的所有字母
if each in letters_guessed:
result+=each #如果each已经被猜出,则将其加到result结尾
else:
result+='_ ' #如果each没有被猜出,则在result结尾加上'_ '
return result #返回result结果即可
#这个函数主要是把26个字母中仍旧有可能出现(去掉已经猜过的)的按顺序显示出来
#可以调用 string.ascii_lowercase函数,这个函数将返回 26个小写字母的排序后的序列
#因此只需要把猜过的字母从中去掉即可
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.
'''
#将26个字母(除去已经猜过的字母)顺序输出来
start=string.ascii_lowercase #将start赋值为26个小写字母按顺序排序的序列
result='' #用result存储结果
for each in start: #each表示每一个小写字母
if each in letters_guessed: #如果该小写字母之前已经猜过,则continue
continue
else: #如果该小写字母之前没有猜过,则将其加入result的序列
result+=each
return result #返回result即可
#用vowels存储元音字母
vowels=['a','e','i','o'] #题目说明元音为 a e i o
#返回一个单词中不同的字母数量,用于计分时的辅助函数
def unique_letters(words):
help_string=''
for each in words: