python实现:hangman游戏——即猜单词游戏

思路:


实现Hangman 游戏, 将需要代码文件 words.txt。 它将加载到文件中的单词列表中。如果一切正常,经过一小段时间后,您应该看到以下内容:
Loading word list from file...
55909 words loaded.
计算机必须从 words.txt 中提供的可用单词列表中随机选择一个单词。已经为您提供了加载单词列表和选择随机单词的功能。
游戏必须是互动的;游戏的流程应该如下:
· 在游戏开始时,让用户知道计算机单词包含多少个字母。
· 要求用户每轮提供一次猜测(即字母)。
· 用户应在每次猜测后立即收到反馈,询问他们的猜测是否出现在计算机的单词中。
· 每轮之后,您还应该向用户显示到目前为止已经部分猜到的单词,以及用户尚未猜到的字母。
一些额外的游戏规则:
· 允许用户进行 8 次猜测。务必提醒用户每轮后他/她留下了多少猜测。
· 假设玩家一次只能提交一个角色( A-Z)。
· 用户仅在他/她猜错时才会丢失猜测。
· 如果用户两次猜出相同的字母,请不要猜测 - 而是打印一条消息,让他们知道他们已经猜到了那封信并要求他们再试一次。
· 当用户构造完整的单词或用完猜测时,游戏应该结束。如果玩家没有猜测(他
/她“输了”),则在游戏结束时向用户显示该单词。

代码如下:


def isWordGuessed(secretWord, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: boolean, True if all the letters of secretWord are in lettersGuessed;
      False otherwise
    '''

    set1 = set(secretWord)
    set2 = set(lettersGuessed)
    if set1 <= set2:
        return True
    else:
        return False


def getGuessedWord(secretWord, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: string, comprised of letters and underscores that represents
      what letters in secretWord have been guessed so far.
    '''

    str1 = ""
    for i in range(len(secretWord)):
        str1 += "_ "
    ls = str1.split(" ")
    str1 = ""
    for it in lettersGuessed:
        if it in secretWord:
            ls[secretWord.index(it)] = it
            try:
                ls[secretWord.index(it,secretWord.index(it)+1)] = it
                ls[secretWord.index(it,secretWord.index(it)+1)] = it
                ls[secretWord.index(it,secretWord.index(it)+1)] = it
            except:
                pass

    for item in ls:
        str1 += item
        if item == "_":
            str1 += " "
    return str1

import string
def getAvailableLetters(lettersGuessed):
    '''
    lettersGuessed: list, what letters have been guessed so far
    returns: string, comprised of letters that represents what letters have not
      yet been guessed.
    '''

    str1 = string.ascii_lowercase
    ls = list(str1)
    for i in lettersGuessed:
        if i in ls:
            ls.remove(i)
    return "".join(ls)


import random
WORDLIST_FILENAME = "words.txt"
def loadWords():
    """
    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 = open(WORDLIST_FILENAME, 'r')
    line = inFile.readline()
    wordlist = line.split()
    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)

def hangman(secretWord):
    '''
    secretWord: string, the secret word to guess.

    Starts up an interactive game of Hangman.

    * At the start of the game, let the user know how many 
      letters the secretWord contains.

    * Ask the user to supply one guess (i.e. letter) per round.

    * The user should receive feedback immediately after each guess 
      about whether their guess appears in the computers word.

    * After each round, you should also display to the user the 
      partially guessed word so far, as well as letters that the 
      user has not yet guessed.

    Follows the other limitations detailed in the problem write-up.
    '''
    # FILL IN YOUR CODE HERE...
    print("Welcome to the game,Hangman!")
    print("I am thinking of a word that is {} letters long.".format(len(secretWord)))
    mistakesMade = 0
    lettersGuessed = ""
    while not isWordGuessed(secretWord, lettersGuessed) and (8-mistakesMade):
        print("*"*10)
        print("You have {} guesses left.".format(8-mistakesMade))
        print("Available letters: ",getAvailableLetters(lettersGuessed))
        a = input("Please guess a letter: ")
        if a in lettersGuessed:
            print("Oops! You've already guessed that letter: ",getGuessedWord(secretWord, lettersGuessed))
        else:
            lettersGuessed += a
            if a in secretWord:
                print("Good guess:",getGuessedWord(secretWord, lettersGuessed))
            else:
                print("Oops! That letter is not in my word:",getGuessedWord(secretWord, lettersGuessed))
                mistakesMade += 1
    print("*"*10)
    if isWordGuessed(secretWord, lettersGuessed):
        print("Congratulations, you won!")
    elif mistakesMade == 8:
        print("Sorry, you ran out of guesses. The word was {}.".format(secretWord))
    return 

wordlist = loadWords()
secretWord = chooseWord(wordlist).lower()
hangman(secretWord)






你可以自己运行一下,很有意思,就是不太容易猜出这个单词,因为它完全是随机的,长度也是随机的,如果你英语水平不错的话,单词量比较大,应该还是可以猜出来的。

 

 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值