上面向对象技术这门课时老师布置的一个小作业。

自己跑了几遍好像没什么问题。

个人代码能力不是很强,写的非常冗余繁琐,仅供参考:


import operator
import random as rd
import re

def intger( a, b):  # 返回能整除的a和b
    while (1):
        sum = a / b
        str1 = str(sum)
        str2 = str1.split('.')
        if (len(str2) == 1 or str2[1] == '0'):  # 转为字符串,如果str[2]不等于0,说明不能整除
            break
        else:  # 不能整除,重新生成
            a = rd.randint(1, 500)
            b = rd.randint(1, 500)
            continue
    return a,b


def plus_sub():
    all = ["+", "-", "*", "/"]
    mul1 = rd.randint(0, 3)  ##随机数符
    mul2 = rd.randint(0, 3)
    twoothree = rd.randint(0, 1)  # 0两位数,1三位数
    if(twoothree==0):
        print('两个数字运算')
    if (twoothree == 1):
        print('三个数字运算')
    a = rd.randint(1, 500)  # 随机数字
    b = rd.randint(1, 500)
    c = rd.randint(1, 500)
    sum = 0
    if (twoothree == 0):  # 两位数
        if (mul1 == 0):
            sum = a + b
        if (mul1 == 1):  # 确保不为负数
            sum = a - b
            if sum<0:
                nnnums=a
                a=b
                b=nnnums
                sum=a-b
        if (mul1 == 2):
            sum = a * b
        if (mul1 == 3):  #是除法就判断是否能整除,不能重新随机生成,直到生成能整除的为止。
            a,b=intger(a,b)
            sum=a/b
        return (("{0}{1}{2}=".format(a, all[int(mul1)], b), sum))

    else:  # 三位数
        switch = {"0": operator.add, "1": operator.sub, "2": operator.mul, "3":operator.truediv }
        mul1 = rd.randint(0, 3)  ##随机数符,
        mul2 = rd.randint(0, 3)
        if (mul1 == 3 and mul2==3):  #确保只有一个除号
            mul2 = rd.randint(0, 2)
        if(mul1 == 3):
            a,b=intger(a,b)
        if(mul2 == 3):
            b,c=intger( b,c)

        mul1 = str(mul1)
        mul2 = str(mul2)
        if(mul1=='2' or mul1=='3'): #乘除优先级
            sum=switch[mul1](a,b)  #sum= b mul2 c
            sum=switch[mul2](sum,c) # sum= a mul1 sum ,  mul为操作数字典
        else:
            if(mul2=='2' or mul2=='3'):
                sum = switch[mul2](b, c)  # sum= b mul2 c
                sum = switch[mul1](a, sum)  # sum= a mul1 sum ,  mul为操作数字典
            else:
                sum = switch[mul1](a, b)  # sum= b mul2 c
                sum = switch[mul2](sum,c)  # sum= a mul1 sum ,  mul为操作数字典

        return (("{0}{1}{2}{3}{4}=".format(a, all[int(mul1)], b, all[int(mul2)], c)), sum)


d = 0
while (d!='q'):
    ans, anser = plus_sub()
    anser=int(anser)
    print(ans)
    print("请输入答案:")
    d = input()
    d = int(d)
    if d == anser:
        print("正确!下一题!————————————")
    else:
        print("答错了!请重新输入答案")
        while (d != 'q'):
            d = input()
            d = int(d)
            if d == anser:
                print("正确!下一题!————————————")
                break
            else:
                print("答错了!请重新输入答案")

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