前言
当输出题目时,等待一段时间才会输出答案,你可以在构造函数中修改对应的值。
一、文件结构
以
txt
为后缀的文本结构,同脚本放置在同一个目录下
需要注意的是每个题目的前面必须含有一个乘号
作为标志(标记只需要含有对应符号就行)
每一个题目下面必须有一个等号
,且等号下一行就是答案,答案只能是一行存储。(之后或许会改进)
注意:文件结尾不能含有空行或其他的信息,尾行必须是一个答案的文本
二、代码
# 作者:小狐狸
# 背题脚本
import time
import random
class FoxRecite(object):
def __init__(self,name):
self.name = name #文件名
self.lis = [] #从文件获取的文本
self.dic = {} #题目及答案,键为题目,值为答案
self.title = "" #考察的题目
self.answer = "" #考察的答案
self.num = 25 #输出时每行的字符个数
self.wait = 5 #输出题目后,等待wait秒输出答案
if ".txt" not in self.name: #若输入的文件名不包含后缀时
self.name += ".txt"
def get(self): #获取题目及答案
with open(f"{self.name}") as fp: #读取文件
self.lis = fp.readlines() #将每行的内容作为列表元素存入
i = 0
while True: #遍历存储的文本信息
if i==len(self.lis): #结束
break
if "*" in self.lis[i]: #遇到*号标记时,表明下一行内容为标题
title = self.lis[i+1] #记录题目
title = title.replace("\n","") #删除换行符
self.dic[title] = ""
i += 2 #跳过*标记及题目
if "=" in self.lis[i]: #遇到=号标记时,表明下一行内容为答案
answer = self.lis[i+1]
answer = answer.replace("\n","") #删除换行符
self.dic[title] = answer
i += 2 #跳过#标记及题目
def choose(self): #随机抽取一个题目
pos = random.randint(1,len(self.dic)) #随机选取的题目位置
num = 1
for i,j in self.dic.items(): #遍历字典
if pos==num: #找到对应位置时
self.title = i
self.answer = j
num += 1
def exam(self): #输出题目进行考察
#对题目添加换行符
i = 0
num = 1
lis = list(self.title)
while i<len(self.title):
if num%self.num==0: #达到换行个数时
lis[i] += "\n"#在对应列表的对应元素添加换行符
num += 1
i += 1
#输出题目
print("《题目》")
print(self.title)
#对答案添加换行符
i = 0
num = 1
lis = list(self.answer)
while i<len(self.answer):
if num%self.num==0: #达到换行个数时
lis[i] += "\n"#在对应列表的对应元素添加换行符
num += 1
i += 1
time.sleep(self.wait) #等待用户做答
#输出答案
print("《答案》")
print("".join(str(i) for i in lis))
if __name__=='__main__':
name = input("请输入文件名:")
f = FoxRecite(name)
f.get() #获取题目、答案信息
while True:
print("-------------------")
print("| 0. 退出 |")
print("| 1. 答题 |")
print("-------------------")
flag = int(input("请选择: "))
if flag==1:
f.choose() #随机抽取题目
f.exam() #进行考察
time.sleep(1) #等待
else:
break