首页 > 编程语言 > 详细

四则运算小题目升级版(python)

时间:2019-04-07 00:08:39      阅读:178      评论:0      收藏:0      [点我收藏+]

https://github.com/shiwangqiu/Python/blob/master/calculation_update.py

 

上一个版本是不能带括号运算的,这次进行了小小的更新,支持括号运算。

 

import random
from fractions import Fraction
operation = [+, -, *, /]   #四则运算的符号
global f
question = []
result = []
answer = []
def result_integer(f, m):
    try:
        n = eval(f)
        n = Fraction({}.format(n)).limit_denominator()  # 把表达式的结果转成分数
        if n > 0:  # 判断结果是否大于0,否则重新产生表达式
            #print(‘题目:‘)
            question.append(f)
            result.append(n)
            #print(‘请输出答案:‘)
            #x = Fraction(‘{}‘.format(eval(input()))).limit_denominator()
        else:
            integer()
    except:
        integer(m)
def func_integer(number):
    f = ‘‘
    ch = []
    rand = random.randint(0, 1)  #选择内嵌或外嵌括号
    if number != 1:         #避免一个表达式也产生括号
        if rand == 0:
            ch.append(()
            op = operation[random.randint(0, 1)]
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
            ch.append())
        else:
            op = operation[random.randint(0, 3)]
            if op == /:
                a = random.randint(1, 10)
                ch.append(a)
                ch.append(op)
                ch.append(random.randint(a, 10))
            else:
                ch.append(random.randint(1, 10))
                ch.append(op)
                ch.append(random.randint(1, 10))
    else:
        op = operation[random.randint(0, 3)]
        if op == /:
            a = random.randint(1, 10)
            ch.append(a)
            ch.append(op)
            ch.append(random.randint(a, 10))
        else:
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
    for i in ch:       #把产生表达式当成一个整体
        f += str(i)
    return f
def integer(n):
    ch = []                               #存储表达式
    number = random.randint(1, 4)        #随机产生表达式的数量
    for i in range(number):
        rand = random.randint(0, 1)       #随机产生0和1 判断是否使用括号
        a = func_integer(number)          #调用表达式产生函数,产生表达式
        if rand == 0:
            op = operation[random.randint(2,3)]    #产生*,/来连接有括号的表达式,避免产生+,—
            rand = random.randint(0, 1)            #随机产生0和1 判断是否使用内嵌括号或外嵌括号
            if i != number - 1:                    #避免开始和结尾用无意义的括号
                if rand == 0:
                    ch.append(()
                    ch.append(a)
                    ch.append(op)
                    ch.append(random.randint(1,10))
                    ch.append())
                    ch.append(operation[random.randint(0, 3)])
                else:
                    ch.append(a)
                    ch.append(operation[random.randint(0, 3)])
            else:
                ch.append(a)
                ch.append(operation[random.randint(0, 3)])
        else:
            ch.append(a)
            ch.append(operation[random.randint(0, 3)])

    f = ‘‘
    for k,i in enumerate(ch):             #把列表中的所有值用f一个个连起来
        if k != len(ch)-1:
            f += str(i)
    result_integer(f, n)                      #调用输出函数
if __name__ == __main__:
    print(输入你想做几道题目)
    n = int(input())
    for i in range(n):
        integer(n)
    print(题目:)
    for k, i in enumerate(question):
        print(k + 1,:,i,=)
    print(请输入你的答案:)
    for i in range(n):
        print(第{}题:.format(i + 1))
        x = Fraction({}.format(eval(input()))).limit_denominator()
        if x == result[i]:
            print({}:√.format(i + 1))
        else:
            print({}:×.format(i + 1))
            print(正确的答案为:,result[i])

效能分析:

技术分享图片

 

四则运算小题目升级版(python)

原文:https://www.cnblogs.com/shiwangqiu/p/10663443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!