标签:
学习中Python,孩子嚷嚷说让我给出口算题,于是写了一个生成口算题的程序,我自己觉得很简陋,盼大神们给修改,您的任何建议都是对我最大的鼓励!
#!/usr/bin/env python
from operator import add,sub,imul
from random import randint,choice,uniform
import os
ops={‘+‘:add,‘-‘:sub,‘*‘:imul}
def FloatToInt(numList): ‘把小数为零的浮点数转换为整数,为了排版输出好看。
for i in range(len(numList)):
if numList[i]*10%10==0:numList[i]=int(numList[i])
return numList
def doprob(): ’生成一个口算题,返回答案和题目字符串
step=randint(2,3) ’随机生成口算题中数字的个数
if step==2:
op=choice(‘+-*‘) ‘随机生成计算符号
if op==‘*‘: ‘如果是乘法,产生最多两位小数乘以一位整数的口算题(小朋友不喜欢太难的)
nums=[round(uniform(1,100),choice((0,2))),randint(1,10)]
ans=ops[op](*nums)
else: ‘如果是加减法,产生最多两位小数的口算题
nums=[round(uniform(1,100),choice((0,2))) for i in range(step)]
nums.sort(reverse=True)
ans=ops[op](*nums)
nums=FloatToInt(nums) ’去掉浮点数最后的零
pr=‘%s%s%s=‘%(nums[0],op,nums[1])
else: ‘算三个数,就只算加减吧
op1=choice(‘+-‘)
op2=choice(‘+-‘)
nums=[round(uniform(1,100),choice((0,2))) for i in range(step)]
ans=ops[op1](*nums[:2])
ans=ops[op2](*(ans,nums[2]))
nums=FloatToInt(nums)
pr=‘%s%s%s%s%s=‘%(nums[0],op1,nums[1],op2,nums[2])
if ans*10%10==0:ans=int(ans)
return ans,pr
def main():
makenum=int(raw_input(‘please input the number of generated problems: ‘))
gennum=0
try:
filename=‘kousuan%s.txt‘%makenum
fmake=open(filename,‘w‘)
filepath=‘%s\%s‘%(os.getcwd(),filename)
except Exception,e:
print ‘file open err:‘,e
return None
for i in range(makenum-1):
problem=doprob()
if problem[0]>=0:
pout=‘%s‘%problem[0]+‘ ‘*(10-len(str(problem[0])))+‘%s\n‘%problem[1]
fmake.write(pout) ‘把题目存入文件中
gennum+=1
fmake.close
print ‘maked %s arithmetic‘%gennum
print ‘the result is in %s‘ %filepath ’给出文件所在目录
if __name__==‘__main__‘:
main()
标签:
原文地址:http://www.cnblogs.com/yanxinhui/p/4766775.html