GitHub项目地址:https://github.com/75-Hz/RJ-Project/blob/master/%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%972.0


 PSP表格:

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30

 40

Estimate

估计这个任务需要多少时间

 40

 60

Development

开发

 150

 210

Analysis

需求分析 (包括学习新技术)

 45

 60

Design Spec

生成设计文档

 15

 25

Coding Standard

代码规范 (为目前的开发制定合适的规范)

 30

 40

Design

具体设计

 10 

 15

Coding

具体编码

 30

 45

Code Review

代码复审

 10

 15

Test

测试(自我测试,修改代码,提交修改)

 30

 45

Reporting

报告

 15

 15

Test Report

测试报告

 10

 15

Size Measurement

计算工作量

 5

 7

Postmortem & Process Improvement Plan

事后总结, 并提出过程改进计划

 10

 10

合计

 

 430

 602

 

原基础代码:https://www.cnblogs.com/hjy567jiayouya/p/13705049.html

增加思路:

在原基础上增加真分数的运算,分子要比分母小,同时分母不为零,确保真分数。

减法不可小减大(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)

实现过程:

定义函数:增加新函数fraction(),随机生成算式。


 代码:

import profile

import random

from fractions import Fraction
 
#四则运算2.0
 
def count():
 
    sign = ['', '', '×', '÷']
 
    f = random.randint(0, 3)

    m = random.randint(0, 1)
 
    n1 = random.randint(1, 20)
 
    n2 = random.randint(1, 20)
 
    key = 0

    if f == 0:#加法

        key = n1 + n2

    elif f == 1:#减法,要先比较大小,防止输出负数

        n1, n2 = max(n1, n2), min(n1, n2)

        key = n1 - n2

    elif f == 2:#乘法

        key = n1 * n2

    elif f == 3:#除法,分母不可以为0

        n1, n2 = max(n1, n2), min(n1, n2)

        while n1 % n2 != 0:

            n1 = random.randint(1, 10)

            n2 = random.randint(1, 10)

            n1, n2 = max(n1, n2), min(n1, n2)

        key = int(n1 / n2)

    print(n1, sign[f], n2, '= ', end='')

    return key


def fraction ():
 
    sign = ['', '', '×', '÷']
 
    f = random.randint(0, 3)

    n1 = random.randint(1, 20)
 
    n2 = random.randint(1, 20)

    n3 = random.randint(1, 20)

    n4 = random.randint(1, 20)
 
    key = 0

    n1, n2 = min(n1, n2), max(n1, n2)#把n1,n2中小的放在前面,保证f1为真分数

    n3, n4 = min(n3, n4), max(n3, n4)#把n3,n4中小的放在前面,保证f2为真分数

    f1 = Fraction(n1, n2)#初始化f1为n1/n2

    f2 = Fraction(n3, n4)#初始化f2为n3/n4

    if f == 0:#加法

        key = f1 + f2

    elif f == 1:#减法,要先比较大小,防止输出负数

        f1, f2 = max(f1, f2), min(f1, f2)

        key = f1 - f2

    elif f == 2:#乘法

        key = f1 * f2

    elif f == 3:#除法,分母不可以为0

        f1, f2 = max(f1, f2), min(f1, f2)

        while n1 % n2 != 0:

            n1 = random.randint(1, 10)

            n2 = random.randint(1, 10)

            n3 = random.randint(1, 10)

            n4 = random.randint(1, 10)

            n1, n2 = max(n1, n2), min(n1, n2)

            n3, n4 = max(n3, n4), min(n3, n4)

        key = Fraction(f1 / f2)

    print(f1, sign[f], f2, '= ', end='')

    return key
 
print('小学四则运算')
 
print('输入‘1’测试效能,输入‘2’整数运算,输入‘3’真分数运算')
 
n = int(input())



#当输入1时,测试效能
 
if n==1:
 
     profile.run('count()')


#当输入2时,整数运算
     
if n==2:
 
    while True:
 
        key = count()
 
        j = input()
 
        s = int(j)
 
        if s == key :
 
            print('right')
 
        else:
 
            print('error,the answer is',key)


#当输入3时,真分数运算
            
if n==3:
 
    while True:
 
        key = fraction()
 
        j = input()
 
        s = eval(j)
 
        print('the answer is',key)
 

测试运行结果:

1.整数

2.真分数(不可判断回答正确与否 >-< )

效能分析结果:


小结:

这次是对四则运算的一个功能升级,增加了真分数的运算。但仍然有不足,不能判断结果正确与否,及时给出反馈,只能给出答案让做题者自行判断。我会继续完善的~