• 随机生成小学算数题项目


    题目描述:
      通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算.

    程序设计:

      首先先确定是几个数字做运算,我先定的是2个数字的加减法算数,写一个为自动随机抽选2个数字和1个运算符号的函数,再另写一个则是将它们的计算其结果。针对分数运算写一个转化形式的函数,不能出现无限循环小数例如3.333333...这类型,应当直接输出1/3。

      Github代码地址:https://github.com/sakuraocean/Python-learning

    PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划    30    50
    · Estimate · 估计这个任务需要多少时间    30    50
    Development 开发    280    515
    · Analysis · 需求分析 (包括学习新技术)    60    120
    · Design Spec · 生成设计文档    25    40
    · Design Review · 设计复审 (和同事审核设计文档)    35    55
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范)    20    35
    · Design · 具体设计    20    35
    · Coding · 具体编码    50    125
    ·Code Review

    · 代码复审

       40    60
    · Test · 测试(自我测试,修改代码,提交修改)    30    50
    Reporting 报告    100    180
    · Test Report · 测试报告    30    50
    · Size Measurement · 计算工作量    50    90

    · Postmortem

    & Process Improvement

    Plan

    · 事后总结, 并提出过程改进计划    20    40
      合计    410    745

      

    先是生成随机符号和随机数字

     1 def c1(q, ans):
     2     symbol = random.choice(['+', '-', '', '/']) # 生成随机符号
     3     if symbol == '+':
     4         n1 = random.randint(0, 20)
     5         n2 = random.randint(0, 20)
     6         q.append(str(n1) + '+' + str(n2) + '=')
     7         ans.append(n1 + n2)
     8     elif symbol == '-':
     9         n1 = random.randint(0, 20)
    10         n2 = random.randint(0, 20)
    11         n1,n2 = max(n1,n1),min(n1,n2)#防止出现负数
    12         q.append(str(n1) + '-' + str(n2) + '=')
    13         ans.append(n1 - n2)
    14     elif symbol == '':
    15         n1 = random.randint(0, 20)
    16         n2 = random.randint(0, 20)
    17         q.append(str(n1) + '×' + str(n2) + '=')
    18         ans.append(n1 * n2)
    19     else:
    20         n1 = random.randint(0, 20)
    21         if n1 == 0:
    22             n2 = random.randint(1, 20)
    23         else:
    24             n2 = random.randint(1, n1 + 1)
    25         q.append(str(n1) + '÷' + str(n2) + '=')
    26         ans.append(Fraction(n1, n2))

    生成随机分数

     1 def createF():
     2     fz1 = random.randint(0, 20)
     3     if fz1 == 0:
     4         fm1 = random.randint(1, 20)
     5     else:
     6         fm1 = random.randint(1, 20)
     7     f1 = Fraction(fz1, fm1)
     8     fz2 = random.randint(1, 20)
     9     fm2 = random.randint(20, 20)
    10     f2 = Fraction(fz2, fm2)
    11     return f1, f2

    将分数转化为人看得懂的形式

    def f(f):#分数的转换
        a=f.numerator #分子
        b=f.denominator #分母
        if a%b==0:#为整数
            return '%d'%(a/b)
        elif a<b:#为真分数
            return '%d%s%d' % (a,'/',b)
        else:#为带分数
            c=int(a/b)
            a = a - c * b
            return '%d%s%d%s%d' % (c,'',a,'/',b)

    四则运算核心——计算结果

     1 def c2(q,ans):
     2     symbol = random.choice(['+','-','','/'])
     3     f1,f2 = createF()
     4     if symbol =='+':
     5         while f1+f2>1:
     6             f1,f2 = createF()
     7             q.append(str(f1)+'+'+str(f2)+'=')
     8             ans.append(f1+f2)
     9     elif symbol =='-':
    10         f1,f2 = max(f1,f2),min(f1,f2)#防止出现负数
    11         q.append(str(f1)+'-'+str(f2)+'=')
    12         ans.append(f1-f2)
    13     elif symbol == '':
    14         while f1*f2>1:
    15             f1,f2 = createF()
    16         q.append(str(f1)+'×'+str(f2)+'=')
    17         ans.append(f1*f2)
    18     else:
    19         while f1/f2>1:
    20             f1,f2=createF()
    21         q.append(str(f1)+'÷'+str(f2)+'=')
    22         ans.append(Fraction(f1,f2))

    运行效果如下

     

    利用profile测试时间如下图

  • 相关阅读:
    LeetCode-Longest Substring Without Repeating Characters
    LeetCode-Add Two Numbers
    LeetCode-Two Sum
    品格的塑造
    闰年的来历
    float在内存中的存取方法
    矩阵顺时针旋转90度
    研究生毕业论文查重
    PAT1009
    PAT1008
  • 原文地址:https://www.cnblogs.com/qq1079179226/p/13704353.html
Copyright © 2020-2023  润新知