前言
目前時間有些不足,等忙完了會再更新此文章,描述對應的演算法或改進程式碼。 當輸出題目時,等待一段時間才會輸出答案,你可以在建構函式中修改對應的值。
一、檔案結構以txt為字尾的文字結構,同指令碼放置在同一個目錄下 需要注意的是每個題目的前面必須含有一個乘號作為標誌(標記只需要含有對應符號就行) 每一個題目下面必須有一個等號,且等號下一行就是答案,答案只能是一行儲存。(之後或許會改進) 注意:檔案結尾不能含有空行或其他的資訊,尾行必須是一個答案的文字
二、程式碼
# 作者:小狐狸# 背題指令碼import timeimport randomclass 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
後記近期有很多朋友透過私信諮詢有關Python學習問題。為便於交流,完整程式碼後臺私信小編01即可