编写一个程序,从一篇文章里随机取出一个单词,要求用户在有限次数内逐个字母猜测,直到猜到单词中的全部字母或超出次数限制结束游戏。
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 random
def 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)