文宇。

导航

四则运算作业

   博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19
   作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376
   作业目标 下附
   学号 3190704111

 

 

 

 

 

二.题目要求

 写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

 1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

 2)程序要求能处理用户的输入,判断对错,累积分数

 3)程序支持可以由用户自行选择加、减、乘、除运算

 4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

#-*- codeing = utf-8 -*-
#@Time : 2020/10/27 21:50
#@Author : lyf
#@File : vcc.py
#@Software : PyCharm
import random                      # 随机生成数
from fractions import Fraction     # 分数的运算

list_questions=[]                 # 储存 题目 信息的列表
list_answers =[]                  # 储存 答案  信息的列表

#加法运算
def add():
    num1 = random.randint(1, 100)         #随机生成两个数
    num2 = random.randint(1, 100)
    list_questions.append(str(num1) + '+' + str(num2) + '=')       #题目,答案 追加到列表中
    list_answers.append(num1 + num2)
#减法运算
def cut():
    num1 = random.randint(1, 100)
    num2 = random.randint(1, 100)
    if num1 < num2:
        num1, num2 = num2, num1
    list_questions.append(str(num1) + '-' + str(num2) + '=')
    list_answers.append(num1 - num2)
#乘法运算
def mul():
    num1 = random.randint(1, 100)
    num2 = random.randint(1, 100)
    list_questions.append(str(num1) + 'x' + str(num2) + '=')
    list_answers.append(num1 * num2)
#除法运算
def div():
    num1 = random.randint(1, 100)
    num2 = random.randint(1, 100)
    num = Fraction(num1,num2)
    list_questions.append(str(num1) + '÷' + str(num2) + '=')
    list_answers.append(num)
def integer_score():
    #rand = operation[random.randint(0,3)]
    operation = ['+', '-', '*', '/']  # 四则运算的符号
    number = random.randint(1,4)     #随机产生的表达式长度
    f = ''
    for i in range(number):
        a = random.randint(1,20)       #随机产生的表达式中的数
        rand = operation[random.randint(0, 3)]     #随机选择一个四则运算中的符号
        if rand == '/':
            b = random.randint(a, 20)               #随机产生的真分数的分母
            f += str(a) + rand + str(b)               #数与符号相连
            rand = operation[random.randint(0, 2)]     #随机选择一个四则运算中的符号
            f += rand
        else:
            f += str(a) + rand
        #print(a,rand,end='')
    b = random.randint(1, 20)
    f += str(b)                     #得到完整的表达式
    n = eval(f)                      #得到表达式的结果
    n = Fraction('{}'.format(n)).limit_denominator()    #小数转化为分数

    if n > 0:
        print('题目:')
        print(f,'=')

        print('请输出答案:')
        x = Fraction('{}'.format(eval(input()))).limit_denominator()
        if n == x:                  #输入的数与表达式比较
            print(True)
        else:
            print(False)
            print('正确的答案为:',n)
    else:
        integer_score()
#随机运算
def rand_nums():
    rule = random.choice(['+','-','x','÷'])        #随机生成 运算符

    if rule == '+':                                #生成 加法 题目,答案
        add()
    elif rule == '-':                              #生成 减法 题目,答案
        cut()
    elif rule == 'x':                              #生成 乘法 题目,答案
        mul()
    else:                                         #生成 除法 题目,答案
        div()

# 判断对错,并计算分数
def judge():
    count = 0         #分数值
    for i in range(len(list_questions)):
        print("第{}题".format(i + 1))
        print("题目:",list_questions[i])

        y_answer = eval(input("请输入你的答案:"))            #输入答案

        if y_answer == float(list_answers[i]):             #判断对错
            print("回答正确!")
            print("----------------")
            count += 1
        else:
            print("很遗憾,回答错误!正确答案是:{}".format(list_answers[i]))
            print("----------------")
    return count

#真分数运算
def frac():
    fz1 = random.randint(1,10)    #分子 1
    fm1 = random.randint(1,10)    #分母 1
    if fz1 > fm1:
        fz1,fm1 = fm1,fz1          # 保证为真分数
    num1 = Fraction(fz1,fm1)       # 调用 Fraction 生成分数

    fz2 = random.randint(1,10)      #分子 2
    fm2 = random.randint(1,10)      #分母 2
    if fz2 > fm2:
        fz2,fm2 = fm2,fz2
    num2 = Fraction(fz2,fm2)

    if num1 < num2:
        num1,num2 = num2,num1        # 保证结果为正数,除法除外

    rule = random.choice(['+','-','x','÷'])
    if rule == '+':
        list_questions.append(str(num1) + ' + ' + str(num2) + '=')
        list_answers.append(num1 + num2)
    elif rule == '-':
        list_questions.append(str(num1) + ' - ' + str(num2) + '=')
        list_answers.append(num1 - num2)
    elif rule == 'x':
        list_questions.append("(" + str(num1) + ")" + 'x' + "(" + str(num2) + ")" + '=')
        list_answers.append(num1 * num2)
    else:
        list_questions.append("(" + str(num1) + ")" + '÷' + "(" + str(num2) + ")" + '=')
        list_answers.append(num1 / num2)

# 打印界面提示信息
def display():
    print("------------------------欢迎来到随机生成四则运算小程序------------------------")
    print()
    print("*********  1. 加法运算(+)               *********  2. 减法运算(-)")
    print("*********  3. 乘法运算(x)               *********  4. 除法运算(÷)")
    print("*********  5. 随机生成(随机生成四种运算)  *********  6. 真分数运算(随机生成四种运算)")
    print("*********  7. 随机生成复合运算")
    print()
    print("提示:对于除不尽的数可以用分数表示:如 2÷3 = 2/3")
    print("---------------------------------------------------------------------------")

#主函数
def main():
    display()              #调用显示函数

    n = int(input("请输入题目的数量:"))
    print("----------------")
    choose_rule = int(input("请选择要进行的运算(1-7):"))

    for i in range(n):

        if choose_rule == 1:
            add()
        elif choose_rule == 2:
            cut()
        elif choose_rule == 3:
            mul()
        elif choose_rule == 4:
            div()
        elif choose_rule == 5:
            rand_nums()
        elif choose_rule == 6:
            frac()
        elif choose_rule == 7:
            integer_score()
        else:
            print("输入有误,请选择(1-7)!")
            break

    count = judge()                           #调用judge函数,判断对错,并计分
    rate = count/n
    print("总共{}分,共答对{}分,正确率:{:.2f}%".format(n,count,rate*100))

main()         #主函数调用

posted on 2020-10-27 23:55  赋然  阅读(165)  评论(0编辑  收藏  举报