ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

四则运算

2019-03-20 22:52:32  阅读:169  来源: 互联网

标签:10 ch randint random 四则运算 append op


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)

 

标签:10,ch,randint,random,四则运算,append,op
来源: https://www.cnblogs.com/SwaggyY/p/10568282.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有