MIT6_0001F16_Pset2

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:
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值