湖北师范大学-Python程序设计-5.6 单词猎手游戏(project)

目录

第1关:字符串、列表随机取值

第2关:猜测目标单词

第3关:单词猎手游戏


第1关:字符串、列表随机取值


编程要求
根据提示,在右侧编辑器补充代码。
本项目文件下载:gone with the wind.txt
输入一个整数,作为随机数种子
实现 read_file(file)函数,参数为要读取的文件名,功能是读取文件内容为字符串,用空格替换掉字符串中全部标点、符号,再根据空格切分为一个列表,返回这个列表。
实现secret_word(ls)函数,参数为从文件中读取的单词列表,返回值为随机得到的一个单词。

测试说明
平台会对你编写的代码进行测试:

测试输入1:

2021
预期输出1:

正在从文件加载单词列表...
成功加载424122个单词
trash
测试输入2:

9999
预期输出2:

正在从文件加载单词列表...
成功加载424122个单词
know
开始你的任务吧,祝你成功!

import random

def read_file(file):
    """接收一个文件名为参数,读取文件中的内容为字符串类型,
    替换字符串中的标点和符号为空格,根据空格将字符串切分为单词为元素的列表,
    返回这个列表。
    @参数 file:文件名,字符串类型
    读取文件前先输出'正在从文件加载单词列表...'
    转为列表后输出输出'成功加载了多少个单词' """
    print('正在从文件加载单词列表...')
    with open(file, 'r', encoding='utf-8') as novel:
        txt = novel.read()
    symbols = '!"#$%&()*+,-.:;[\'][\"]<=>?@[\\]^_‘{|}~/'   #标点、符号 字符串
    # 补充你的代码,将所有符号替换为空格
    for x in symbols:
        txt=txt.replace(x," ")


    print(f'成功加载{len(txt.split())}个单词')
    return txt.split()  # 切分为列表,返回列表

def secret_word(ls):
    """参数为从文件中读取的单词列表,返回值为随机得到的一个单词。
    @参数 ls:单词列表,列表类型
    在测试程序时,可以先预设一个有少数单词的列表,例如随机数种子为19730516时:
    # >>> ls = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    # >>> secret_word(ls)
    # 'Monday'
    """
    # 补充你的代码
    return(random.choice(ls))


if __name__ == '__main__':
    test_seed = int(input())
    random.seed(test_seed)
    filename = 'data/gone with the wind.txt'  # 文件名
    wordlist = read_file(filename)
    secretword = secret_word(wordlist)
    print(secretword)

第2关:猜测目标单词

编程要求
根据提示,在右侧编辑器补充代码,实现 get_guessed_word 函数,它接受三个参数: cover_word ,  secretWord 和 letter 。每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,该字符串基于猜出的字母在 secret_word 中的位置。

测试说明
平台会对你编写的代码进行测试:

测试输入1:

felling
预期输出1:

单词长度为7
_ _ _ _ _ _ _ 
当前是第1次猜测,你还有13次机会
请输入你猜测的字母:a
当前猜测结果为:_ _ _ _ _ _ _ 
当前是第2次猜测,你还有12次机会
请输入你猜测的字母:e
当前猜测结果为:_ e _ _ _ _ _ 
当前是第3次猜测,你还有11次机会
请输入你猜测的字母:l
当前猜测结果为:_ e l l _ _ _ 
当前是第4次猜测,你还有10次机会
请输入你猜测的字母:g
当前猜测结果为:_ e l l _ _ g 
当前是第5次猜测,你还有9次机会
请输入你猜测的字母:i
当前猜测结果为:_ e l l i _ g 
当前是第6次猜测,你还有8次机会
请输入你猜测的字母:n
当前猜测结果为:_ e l l i n g 
当前是第7次猜测,你还有7次机会
请输入你猜测的字母:f
当前猜测结果为:f e l l i n g 
你太厉害了,居然只用了7次就猜中了单词
秘密单词是:felling
测试输入2:

abc
预期输出2:

