首页 > 其他 > 详细

四则运算

时间:2019-03-20 23:37:04      阅读:168      评论:0      收藏:0      [点我收藏+]

Github地址:https://github.com/SwaggyY/math

一.题目要求:

(1)能自动生成小学四则运算题目;

(2)能支持真分数的四则运算;

二.工具清单:

(1)编程语言:Python

(2)源代码管理平台:Github

三.PSP

技术分享图片

四.代码

  1 import random
  2 from fractions import Fraction
  3 operation = [+, -, *, /]   #四则运算的符号
  4 global f
  5 question = []
  6 result = []
  7 answer = []
  8 def result_integer(f, m):
  9     try:
 10         n = eval(f)
 11         n = Fraction({}.format(n)).limit_denominator()  # 把表达式的结果转成分数
 12         if n > 0:  # 判断结果是否大于0,否则重新产生表达式
 13             #print(‘题目:‘)
 14             question.append(f)
 15             result.append(n)
 16             #print(‘请输出答案:‘)
 17             #x = Fraction(‘{}‘.format(eval(input()))).limit_denominator()
 18         else:
 19             integer()
 20     except:
 21         integer(m)
 22 def func_integer(number):
 23     f = ‘‘
 24     ch = []
 25     rand = random.randint(0, 1)  #选择内嵌或外嵌括号
 26     if number != 1:         #避免一个表达式也产生括号
 27         if rand == 0:
 28             ch.append(()
 29             op = operation[random.randint(0, 1)]
 30             ch.append(random.randint(1, 10))
 31             ch.append(op)
 32             ch.append(random.randint(1, 10))
 33             ch.append())
 34         else:
 35             op = operation[random.randint(0, 3)]
 36             if op == /:
 37                 a = random.randint(1, 10)
 38                 ch.append(a)
 39                 ch.append(op)
 40                 ch.append(random.randint(a, 10))
 41             else:
 42                 ch.append(random.randint(1, 10))
 43                 ch.append(op)
 44                 ch.append(random.randint(1, 10))
 45     else:
 46         op = operation[random.randint(0, 3)]
 47         if op == /:
 48             a = random.randint(1, 10)
 49             ch.append(a)
 50             ch.append(op)
 51             ch.append(random.randint(a, 10))
 52         else:
 53             ch.append(random.randint(1, 10))
 54             ch.append(op)
 55             ch.append(random.randint(1, 10))
 56     for i in ch:       #把产生表达式当成一个整体
 57         f += str(i)
 58     return f
 59 def integer(n):
 60     ch = []                               #存储表达式
 61     number = random.randint(1, 4)        #随机产生表达式的数量
 62     for i in range(number):
 63         rand = random.randint(0, 1)       #随机产生0和1 判断是否使用括号
 64         a = func_integer(number)          #调用表达式产生函数,产生表达式
 65         if rand == 0:
 66             op = operation[random.randint(2,3)]    #产生*,/来连接有括号的表达式,避免产生+,—
 67             rand = random.randint(0, 1)            #随机产生0和1 判断是否使用内嵌括号或外嵌括号
 68             if i != number - 1:                    #避免开始和结尾用无意义的括号
 69                 if rand == 0:
 70                     ch.append(()
 71                     ch.append(a)
 72                     ch.append(op)
 73                     ch.append(random.randint(1,10))
 74                     ch.append())
 75                     ch.append(operation[random.randint(0, 3)])
 76                 else:
 77                     ch.append(a)
 78                     ch.append(operation[random.randint(0, 3)])
 79             else:
 80                 ch.append(a)
 81                 ch.append(operation[random.randint(0, 3)])
 82         else:
 83             ch.append(a)
 84             ch.append(operation[random.randint(0, 3)])
 85 
 86     f = ‘‘
 87     for k,i in enumerate(ch):             #把列表中的所有值用f一个个连起来
 88         if k != len(ch)-1:
 89             f += str(i)
 90     result_integer(f, n)                      #调用输出函数
 91 if __name__ == __main__:
 92     print(输入题目的数量:)
 93     n = int(input())
 94     for i in range(n):
 95         integer(n)
 96     print("题目如下:")
 97     for k, i in enumerate(question):
 98         print(k + 1,:,i,=)
 99     print(请输入你的答案:)
100     for i in range(n):
101         x = Fraction({}.format(eval(input()))).limit_denominator()
102         if x == result[i]:
103             answer.append(计算正确)
104         else:
105             answer.append(计算错误)
106     for k, i in enumerate(answer):
107         print(k + 1, i)

 

四则运算

原文:https://www.cnblogs.com/SwaggyY/p/10568282.html

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