自己用Python写了一个“做题神器”小程序,谁能给帮助加个GUI?

自己用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("请让我叫您孤独求败!!青山不改,绿水常流!!咱们后会有期!!")

基本上做成下面这个样子就好!!

 

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值