单词长度为3
_ _ _ 
当前是第1次猜测,你还有5次机会
请输入你猜测的字母:c
当前猜测结果为:_ _ c 
当前是第2次猜测,你还有4次机会
请输入你猜测的字母:b
当前猜测结果为:_ b c 
当前是第3次猜测,你还有3次机会
请输入你猜测的字母:d
当前猜测结果为:_ b c 
当前是第4次猜测,你还有2次机会
请输入你猜测的字母:a
当前猜测结果为:a b c 
你太厉害了,居然只用了4次就猜中了单词
秘密单词是:abc


def get_guessed_word(cover_word, word, letter):
    """接受三个字符串为参数:分别表示正在猜测的遮盖了字母的单词、随机抽取的单词和正在猜测的字母。
    每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,猜中的字母显示出来,未知字母用"_"
    表示,字母间留一个空格。返回每次猜测后由字母和下划线组成的字符串。
    @参数 cover_word:遮盖了字母的单词,字符串类型
    @参数 word:随机抽取的单词,字符串类型
    @参数 letter:正在猜测的字母,字符串类型
    """
    # 补充你的代码
    for i in range(len(word)):
        if letter==word[i]:
            cover_word = cover_word[:i*2]+ letter +" "+cover_word[(i+1)*2:]#空格也占了一个所以乘2

    
    print(f'当前猜测结果为:{cover_word}')
    return cover_word



if __name__ == '__main__':
    word = input()
    print(f'单词长度为{len(word)}')  # 先提示用户单词长度
    cover_word = '_ ' * len(word)  # 产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    print(cover_word)
    for i in range(1, 2 * len(word) + 1):  # 最多猜测2倍字母数次
        print(f'当前是第{i}次猜测,你还有{2 * len(word) - i}次机会')
        letter = input('请输入你猜测的字母:')  # 输入猜测的字母
        cover_word = get_guessed_word(cover_word, word, letter)
        guess_word = cover_word.replace(' ', '')
        if guess_word == word:  # 替换字符串中的空格,查看是否猜中
            print(f'你太厉害了,居然只用了{i}次就猜中了单词')
            print(f'秘密单词是:{guess_word}')  # 猜中后输出时去掉单词中的空格
            break

第3关:单词猎手游戏

编程要求
根据提示,在右侧编辑器补充代码

输入一个“选词”、“模板”、“开始填词”三个字符串之一,根据字符串完成函数调用和输出。输入其他字符串时,无论输入的随机数种子是什么,都先输出加载单词信息再输出“输入错误 ”。

输入一个整数,作为随机数种子

实现 read_file(file) 函数,参数为要读取的文件名,功能是读取文件内容为字符串,用空格替换掉字符串中全部标点、符号,再根据空格切分为一个列表,返回这个列表。

实现 secret_word(ls) 函数,参数为从文件中读取的单词列表,返回值为随机得到的一个单词。

实现 get_guessed_word 函数,它接受三个参数:cover_word , word 和 letter 。每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,该字符串基于猜出的字母在 secret_word 中的位置,返回每次猜测后由字母和下划线组成的字符串。

实现 word_guess 函数,它接受一个参数:secret_word 。此函数返回删除了空格的猜测结果字符串。函数中限定允许猜测的次数为单词长度的2倍。若在限定次数内猜中所有字母,输出“你太厉害了,居然只用了i次就猜中了单词“,其中i为实际使用的次数。否则输出“太遗憾了,你未能在n次内猜出单词”,其中n为限定的次数。函数最后输出“秘密单词是:猜中的单词 ”,返回这个猜中的单词。

测试说明
平台会对你编写的代码进行测试:

测试输入:

选词
2021
预期输出:

正在从文件加载单词列表...
成功加载424122个单词
trash
测试输入:

模板
2021
预期输出:

正在从文件加载单词列表...
成功加载424122个单词
_ _ _ _ _ 
测试输入:

开始填词
2021
a
s
t
h
r
预期输出:

