国科大python期末综合练习hangman代码

您所在的位置:网站首页 hangman游戏java 国科大python期末综合练习hangman代码

国科大python期末综合练习hangman代码

2023-08-09 02:48| 来源: 网络整理| 查看: 265

这份代码是我昨天晚上(2021/5/22)写的,如有纰漏,多多包涵。

游戏要求:

1、计算机从单词表中随机地选取一个单词,实现这一点的代码已经提供在文件中。 2、游戏是交互式的,游戏的流程如下: • 刚开始时,让用户知道单词的长度(即secretWord的长度) • 每一轮让用户猜一次(一个字母) • 用户能得到立即反馈,所猜字母是否是secret单词的字母 • 每一轮,需要显示已经猜中的部分,以及用户没有猜过的字母 3.游戏的额外规则: 用户可以猜8次. 每一轮猜测后提醒他剩余多少次可猜。假设用户总是每 次输入一个字母 (A-Z)。 当用户错误猜测时,猜测次数减少1次。 如果用户重复猜了已经猜过的字母,猜测次数不减,提醒他这个字母已经猜过了,并继续猜测。 如果用户猜过的字母拼出了那个单词,游戏结束。如果用户用完猜测次数(未猜中单词),游戏结束并揭示秘密单词。

样例(注:有两类,仔细看哦,对写代码有好处)

赢了游戏应如下显示:

*Loading word list from file... 55900 words loaded. Welcome to the game, Hangman! I am thinking of a word that is 4 letters long. ------------- You have 8 guesses left. Available letters: abcdefghijklmnopqrstuvwxyz Please guess a letter: a Good guess: _ a_ _ ------------ You have 8 guesses left. Available letters: bcdefghijklmnopqrstuvwxyz Please guess a letter: a Oops! You've already guessed that letter: _ a_ _ ------------ You have 8 guesses left. Available letters: bcdefghijklmnopqrstuvwxyz Please guess a letter: s Oops! That letter is not in my word: _ a_ _ ------------ You have 7 guesses left. Available letters: bcdefghijklmnopqrtuvwxyz Please guess a letter: t Good guess: ta_ t ------------ You have 7 guesses left. Available letters: bcdefghijklmnopqruvwxyz Please guess a letter: r Oops! That letter is not in my word: ta_ t ------------ You have 6 guesses left. Available letters: bcdefghijklmnopquvwxyz Please guess a letter: m Oops! That letter is not in my word: ta_ t ------------ You have 5 guesses left. Available letters: bcdefghijklnopquvwxyz Please guess a letter: c Good guess: tact ------------ Congratulations, you won!*

输了游戏如下显示:

*Loading word list from file... 55900 words loaded. Welcome to the game Hangman! I am thinking of a word that is 4 letters long ----------- You have 8 guesses left Available Letters: abcdefghijklmnopqrstuvwxyz Please guess a letter: a Oops! That letter is not in my word _ _ _ _ ----------- You have 7 guesses left Available Letters: bcdefghijklmnopqrstuvwxyz Please guess a letter: b Oops! That letter is not in my word _ _ _ _ ----------- You have 6 guesses left Available Letters: cdefghijklmnopqrstuvwxyz Please guess a letter: c Oops! That letter is not in my word _ _ _ _ ----------- You have 5 guesses left Available Letters: defghijklmnopqrstuvwxyz Please guess a letter: d Oops! That letter is not in my word _ _ _ _ ----------- You have 4 guesses left Available Letters: efghijklmnopqrstuvwxyz Please guess a letter: e Good guess: e_ _ e ----------- You have 4 guesses left Available Letters: fghijklmnopqrstuvwxyz Please guess a letter: f Oops! That letter is not in my word e_ _ e ----------- You have 3 guesses left Available Letters: ghijklmnopqrstuvwxyz Please guess a letter: g Oops! That letter is not in my word e_ _ e ----------- You have 2 guesses left Available Letters: hijklmnopqrstuvwxyz Please guess a letter: h Oops! That letter is not in my word e_ _ e ----------- You have 1 guesses left Available Letters: ijklmnopqrstuvwxyz Please guess a letter: i Oops! That letter is not in my word e_ _ e ----------- Sorry, you ran out of guesses. The word was else.* 需要完成下列三个辅助函数:

1、 函数isWordGuessed (secretWord, lettersGuessed), 它有2个参数:一个字符串secretWord, 一个字符列表lettersGuessed。函数返回逻辑值 ,如果 secretWord 已经被猜中 (ie, secretWord 中的所有字母都在lettersGuessed)返回True ,否则返回 False 。假设secretWord 与 lettersGuessed 都是小写字母。(注:这个函数我没用到) 例如:

