编写一个程序,从一篇文章里随机取出一个单词,要求用户在有限次数内逐个字母猜测,直到猜到单词中的全部字母或超出次数限制结束游戏。
1. 计算机必须从文本文件中随机选择一个单词并命名为secretWord(本题要求用choice()方法实现),单词可能包含大写和小写字母,为降低猜测难度,你需要将单词转为全部小写字母。
2. 在开始游戏时,用户会得到单词长度为几个字符的提示和有多少次猜测机会的提示。产生一个由下划线与空格构成的字符串cover_word,每组下划线与空格代表一个字母。
3. 游戏是交互式的,用户在每次输入猜测的字母letter时,要先给出提示性的信息再接受输入( input(‘请输入你猜测的字母:\n’))。计算机也会给出相应的响应,如果字母在单词中存在,则在单词的相应位置显示猜中的字母,否则更新猜测次数。
4.当用户猜到了单词中全部字母,或用完所有次数还没猜测出来,游戏结束。
编写函数来完成如下功能:
1. 输入一个“选词”、“模板”、“开始填词”三个字符串之一,根据字符串完成函数调用和输出。
输入其他字符串时,无论输入的随机数种子是什么,都先输出加载单词信息再输出“输入错误 ”。
2. 输入一个整数,作为随机数种子
3. 实现 read_file(file)函数,参数为要读取的文件名,功能是读取文件内容为字符串,用空格替换掉字符串中全部标点、符号,再根据空格切分为一个列表,返回这个列表。
4. 实现secret_word(ls)函数,参数为从文件中读取的单词列表,返回值为随机得到的一个单词。
5. 实现get_guessed_word函数,它接受三个参数:cover_word, secretWord和letter。每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,该字符串基于猜出的字母在secret_word中的位置。
6. 实现word_guess函数,它接受一个参数:secret_word。此函数返回删除了空格的猜测结果字符串。函数中限定允许猜测的次数为单词长度的2倍。若在限定次数内猜中所有字母,输出“你太厉害了,居然只用了i次就猜中了单词“,其中i为实际使用的次数。否则输出“太遗憾了,你未能在n次内猜出单词”,其中n为限定的次数。函数最后输出“秘密单词是:猜中的单词 ”,返回这个猜中的单词。
# ------------ ------- -------- ----------- -----------# @File : 6.4.4 单词猎手游戏.py# @Contact : vasp@qq.com# @Copyright : 2018-2025, Wuhan University of Technology# @Modify Time: 2021/4/27 15:57# @Author : 赵广辉# @Version : 1.0# @License : 仅限用于Python程序设计基础实践教程(赵广辉,高等教育出版社)配套实验# ------------ ------- -------- ----------- -----------import randomdef read_file(file):"""接收一个文件名为参数,读取文件中的内容为字符串类型,替换字符串中的标点和符号为空格,根据空格将字符串切分为单词为元素的列表,返回这个列表。@参数 file:文件名,字符串类型读取文件前先输出'正在从文件加载单词列表...'转为列表后输出输出'成功加载了多少个单词' """print('正在从文件加载单词列表...')with open(file, 'r', encoding='utf-8') as novel:txt = novel.read()symbols = '!"#$%&()*+,-.:;[\'][\"]<=>?@[\\]^_‘{|}~/'for ch in symbols:txt = txt.replace(ch, " ") # 所有符号替换为空格print(f'成功加载{len(txt.split())}个单词')# print(txt.split())return txt.split() # 切分为列表,返回列表def secret_word(ls):"""参数为从文件中读取的单词列表,返回值为随机得到的一个单词。@参数 ls:单词列表,列表类型在测试程序时,可以先预设一个有少数单词的列表,例如随机数种子为19730516时:# >>> ls = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']# >>> secret_word(ls)# 'Monday'"""点击在此输入一行或多行代码def get_guessed_word(cover_word, word, letter):"""接受三个字符串为参数:分别表示正在猜测的遮盖了字母的单词、随机抽取的单词和正在猜测的字母。每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,猜中的字母显示出来,未知字母用"_"表示,字母间留一个空格。返回每次猜测后由字母和下划线组成的字符串。@参数 cover_word:遮盖了字母的单词,字符串类型@参数 word:随机抽取的单词,字符串类型@参数 letter:正在猜测的字母,字符串类型"""点击在此输入一行或多行代码def word_guess(word):"""以随机抽取的秘密单词为参数,参数类型为字符串。@参数 word:随机抽取的秘密单词,字符串类型先输出一个单词长度的提示信息,产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母限制用户最多猜测次数为单词长度的2倍每次猜测并输入一个字母,调用get_guessed_word()函数对猜测进行处理。然后回车换行,并按题目要求进行输出。若去除处理后的单词中的空格后得到的单词与传入参数相同,表示已经猜中了秘密单词。例如秘密单词为'Tuesday',且用户在6次猜测时猜中了单词中的全部字母,此时输出:你太厉害了,居然只用了6次就猜中了单词秘密单词是:Tuesday'"""点击在此输入一行或多行代码def judge(txt):"""接收一个字符串为参数,根据参数值调用不同函数完成任务"""test_seed = int(input())random.seed(test_seed)filename = './gone with the wind.txt' # 文件名wordlist = read_file(filename)secretword = secret_word(wordlist)if txt == '选词': # 输出抽中的单词点击在此输入一行或多行代码elif txt == '模板': # 输出猜词模板,形如:_ _ _ _ _ _点击在此输入一行或多行代码elif txt == '开始填词':word_guess(secretword)else:print('输入错误')if __name__ == '__main__':text = input()judge(text)
