编写一个程序,从一篇文章里随机取出一个单词,要求用户在有限次数内逐个字母猜测,直到猜到单词中的全部字母或超出次数限制结束游戏。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    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为限定的次数。函数最后输出“秘密单词是:猜中的单词 ”,返回这个猜中的单词。

    1. # ------------ ------- -------- ----------- -----------
    2. # @File : 6.4.4 单词猎手游戏.py
    3. # @Contact : vasp@qq.com
    4. # @Copyright : 2018-2025, Wuhan University of Technology
    5. # @Modify Time: 2021/4/27 15:57
    6. # @Author : 赵广辉
    7. # @Version : 1.0
    8. # @License : 仅限用于Python程序设计基础实践教程(赵广辉,高等教育出版社)配套实验
    9. # ------------ ------- -------- ----------- -----------
    10. import random
    11. def read_file(file):
    12. """接收一个文件名为参数,读取文件中的内容为字符串类型,
    13. 替换字符串中的标点和符号为空格,根据空格将字符串切分为单词为元素的列表,
    14. 返回这个列表。
    15. @参数 file:文件名,字符串类型
    16. 读取文件前先输出'正在从文件加载单词列表...'
    17. 转为列表后输出输出'成功加载了多少个单词' """
    18. print('正在从文件加载单词列表...')
    19. with open(file, 'r', encoding='utf-8') as novel:
    20. txt = novel.read()
    21. symbols = '!"#$%&()*+,-.:;[\'][\"]<=>?@[\\]^_‘{|}~/'
    22. for ch in symbols:
    23. txt = txt.replace(ch, " ") # 所有符号替换为空格
    24. print(f'成功加载{len(txt.split())}个单词')
    25. # print(txt.split())
    26. return txt.split() # 切分为列表,返回列表
    27. def secret_word(ls):
    28. """参数为从文件中读取的单词列表,返回值为随机得到的一个单词。
    29. @参数 ls:单词列表,列表类型
    30. 在测试程序时,可以先预设一个有少数单词的列表,例如随机数种子为19730516时:
    31. # >>> ls = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    32. # >>> secret_word(ls)
    33. # 'Monday'
    34. """
    35. 点击在此输入一行或多行代码
    36. def get_guessed_word(cover_word, word, letter):
    37. """接受三个字符串为参数:分别表示正在猜测的遮盖了字母的单词、随机抽取的单词和正在猜测的字母。
    38. 每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,猜中的字母显示出来,未知字母用"_"
    39. 表示,字母间留一个空格。返回每次猜测后由字母和下划线组成的字符串。
    40. @参数 cover_word:遮盖了字母的单词,字符串类型
    41. @参数 word:随机抽取的单词,字符串类型
    42. @参数 letter:正在猜测的字母,字符串类型
    43. """
    44. 点击在此输入一行或多行代码
    45. def word_guess(word):
    46. """以随机抽取的秘密单词为参数,参数类型为字符串。
    47. @参数 word:随机抽取的秘密单词,字符串类型
    48. 先输出一个单词长度的提示信息,产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    49. 限制用户最多猜测次数为单词长度的2倍
    50. 每次猜测并输入一个字母,调用get_guessed_word()函数对猜测进行处理。
    51. 然后回车换行,并按题目要求进行输出。
    52. 若去除处理后的单词中的空格后得到的单词与传入参数相同,表示已经猜中了秘密单词。
    53. 例如秘密单词为'Tuesday',且用户在6次猜测时猜中了单词中的全部字母,此时输出:
    54. 你太厉害了,居然只用了6次就猜中了单词
    55. 秘密单词是:Tuesday
    56. '"""
    57. 点击在此输入一行或多行代码
    58. def judge(txt):
    59. """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    60. test_seed = int(input())
    61. random.seed(test_seed)
    62. filename = './gone with the wind.txt' # 文件名
    63. wordlist = read_file(filename)
    64. secretword = secret_word(wordlist)
    65. if txt == '选词': # 输出抽中的单词
    66. 点击在此输入一行或多行代码
    67. elif txt == '模板': # 输出猜词模板,形如:_ _ _ _ _ _
    68. 点击在此输入一行或多行代码
    69. elif txt == '开始填词':
    70. word_guess(secretword)
    71. else:
    72. print('输入错误')
    73. if __name__ == '__main__':
    74. text = input()
    75. judge(text)