Python-自制背题脚本

前言

当输出题目时,等待一段时间才会输出答案,你可以在构造函数中修改对应的值。

一、文件结构

在这里插入图片描述

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
        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦之海岛

创作不易,狐狸叹气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值