5.6 单词猎手游戏(已更新)

目录

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

 第2关 猜测目标单词

第3关 单词猎手游戏


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

本关任务:编写一个能根据输入的字母推测目标单词的小程序。

代码如下

import random


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

    # 将所有符号替换为空格
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    for i in symbols:
        if i in txt:
            txt = txt.replace(i, " ")
    #####################End#####################################

    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'
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
  
    return random.choice(ls)

    #####################End#####################################

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关 猜测目标单词

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

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关 单词猎手游戏

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)

坚持下去,并不是我们真的足够坚强,而是我们别无选择;不管怎样,不要放弃,明天又是新的一天,一起加油吧!🌼

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值