四则运算改进

Github链接:https://github.com/kelikel/work_first

(1)题目

能自动生成小学四则运算题目(结果不出现负数);

除了整数外,还要支持真分数的四则运算。

对原四则运算进行功能上的改进

(2)PSP表格:

(3)需求分析:

满足小学的基础计算且不超纲;

随机生成四则运算题,结果不为负数;

存在真分数的计算;

可生成答案进行对比;

每道题都可由用户输入答案并进行判断,累计输出答对的题目。

(4)解题思路:

小学的运算只有加减乘除,且需要满足不出现负数的情况,因为运算中减法可能出现负数情况,需要对随机生成的两个数字进行比较,将较大的作为被减数,较小的作为减数,解决负数出现的问题;

为解决真分数问题,调用 fractions 进行真分数运算

(5)设计实现:

newint( )函数生成整数四则运算

newfra( )函数生成真分数四则运算

newtest( )函数生成题库及答案

用if 判断选择进入不同的选择阶段

(6)代码实现:

import random

from fractions import Fraction
def newint(): 
    opr = ['', '', '×', '÷']
    fh = random.randint(0, 3)
    n1 = random.randint(1, 20)
    n2 = random.randint(1, 20)
    rjg = 0
    if fh == 0:
        rjg = n1 + n2
    elif fh == 1:
        n1, n2 = max(n1, n2), min(n1, n2)
        rjg = n1 - n2
    elif fh == 2:
        rjg = n1 * n2
    elif fh == 3:
        n1, n2 = max(n1, n2), min(n1, n2)
        while n1 % n2 != 0:
            n1 = random.randint(1, 20)
            n2 = random.randint(1, 20)
            n1, n2 = max(n1, n2), min(n1, n2)
        rjg = int(n1 / n2)
    print(n1, opr[fh], n2, '= ', end='')
    return rjg

def newfra():
    opr = ['', '', '×', '÷']
    fh = random.randint(0, 3)
    t1 = random.randint(1, 10)
    t2 = random.randint(t1, 10)
    n1 = Fraction(t1, t2)
    t1 = random.randint(1, 10)
    t2 = random.randint(t1, 10)
    n2 = Fraction(t1, t2)
    rjg = 0
    if fh == 0:
        rjg = n1 + n2
    elif fh == 1:
        n1, n2 = max(n1, n2), min(n1, n2)
        rjg = n1 - n2
    elif fh == 2:
        rjg = n1 * n2
    elif fh == 3:
        n1, n2 = max(n1, n2), min(n1, n2)
        rjg = n1 / n2
    print(n1, opr[fh], n2, '= ', end='')
    return rjg

def newtest():
    opr = ['', '', '×', '÷']
    print('输入题库所需要的题目数量')
    n=int(input())
    rjg=[]
    m=0
    while m<=(n-1):
        fh = random.randint(0, 4)
        if fh==0:
            print(m+1,end='. ')
            rjg.append(newfra())
            print(' ')
        else:
            print(m+1,end='. ')
            rjg.append(newint())
            print(' ')
        m=m+1
    m=0
    print('答案:')
    while m<=(n-1):
        print(m+1,'. ',rjg[m])
        m=m+1


print('按1进入答题判断')
print('按2进入题库生成')
n=int(input())
if n==1:
    print('输入"1111"结束本轮')
    while True:
        fh=random.randint(0,4)
        if fh==0:
            rjg = newfra()
            jg = input()
            if jg == '1111':
                break;
            sr = Fraction(jg)
            if sr == rjg:
                print('答案正确!')
            else:
                print('答案错误,正确答案为:', rjg)
        else:
            rjg = newint()
            jg = input()
            if jg == '1111':
                break;
            sr = int(jg)
            if sr == rjg:
                print('答案正确!')
            else:
                print('答案错误,正确答案为:', rjg)
if n==2:
    newtest()

(7)运行结果:

posted @ 2019-03-27 11:39  c-rush  阅读(217)  评论(0编辑  收藏  举报