zoukankan      html  css  js  c++  java
  • 宝宝加减法出题小程序

    避免计算过程中出现负数,可以设定题目长度,最大的数字。

    """
    Spyder Editor
    
    This is a temporary script file.
    """
    import random
    import re
    import pprint
    
    
    def calc(s = '5+6-1'):
        '''
        @s:'5+6-1'
        '''
        #print 'calc : %s 
    ' % s
        numbers = re.findall(r'd+' , s)
        symbols = re.findall(r'[+-]+', s)
        i = 1
        j = 0
        result = 0
        result += int(numbers[0])
        while i < len(numbers) and j < len(symbols):
            if symbols[j] == '+' :
                result += int(numbers[i])
            elif symbols[j] == '-' :
                result -= int(numbers[i])
            else:
                print symbols
                print 'Only + and - accept'
                return False
            i += 1
            j += 1 
            if result < 0:
                #print 'negtive not accept'
                return False
        #print '%s = %d' %(s,result)
        return result
    
    def getOneExpression(problemMaxLength = 5 , maxNum = 15):
        problemLength = random.randint(2,problemMaxLength)
        expression = ''
        i = 0
        num = random.randint(0 , maxNum)
        expression += str(num)
        while i < problemLength-1:
            tmp = expression
            expression += random.sample(['+','-'] , 1)[0]
            num = random.randint(0 , maxNum)
            expression += str(num)
            #print 'expression1 : ' ,expression
            if calc(expression):
                i += 1
            else:
                expression = tmp
            #print 'expression2 : ' ,expression
            #import time
            #time.sleep(1)
        #print expression
        return expression
    
    def setProblems(problemNum = 10 , problemMaxLength = 5 , maxNum = 15):
        problem = {}#{'P1':{'problem':'5+6' , result = 11}}
        
        # set level
        #problemNum = 10
        #problemMaxLength = 5
        #maxNum = 15
        for i in range(problemNum): 
            problem.setdefault('P'+str(i) , {})
            problem['P'+str(i)].setdefault('problem' , 
                    getOneExpression(problemMaxLength , maxNum))
            
            problem['P'+str(i)].setdefault('result' , 
                    calc(problem['P'+str(i)]['problem']))        
        return problem
    
    #test 
    '''      
    calc('1')
    getOneExpression()
    random.sample(['+','-'] , 1)
    '''
    
    problems = setProblems()
    pprint.pprint(problems)
  • 相关阅读:
    解决Hexo博客模板hexo-theme-next的翻页按钮不正常显示问题
    通过filebeat、logstash、rsyslog采集nginx日志的几种方式
    浅析SIEM、态势感知平台、安全运营中心
    解决layui表单ajax提交回调函数不起作用问题的两种方式
    LVM简介及CentOS7 LVM操作实战
    JAVA设计模式总结之23种设计模式
    JAVA设计模式总结之六大设计原则
    SpringMVC学习笔记_02
    SpringMVC学习笔记_01
    Mybatis 学习总结
  • 原文地址:https://www.cnblogs.com/colipso/p/8461006.html
Copyright © 2011-2022 走看看