目录
第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)