python的开发速度真心快快快,而计算速度也是在可以容忍的范围内,最近无聊,孩子也要放暑假了,给孩子做了一个加减法出提器,儿子,别怪爸爸狠,就拿机器来训练你吧~!
具体的构建思路可以总结如下:
①建立一个构建算式的函数,参数包括算式内的数字数量和取值的上下限,一共3个参数。
②在这个函数内会遇到一个问题,就是小学生没有学习负数知识,所以从左到右运算的时候是不能出现负数的,我的处理办法是用一个if分支语句判断算式由左到右构建的时候是否出现负数,如果出现负数,那么需要将上一步的“ - "号变成” + ” 号。这样做的结果是加法运算会比减法运算更多一些。
③构建完函数之后,需要构建一个DataFrame,分别为算式和答案,这个时候为了方便打印,我用了截取和重构原DataFrame,最终形成三列问题,三列答案。当然如果需要的话,可以将答案打印在另外一张纸上,这里就不详细解释了。最后to_excel到打印的Excel文档里就ok了。先上个效果图,当然给儿子不会作这么变态的题。:D
#ipython 命令和参数输入如下:
%run 'C:/Users/wind1982/Desktop/kidshomwork/powerfulmod.py'
please input by the following order:(w,x,y,z).
w,number of the question(Can be divided exactly by 3).
x,buttom of range_numerical.
y,top of range_numerical.
z,compute length.
must input 4 value:300,1000,10000,5
#输出效果如下如图
import random
import pandas as pd
import numpy as np
def comput(x,y,z):
rnd_list=[random.randint(x,y) for a in range(z)] #构建基础随机序列
comput_mod=""
for i in map(str,rnd_list):
comput_mod=comput_mod+i+random.choice([" + "," - "]) #随机添加加减号
if eval(comput_mod[:-3])<0: #小学生从左到右不能有负数
comput_mod=comput_mod[:-3-len(i)-3]+" + "+comput_mod[-3-len(i):]
comput_1stmod=comput_mod[:-3] #截取算式长度,符合外观要求
k=eval(comput_1stmod) #得到算式的结果
j=comput_1stmod+" = " #添加等号
return j,k
####################以上完成单个对应算式的构建,以下构建整表#######################
(w,x,y,z)=input("please input by the following order:(w,x,y,z).nw,number of the question(Can be divided exactly by 3).nx,buttom of range_numerical.ny,top of range_numerical.nz,compute length.nmust input 4 value:")
seq=[]
for ql in range(w): #question number
seq.append(comput(x,y,z))
seq=pd.DataFrame(seq,index=None)
seq=seq.rename(columns={0:"q1",1:"a1"})
seq_new=pd.DataFrame({})
seq_new["q2"]=list(seq["q1"][int(w/3):2*int(w/3)])
seq_new["a2"]=list(seq["a1"][int(w/3):2*int(w/3)])
seq_new["q3"]=list(seq["q1"][2*int(w/3):])
seq_new["a3"]=list(seq["a1"][2*int(w/3):])
seq_new["q1"]=list(seq["q1"][0:int(w/3)])
seq_new["a1"]=list(seq["a1"][0:int(w/3)])
seq_new.to_excel('C:/Users/wind1982/Desktop/kidshomwork/powerfulmod.xlsx')