diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 494e6394613b15af79a4cc3729146a401800c882..c0636f53020ef3b366654f8bf092fa7d75494c34 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -3,8 +3,9 @@
+
+
-
@@ -18,19 +19,18 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
@@ -79,7 +79,30 @@
print(
print
raise
+ min_label
+ filter_entry
+ rb
+ t3
+ add
+ mult
+
+ add1_label
+ add2_label
+ add3_label
+ add1_entry
+ add3_entry
+ add4_entry
+ add
+ sub
+ mult
+ multistep
+ sub1
+ subattrs
+ mult1
+ multattrs
+ div
+
@@ -91,15 +114,15 @@
-
-
+
+
@@ -148,8 +171,8 @@
-
+
@@ -174,7 +197,7 @@
-
+
@@ -279,9 +302,9 @@
-
-
-
+
+
+
@@ -305,6 +328,7 @@
+
@@ -312,11 +336,11 @@
-
+
-
+
@@ -363,7 +387,7 @@
-
+
@@ -592,13 +616,6 @@
-
-
-
-
-
-
-
@@ -606,13 +623,6 @@
-
-
-
-
-
-
-
@@ -622,13 +632,6 @@
-
-
-
-
-
-
-
@@ -668,10 +671,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -680,10 +711,9 @@
-
-
+
+
-
diff --git a/App.py b/App.py
index 16016c376da684c3c4865615f437e5e8c9c54c98..d0bdb8220b6b12d53d4b036b23ac9259b2944264 100644
--- a/App.py
+++ b/App.py
@@ -43,6 +43,8 @@ from tkinter import messagebox # 导入提示窗口包
from Psmrcddup import Generator
from PrintPreview import PrintPreview
+__version__ = "0.1.1"
+
psm_list =[] #最终需要打印的所有口算题卷子
@@ -104,7 +106,7 @@ def createPSM():
tmp_signum = ra1Var.get()#获取题类型设置
tmp_step = rc1Var.get()#获取需要几步计算
- tmp_range = (int(min_entry.get()),int(max_entry.get()))#获取数值取值范围
+ tmp_range = (int(min_entry.get()),int(add2_entry.get()))#获取数值取值范围
tmp_same = sameVar.get()#获取题是否可以相同的设置
tmp_carry = rb1Var.get()#获取是否需要进退位
tmp_filter = eval('('+filter_entry.get()+')')#获取过滤数字
@@ -184,7 +186,7 @@ root.title(app_title)#设置窗口标题
top_frame = tk.Frame(root)
top_frame.pack(fill=tk.X,)
-t_frame = tk.LabelFrame(top_frame, text="口算题类型选择", padx=5, pady=5)
+t_frame = tk.LabelFrame(top_frame, text="口算题类型选择及详细设置", padx=5, pady=5)
t_frame.pack(fill=tk.X, side=tk.TOP)
t1_frame = tk.LabelFrame(t_frame, text="加减乘除选择", padx=5, pady=5)
@@ -193,17 +195,31 @@ t1_frame.pack(fill=tk.X, side=tk.LEFT)
t2_frame = tk.LabelFrame(t_frame, text="选择几步口算", padx=5, pady=5)
t2_frame.pack(fill=tk.X, side=tk.LEFT)
-t3_frame = tk.LabelFrame(t_frame, text="请选择", padx=5, pady=5)
+t3_frame = tk.LabelFrame(t_frame, text="其它设置", padx=5, pady=5)
t3_frame.pack(fill=tk.X, side=tk.LEFT)
-c_frame = tk.LabelFrame(top_frame, text="口算题详细设置", padx=5, pady=5)
+
+
+c_frame = tk.LabelFrame(top_frame, text="加减乘除法详细设置", padx=5, pady=5)
c_frame.pack(fill=tk.X, side=tk.TOP)
-l1_frame = tk.LabelFrame(c_frame, text="数值范围及过滤选择", padx=5, pady=5)
-l1_frame.pack(fill=tk.X, side=tk.TOP)
+addattrs_frame = tk.LabelFrame(c_frame, text="加法", padx=5, pady=5)
+addattrs_frame.pack(fill=tk.X, side=tk.TOP)
+
+subattrs_frame = tk.LabelFrame(c_frame, text="减法", padx=5, pady=5)
+subattrs_frame.pack(fill=tk.X, side=tk.TOP)
+
+
+multattrs_frame = tk.LabelFrame(c_frame, text="乘法", padx=5, pady=5)
+multattrs_frame.pack(fill=tk.X, side=tk.TOP)
+
+divattrs_frame = tk.LabelFrame(c_frame, text="除法", padx=5, pady=5)
+divattrs_frame.pack(fill=tk.X, side=tk.TOP)
+
+multistep_frame = tk.LabelFrame(c_frame, text="多步运算题", padx=5, pady=5)
+multistep_frame.pack(fill=tk.X, side=tk.TOP)
+
-l_frame = tk.LabelFrame(c_frame, text="进退位设置", padx=5, pady=5)
-l_frame.pack(fill=tk.X, side=tk.TOP)
c1_frame = tk.LabelFrame(top_frame, text="添加口算题到卷子", padx=5, pady=5)
c1_frame.pack(fill=tk.X, side=tk.TOP)
@@ -236,10 +252,7 @@ ra4=tk.Radiobutton(t1_frame,text='除法',value='4',variable=ra1Var,command=filt
ra4.pack(anchor=tk.W,side=tk.LEFT)
ra1.select()
-sameVar = tk.IntVar()
-cbt = tk.Checkbutton(t3_frame,text='题可相同', variable = sameVar,)
-cbt.pack(anchor=tk.W,side=tk.LEFT)
-cbt.select()
+
rc1Var = tk.IntVar()
rc1=tk.Radiobutton(t2_frame,text='单步',value='1',variable=rc1Var)
@@ -250,45 +263,115 @@ rc3=tk.Radiobutton(t2_frame,text='三步',value='3',variable=rc1Var,state=tk.DIS
rc3.pack(anchor=tk.W,side=tk.LEFT)
rc1.select()
-###########数值范围及过滤选择############
-
-
-min_label = tk.Label(l1_frame, text="最小值:",font=("Symbol", 14))
-min_label.pack(side=tk.LEFT,fill=tk.X)
-min_entry = tk.Entry(l1_frame,width=8)
-min_entry.pack(fill=tk.X, side= tk.LEFT)
-min_entry.insert(0,'0')
-max_label = tk.Label(l1_frame, text="最大值:",font=("Symbol", 14))
-max_label.pack(side=tk.LEFT,fill=tk.X)
-max_entry = tk.Entry(l1_frame,width=8)
-max_entry.pack(fill=tk.X, side= tk.LEFT)
-max_entry.insert(0,'20')
-
-filter_label = tk.Label(l1_frame, text="过滤值:",font=("Symbol", 14))
-filter_label.pack(side=tk.LEFT,fill=tk.X)
-filter_entry = tk.Entry(l1_frame,width=8)
-filter_entry.pack(fill=tk.X, side= tk.LEFT)
-filter_entry.insert(0,'0,1')
sumVar = tk.IntVar()
sumVar.set("20")
-sum_label = tk.Label(l1_frame, text="生成数量:",font=("Symbol", 14))
+sum_label = tk.Label(t3_frame, text="生成数量:",font=("Symbol", 14))
sum_label.pack(side=tk.LEFT,fill=tk.X)
-sum_entry = tk.Entry(l1_frame,width=8,textvariable=sumVar)
+sum_entry = tk.Entry(t3_frame,width=8,textvariable=sumVar)
sum_entry.pack(fill=tk.X, side= tk.LEFT)
-###########口算题进退位选择############
-rb1Var = tk.IntVar()
-rb1=tk.Radiobutton(l_frame,text='随机',value='1',variable=rb1Var,command=filterPSM)
-rb1.pack(anchor=tk.W,side=tk.LEFT)
-rb2=tk.Radiobutton(l_frame,text='加法进位',value='2',variable=rb1Var,command=filterPSM)
-rb2.pack(anchor=tk.W,side=tk.LEFT)
-rb3=tk.Radiobutton(l_frame,text='减法退位',value='3',variable=rb1Var,command=filterPSM)
-rb3.pack(anchor=tk.W,side=tk.LEFT)
-rb4=tk.Radiobutton(l_frame,text='加法无进位或减法无退位',value='4',variable=rb1Var,command=filterPSM)
-rb4.pack(anchor=tk.W,side=tk.LEFT)
-rb1.select()
+###########addattrs############
+
+
+
+
+add2_label = tk.Label(addattrs_frame, text="运算结果范围:",font=("Symbol", 14))
+add2_label.pack(side=tk.LEFT,fill=tk.X)
+add2_entry = tk.Entry(addattrs_frame,width=8)
+add2_entry.pack(fill=tk.X, side= tk.LEFT)
+add2_entry.insert(0,'[1,20]')
+
+
+
+add1Var = tk.IntVar()
+add1=tk.Radiobutton(addattrs_frame,text='随机进位',value='1',variable=add1Var,command=filterPSM)
+add1.pack(anchor=tk.W,side=tk.LEFT)
+add2=tk.Radiobutton(addattrs_frame,text='加法进位',value='2',variable=add1Var,command=filterPSM)
+add2.pack(anchor=tk.W,side=tk.LEFT)
+add3=tk.Radiobutton(addattrs_frame,text='没有进位',value='3',variable=add1Var,command=filterPSM)
+add3.pack(anchor=tk.W,side=tk.LEFT)
+add1.select()
+
+
+
+
+###########subattrs############
+
+
+
+
+sub1_label = tk.Label(subattrs_frame, text="运算结果范围:",font=("Symbol", 14))
+sub1_label.pack(side=tk.LEFT,fill=tk.X)
+sub1_entry = tk.Entry(subattrs_frame,width=8)
+sub1_entry.pack(fill=tk.X, side= tk.LEFT)
+sub1_entry.insert(0,'[1,19]')
+
+sub1Var = tk.IntVar()
+sub1=tk.Radiobutton(subattrs_frame,text='随机退位',value='1',variable=sub1Var,command=filterPSM)
+sub1.pack(anchor=tk.W,side=tk.LEFT)
+sub2=tk.Radiobutton(subattrs_frame,text='减法退位',value='2',variable=sub1Var,command=filterPSM)
+sub2.pack(anchor=tk.W,side=tk.LEFT)
+sub3=tk.Radiobutton(subattrs_frame,text='没有退位',value='3',variable=sub1Var,command=filterPSM)
+sub3.pack(anchor=tk.W,side=tk.LEFT)
+sub1.select()
+
+
+
+
+###########multattrs############
+
+
+
+
+mult1_label = tk.Label(multattrs_frame, text="运算结果范围:",font=("Symbol", 14))
+mult1_label.pack(side=tk.LEFT,fill=tk.X)
+mult1_entry = tk.Entry(multattrs_frame,width=8)
+mult1_entry.pack(fill=tk.X, side= tk.LEFT)
+mult1_entry.insert(0,'[1,81]')
+
+
+
+
+
+###########divattrs############
+
+
+
+div1_label = tk.Label(divattrs_frame, text="运算结果范围:",font=("Symbol", 14))
+div1_label.pack(side=tk.LEFT,fill=tk.X)
+div1_entry = tk.Entry(divattrs_frame,width=8)
+div1_entry.pack(fill=tk.X, side= tk.LEFT)
+div1_entry.insert(0,'[1,9]')
+
+
+
+
+###########multistep############
+
+
+multistep1_label = tk.Label(multistep_frame, text="运算项数值范围:",font=("Symbol", 14))
+multistep1_label.pack(side=tk.LEFT,fill=tk.X)
+multistep1_entry = tk.Entry(multistep_frame,width=34)
+multistep1_entry.pack(fill=tk.X, side= tk.LEFT)
+multistep1_entry.insert(0,'[[1,9],[1,9],[1,9],[1,9]]')
+
+multistep2_label = tk.Label(multistep_frame, text="运算符号设置:",font=("Symbol", 14))
+multistep2_label.pack(side=tk.LEFT,fill=tk.X)
+multistep2_entry = tk.Entry(multistep_frame,width=22)
+multistep2_entry.pack(fill=tk.X, side= tk.LEFT)
+multistep2_entry.insert(0,'[[1,2,3],[1,2,3],[1,2],[1,2]]')
+
+
+
+multistep1=tk.Checkbutton(multistep_frame,text='使用括号',command=filterPSM)
+multistep1.pack(anchor=tk.W,side=tk.LEFT)
+
+
+
+
+###########subattrs############
diff --git a/PrintPreview.py b/PrintPreview.py
index 1919ba4933d1860293429946cecffe66e1e45177..5c5b19f238004ce21e4e871add5ce30d1e18c04a 100644
--- a/PrintPreview.py
+++ b/PrintPreview.py
@@ -31,8 +31,6 @@
Author : J.sky
Mail : bosichong@qq.com
-Author : rcddup
-Mail : 410093793@qq.com
'''
@@ -41,6 +39,7 @@ from docx.shared import RGBColor
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
+__version__ = "1.0.0"
class PrintPreview:
'''本类负责生成完整的口算题文档使之适合打印机打印。可以生成多套题,生成数可以控。
diff --git a/Psmrcddup.py b/Psmrcddup.py
index 0dfc74b2d2cc1234f8541e206d242f184e1b4667..231eef9cd8d5ee3d90f65901cb6c9aa9af7566cc 100644
--- a/Psmrcddup.py
+++ b/Psmrcddup.py
@@ -62,43 +62,47 @@ class Generator(object):
signum = None
step = None
is_result = None
+ is_bracket =None
number = None
########多步算式题选项设置######
multistep = None
-
+ symbols = None
data_list = None # 生成的口算题
- def __init__(self, addattrs, subattrs, multattrs, divattrs, signum, step, is_result,number, multistep):
+ def __init__(self, addattrs, subattrs, multattrs, divattrs, signum, step,number, is_result,is_bracket, multistep,symbols):
'''
:param addattrs: dict 加法设置属性,
- 包括 四项运算项及结果数值范围设置,进位随机选择项单选,随机1,进位2,不进位3
- {"n1":[1,9],"n2":[1,9],"n3":[1,9],"n4":[1,9],"result":[10,20],"carry":1,}
+ 包括 结果数值范围设置,进位随机选择项单选,随机1,进位2,不进位3
+ {"result":[10,20],"carry":1,}
:param subattrs: dict 减法设置属性,
- 包括 四项运算项及结果数值范围设置,退位随机选择项单选,随机1,退位2,不退位3
- {"n1":[1,9],"n2":[1,9],"n3":[1,9],"n4":[1,9],"result":[10,20],"abdication":1,}
+ 包括 结果数值范围设置,退位随机选择项单选,随机1,退位2,不退位3
+ {"result":[10,20],"abdication":1,}
:param:multattrs dict 乘法
- 包括 四项运算项及结果数值范围设置
- {"n1":[1,9],"n2":[1,9],"n3":[1,9],"n4":[1,9],"result":[21,81],}
+ 包括 及结果数值范围设置
+ {"result":[21,81],}
:param:divattrs dict 除法
- 包括 四项运算项及结果数值范围设置
- {"n1":[1,9],"n2":[1,9],"n3":[1,9],"n4":[1,9],"result":[1,9],}
+ 包括 结果数值范围设置
+ {"result":[1,9],}
:param signum: list 包含题型需要的 1+ 2- 3* 4/
:param step: int 生成几步运算, 默认: 1 取值范围 1-3
:param is_result :int 0求结果,1求运算项
+ is_bracket: int 是否需要括号 0不需要 1需要
:param num: int 需要生成的题数
:param multistep =None: dict 多步算式设置属性,
- 包括 四项运算项及结果数值范围设置,
- is_bracket: int 是否需要括号 0不需要 1需要
+ 包括 四个运算项及结果数值范围设置,
+ {"n1":[1,9],"n2":[1,9],"n3":[1,9],"n4":[1,9],"result":[10,20],"is_bracket":False,}
+
+ :param symbols list
symbols: list 默认包括三组list,分别代表2或3步算式需要题型种类+-*/
2+3-5 symbols = [[1,2],[1,]] 第一个运算符可以为+或-,第二个运算符只能为+
- {"n1":[1,9],"n2":[1,9],"n3":[1,9],"n4":[1,9],"result":[10,20],"is_bracket":False,"symbols":[[1,2],[1,],[2,]],}
+
'''
@@ -115,9 +119,11 @@ class Generator(object):
self.signum = signum
self.step = step
self.is_result = is_result
+ self.is_bracket = is_bracket
self.number = number
self.multistep = multistep
+ self.symbols = symbols
self.__data_list = [] # 生成的口算题
@@ -127,31 +133,31 @@ class Generator(object):
if self.step == 1:
if self.signum == 1:
formulas = getRandomNum(
- [self.addattrs["n1"], self.addattrs["n2"], self.addattrs["n3"], self.addattrs["n4"]], self.step)
+ [self.multistep["n1"], self.multistep["n2"], ], self.step)
# 返回一步加法运算题
return getOneAdd(formulas, self.addattrs["result"], self.addattrs["carry"], self.is_result)
if self.signum == 2:
formulas = getRandomNum(
- [self.subattrs["n1"], self.subattrs["n2"], self.subattrs["n3"], self.subattrs["n4"]],
+ [self.multistep["n1"], self.multistep["n2"], ],
self.step)
# 返回一道减法运算
return getOneSub(formulas, self.subattrs["result"], self.subattrs["abdication"], self.is_result)
if self.signum == 3:
formulas = getRandomNum(
- [self.multattrs["n1"], self.multattrs["n2"], self.multattrs["n3"], self.multattrs["n4"]],
+ [self.multistep["n1"], self.multistep["n2"], ],
self.step)
return getOneMult(formulas, self.multattrs["result"], self.is_result)
if self.signum == 4:
formulas = getRandomNum(
- [self.divattrs["n1"], self.divattrs["n2"], self.divattrs["n3"], self.divattrs["n4"]],
+ [self.multistep["n1"], self.multistep["n2"], ],
self.step)
return getOneDiv(formulas, self.divattrs["result"], self.is_result)
elif self.step == 2: # 2步口算题
formulas = getRandomNum(
[self.multistep["n1"], self.multistep["n2"], self.multistep["n3"], self.multistep["n4"]],
self.step)
- return getTwoStep(formulas, self.multistep["result"], self.multistep['symbols'], self.addattrs["carry"], self.subattrs["abdication"],
- self.multistep["is_bracket"], self.is_result
+ return getTwoStep(formulas, self.multistep["result"], self.symbols, self.addattrs["carry"], self.subattrs["abdication"],
+ self.is_bracket, self.is_result
)
def generate_data(self):
@@ -195,21 +201,23 @@ class Generator(object):
@get_time
def main():
- addlist = {"n1": [1, 9], "n2": [1, 9], "n3": [1, 9], "n4": [1, 9], "result": [0, 30], "carry": 1, } # 加法设置
- sublist = {"n1": [1, 20], "n2": [1, 20], "n3": [1, 20], "n4": [1, 20], "result": [1, 20], "abdication": 1, } # 减法设置
- multlist = {"n1": [1, 9], "n2": [1, 9], "n3": [1, 9], "n4": [1, 9], "result": [21, 81],} # 乘法设置
- divlist = {"n1": [1, 81], "n2": [1, 9], "n3": [1, 9], "n4": [1, 9], "result": [1, 9],} # 除法设置
+ add = {"result": [0, 20], "carry": 1, } # 加法设置
+ sub = {"result": [1, 19], "abdication": 1, } # 减法设置
+ mult = {"result": [21, 81],} # 乘法设置
+ div = {"result": [1, 9],} # 除法设置
signum = 1
- step = 1
+ step = 2
is_result = 0
number = 20
+ is_bracket = 0
+
+ multistep = {"n1": [1, 9], "n2": [1, 9], "n3": [1, 9], "n4": [1, 9], "result": [0, 999],}
- multistep = {"n1": [1, 9], "n2": [1, 9], "n3": [1, 9], "n4": [1, 9], "result": [0, 999],
- "symbols": [[1, 2], [1, 2], [2, ]], "is_bracket": 1, }
+ symbols= [[1, 2], [1, 2], [2, ]]
- g = Generator(addlist, sublist, multlist, divlist, signum, step, is_result, number, multistep)
+ g = Generator(add, sub, mult, div, signum, step, number, is_result,is_bracket, multistep,symbols)
datalist = g.generate_data()
print(datalist)