自己用Python写了一个“做题神器”小程序,谁能给帮助加个GUI?
主要特点:
1、每做20道新题,就会返回去复习一下错题,之后再继续往下做新题,再复习;
2、做题时,题库按规定格式用excel导入,做题过程中也定时保存到excel里,程序本身不保存题库内容;
3、多样化的复习标准:初级阶段:上次错、错三次以上、错多于对;高级阶段:只做对过一次的、五天以前做的,总之,对易错题及时复习、反复复习,且分阶段分层次地复习。
目前缺点:Tkinter学不会,缺一个GUI。
欢迎高手帮助,做一个GUI,同时也帮我学习一下tkinter。
import os
import sys
import platform
#pf = platform.system()
#定义个通用的模块导入方法:
try:
import openpyxl
#print("导入%s成功" % openpyxl)
except:
os.system("pip install openpyxl")
import openpyxl
try:
import pandas as pd
except:
os.system("pip install pandas")
import pandas as pd
import datetime
#import time
#打开表格
path = input("请输入题库文件路径(如:D:/test.xlsx): ")
print("请确保格式正确:A序号,B题型,C题干,D答案,E-H选项,J出错次数;K正确次数;L最后正误;M最后做题时间。")
'''
jx = input("是否继续: Y/N ")
if jx = "N":
sys.exit()
else:
break
'''
wb = openpyxl.load_workbook(path)
ws = wb.active
#print(ws)
'''
column = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def cell(a, b):
col = column[a]
row = b
cell = ws['%s%d'% (col, row)].value
return cell
af = cell(2, 1)
print(af)
'''
def cell(col, row):
cell = ws['%s%d'% (col, row)].value
return cell
'''
def cell(CL):
col = CL[0]
row = int(CL[1])
cell = ws['%s%d'% (col, row)].value
return cell
'''
#定义做题方法
def answering(i):
biaoqian = str(ws["B%d"%i].value)
print(biaoqian)
tihao = str(ws["A%d"%i].value)
tigan = ws["C%d"%i].value
print(tihao + "、", end = "")
print(tigan)
A = ws["E%d"%i].value
#print(A)
B = ws["F%d"%i].value
C = ws["G%d"%i].value
D = ws["H%d"%i].value
if (A == None) and (B == None) and (C == None) and (D == None):
print("这是判断题,请用-1表示错、1表示对作答……")
else:
print('A、', end = "")
print(A)
print('B、', end = "")
print(B)
print('C、', end = "")
print(C)
print('D、', end = "")
print(D)
dn = input("请输入你的答案: ")
print("做题进度:%0.2f percent" %((int(i)/int(nrows))*100))
ws["M%d"%i].value = datetime.datetime.now().date()
while dn =='':
dn = input("未作答,请输入你的答案:")
else:
if dn == str(ws["D%d"%i].value):
print("正确!")
ws["L%d"%i].value = 'Rt'
ws["K%d"%i].value = ws["K%d"%i].value
if ws["K%d"%i].value == None:
ws["K%d"%i].value = 1
#wb.save(path)
else:
ws["K%d"%i].value = int(ws["K%d"%i].value) +1
#wb.save(path)
elif dn == "Tui":
wb.save(path)
print("再见!!")
sys.exit()
else:
print("错误!")
print('正确答案是:%s'% ws["D%d"%i].value)
ws["L%d"%i].value = 'Wr'
ws["J%d"%i].value = ws["J%d"%i].value
if ws["J%d"%i].value == None:
ws["J%d"%i].value = 1
#wb.save(path)
else:
ws["J%d"%i].value = int(ws["J%d"%i].value) +1
#wb.save(path)
nrows = ws.max_row
ncols = ws.max_column
#ncols = info.last_cell.column
print("当前题库共同有%d道题……加油!!" % nrows)
#J列:出错次数;K列:正确次数;L列:最后正误;M列:最后做题时间
df = pd.read_excel(path)
#df.info()
rt = df["正确次数"].isnull().sum()
print("当前未做题数为:%d" %rt)
#rt1 = (df["正确次数"]==1).sum()
#print("当前正确次数为1的题有%d道!!" %rt1)
#rt2 = (df["最后做题时间"] < datetime.datetime.now() - datetime.timedelta(days = 5)).sum()
#print("最后做题时间为五天以前的题有%d道!!" % rt2)
rt3 = (df["最后正误"]== "Wr").sum()
if rt3 == 0:
print("没有错题了!")
else:
print("最后一次还有%d道题又做错了!!" % rt3)
def reviewing(i):
for p in range(nrows-1):
if (p>=2) and (ws["J%d"%p].value != None) and (ws["K%d"%p].value != None) and (int(ws["J%d"%p].value) > int(ws["K%d"%p].value)):
print('错多对少:')
answering(p)
p = p +1
#将错题次数大于3次的,再拿出来做一遍
elif (p>=2) and (ws["J%d"%p].value != None) and (ws["K%d"%p].value != None) and (ws["J%d"%p].value>=3) and (ws["K%d"%p].value<(3+ws["J%d"%p].value)):
print('错三次以上:')
answering(p)
p = p +1
#将最后一次做错了的,再拿出来做一遍(L列:最后正误)
elif (p>=2) and (ws["L%d"%p].value == 'Wr'):
print('上次错:')
answering(p)
p = p +1
elif p >= i-1:
#m = m+1
wb.save(path)
break #当复习到新做题时,返回上层循
else:
pass
m = 0
for i in range(nrows-1):
#将所有的题先做一遍,中途退出后再做,之前做对的不重做
while (i >= 2) and (ws["K%d"%i].value ==None):
print('第一次做或一直没做对过:')
answering(i)
i = i+1
m = m+1
print("本次已做%d题!" % m)
if (m % 20 == 0) or (i >= nrows - 2): #每新做20道题就进入复习模式,复习完成后再返回做新题模式。最后无新题可做时再进入复习模式。
wb.save(path)
reviewing(i)
#五天以前的再拿出来做做
for i in range(nrows):
if (i >= 2) and (ws["M%d"%i].value.date() < datetime.datetime.now().date() - datetime.timedelta(days = 5)):
print("五天前的")
answering(i)
i = i+1
m = m+1
print("本次已做%d题!" % m)
if (m % 20 == 0) or (i >= nrows - 2):
wb.save(path)
reviewing(i)
else:
pass
#做对两次以下的再做一遍
def less_than_twice():
m = 0
for i in range(nrows):
if (i >= 2) and (ws["K%d"%i].value <= 2):
print("两遍以下的")
answering(i)
i = i+1
m = m+1
print("本次已做%d题!" % m)
if (m % 20 == 0) or (i >= nrows - 2):
wb.save(path)
reviewing(i)
else:
pass
less_than_twice()
less_than_twice() #魔鬼训练,反复做,查漏补缺
wb.save(path)
print("请让我叫您孤独求败!!青山不改,绿水常流!!咱们后会有期!!")
基本上做成下面这个样子就好!!