正在从文件加载单词列表...
成功加载424122个单词
单词长度为5
_ _ _ _ _ 
当前是第1次猜测,你还有9次机会
请输入你猜测的字母:a
当前猜测结果为:_ _ a _ _ 
当前是第2次猜测,你还有8次机会
请输入你猜测的字母:s
当前猜测结果为:_ _ a s _ 
当前是第3次猜测,你还有7次机会
请输入你猜测的字母:t
当前猜测结果为:t _ a s _ 
当前是第4次猜测,你还有6次机会
请输入你猜测的字母:h
当前猜测结果为:t _ a s h 
当前是第5次猜测,你还有5次机会
请输入你猜测的字母:r
当前猜测结果为:t r a s h 
你太厉害了,居然只用了5次就猜中了单词
秘密单词是:trash
开始你的任务吧,祝你成功!

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'
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    word = random.choice(ls)
    return word
    #####################End#####################################
 
 
def get_guessed_word(cover_word, word, letter):
    """接受三个字符串为参数:分别表示正在猜测的遮盖了字母的单词、随机抽取的单词和正在猜测的字母。
    每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,猜中的字母显示出来,未知字母用"_"
    表示,字母间留一个空格。返回每次猜测后由字母和下划线组成的字符串。
    @参数 cover_word:遮盖了字母的单词,字符串类型
    @参数 word:随机抽取的单词,字符串类型
    @参数 letter:正在猜测的字母,字符串类型
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    for i in range(len(word)):
        if letter == word[i]:
            cover_word = cover_word[:2*i] + letter + " " + cover_word[2*(i+1):]
    #####################End#####################################
    print(f'当前猜测结果为:{cover_word}')
    return cover_word
def word_guess(word):
    """以随机抽取的秘密单词为参数,参数类型为字符串。
    @参数 word:随机抽取的秘密单词,字符串类型
    先输出一个单词长度的提示信息,产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    限制用户最多猜测次数为单词长度的2倍
    每次猜测并输入一个字母,调用get_guessed_word()函数对猜测进行处理。
    然后回车换行,并按题目要求进行输出。
    若去除处理后的单词中的空格后得到的单词与传入参数相同,表示已经猜中了秘密单词。
    例如秘密单词为'Tuesday',且用户在6次猜测时猜中了单词中的全部字母,此时输出:
    你太厉害了,居然只用了6次就猜中了单词
    秘密单词是:Tuesday
    '"""
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    print(f'单词长度为{len(word)}')  # 先提示用户单词长度
    cover_word = '_ ' * len(word)  # 产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    print(cover_word)
    for i in range(1, 2 * len(word) + 1):  # 最多猜测2倍字母数次
        print(f'当前是第{i}次猜测,你还有{2 * len(word) - i}次机会')
        letter = input('请输入你猜测的字母:')  # 输入猜测的字母
        cover_word = get_guessed_word(cover_word, word, letter)
        guess_word = cover_word.replace(' ', '')
        if guess_word == word:  # 替换字符串中的空格,查看是否猜中
            print(f'你太厉害了,居然只用了{i}次就猜中了单词')
            print(f'秘密单词是:{guess_word}')  # 猜中后输出时去掉单词中的空格
            return guess_word
    else:
        print(f'太遗憾了,你未能在{2 * len(word)}次内猜出单词')
        return cover_word
 
    #####################End#####################################
 
def judge(txt):
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    test_seed = int(input())
    random.seed(test_seed)
    filename = 'data/gone with the wind.txt'  # 文件名
    wordlist = read_file(filename)
    secretword = secret_word(wordlist)
    if txt == '选词':       # 输出抽中的单词
        #####################Begin#####################################
        # 此处去掉注释符号“#”并补充你的代码
        print(secretword)
        #####################End#####################################
    elif txt == '模板':     # 输出猜词模板,形如:_ _ _ _ _ _
        #####################Begin#####################################
        # 此处去掉注释符号“#”并补充你的代码
        print('_ ' * len(secretword))
        #####################End#####################################
    elif txt == '开始填词':
        word_guess(secretword)
    else:
        print('输入错误')
 
 
if __name__ == '__main__':
    text = input()
    judge(text)

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值