四则运算

该博客介绍了一个用Python实现的项目,可自动生成小学四则运算题目,还支持真分数的四则运算。使用的工具包括Python编程语言和Github源代码管理平台,同时给出了Github地址和代码转载来源。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值