>>> secretWord = 'apple' >>> lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's'] >>> print (isWordGuessed(secretWord, lettersGuessed)) False

2、 函数getGuessedWord (secretWord, lettersGuessed),它有2个输入参数:一个字符串secretWord,一个字母列表lettersGuessed。函数返回一个字符串,该返回串由字母与下划线组成,内容取决于lettersGuessed 中的字母是否是 secretWord的字母. 这个函数不应该与前面编写的代码isWordGuessed相差太大。 当在字符串中加入下划线时,要在后面加至少一个空格,这样用户看还有多少个字母未猜中会更清楚 (比较一下形式 __ 与 _ _ _ _ )。 假设 secretWord 和lettersGuessed 都是小写字母。 例如:

>>> secretWord = 'apple' >>> lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's'] >>> print getGuessedWord(secretWord, lettersGuessed) '_ pp_ e'

3、 函数getAvailableLetters (lettersGuessed),它接受一个输入参数:一个字母列表lettersGuessed。函数返回所有没有被猜测过(即不在lettersGuessed中)的小写字母按字母顺序组成的字符串。 假设lettersGuessed中的字母都是小写的。 例如:

lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's'] >>> print getAvailableLetters(lettersGuessed) Abcdfghjlmnoqtuvwxyz 最后要完成的函数hangman:

hangman(secretWord),它有一个输入参数:用户需要去猜测的单词 secretWord(后续程序用到的变量名)。由它开始游戏程序Hangman用户与计算机的交互过程。确保你用到之前部分设计完成的辅助函数isWordGuessed、etGuessedWord和 getAvailableLetters。 使用函数 lower() 来将用户的输入转换为小写。 有4个重要的信息需要保存: (1) secretWord:猜测的目标单词 (2) lettersGuessed:追踪用户猜测过的字母 (3) mistakesMade:记录用户猜测错误的次数 (4) availableLetters:还可以用来被猜测的字母,用户猜测过的字母需要从availableLetters移除,用户重复猜了的字母,你需要告知用户你已经猜过这个字母。

代码如下:

# Hangman game # # ----------------------------------- # Helper code # You don't need to understand this helper code, # but you will have to know how to use the functions # (so be sure to read the docstrings!) import random import string 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: file inFile = open(WORDLIST_FILENAME, 'r', -1) # line: string line = inFile.readline() # wordlist: list of strings 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) # end of helper code # ----------------------------------- # Load the list of words into the variable wordlist # so that it can be accessed from anywhere in the program wordlist = loadWords() 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 ''' # FILL IN YOUR CODE HERE... for i in secretWord: if i in lettersGuessed: pass else: return False return True 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. ''' # FILL IN YOUR CODE HERE... s = [] for i in range(len(secretWord)): s.append('_ ') for i in lettersGuessed: for j in range(len(secretWord)): if i == secretWord[j]: s[j] = i return s #保留每次迭代得到的结果列表 def listt(j,s): for i in range(len(s)): if j [i] == '_ ' and j[i] != s[i]: j[i] = s[i] return j 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. ''' # FILL IN YOUR CODE HERE... a = 'abcdefghijklmnopqrstuvwxyz' a = list(a) for i in lettersGuessed: a.remove(i) return ''.join(a) 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... j = [] for i in range(len(secretWord)): j.append('_ ') print('Welcome to the game Hangman!') print('I am thinking of a word that is %d letters long'%(len(secretWord))) print('-----------') t = list(secretWord) num = 8 lettersGuessed = [] while num > 0: print('You have %d guesses left'%(num)) num -= 1 print('Available Letters:',end = '') print(getAvailableLetters(lettersGuessed)) print('Please guess a letter: ',end = '') alp = input() if alp in lettersGuessed: print('Oops! You have already guessed that letter: %s'%(''.join(j))) else: lettersGuessed.append(alp) if alp in secretWord: print('Good guess: %s' % (''.join(listt(j, getGuessedWord(secretWord, lettersGuessed))))) else: print('Oops! That letter is not in my word: %s' % (''.join(j))) j = listt(j,getGuessedWord(secretWord, lettersGuessed)) print('----------------------') if list(secretWord) == j: print('Congratulations, you won!') return ''.join(listt(j,getGuessedWord(secretWord, lettersGuessed))) print('Sorry, you ran out of guesses. The word was else.') return secretWord # When you've completed your hangman function, uncomment these two lines # and run this file to test! (hint: you might want to pick your own # secretWord while you're testing) secretWord = chooseWord(wordlist).lower() hangman(secretWord)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3