目录
第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)
坚持下去,并不是我们真的足够坚强,而是我们别无选择;不管怎样,不要放弃,明天又是新的一天,一起加油吧!🌼