鱼C论坛

 找回密码
 立即注册
查看: 3032|回复: 28

[作品展示] 一个可以帮助你练习解方程的程序

[复制链接]
发表于 2022-3-20 14:53:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 tommyyu 于 2022-3-20 19:27 编辑
from random import *
from decimal import Decimal
correct = 0

class equation:
    def __init__(self,fomula,answer):
        self.fomula = fomula
        self.answer  = answer
    def ask(self):
        print(self.fomula)
        ans = [float(i.replace(' ','')) for i in input("请输入你的答案(x是多少)(有多个解用 / 隔开):").split('/')]
        if ans == self.answer:
            print("恭喜你,答对了!")
            return True
        else:
            print("答错了,正确答案是"+str(self.answer))
            return False

def get_equation1(level):
    
    if level == 1:
        # ax = b 类型的方程
        a = randint(4,20)
        x = randint(4,20)
        b = a * x
        fomula = str(a)+"x = "+str(b)

        temp = equation(fomula,[x])
        return temp

    elif level == 2:
        # ax = b 类型的方程,但是a x是小数
        a = randint(4,20) + randint(1,9)/10 
        x = randint(4,20)
        b = float(Decimal(str(a)) *  Decimal(str(x)))# 使用decimal模块里的Decimal函数
        fomula = str(a)+"x = "+str(b)

        temp = equation(fomula,[x])
        return temp

    elif level == 3:
        # ax + b = c 类型的方程
        a = randint(4,20)
        x = randint(4,20)
        b = randint(4,20)
        c = a * x + b
        fomula = str(a)+"x + "+str(b)+" = "+str(c)

        temp = equation(fomula,[x])
        return temp

    elif level == 4:
        # ax + b = c 类型的方程, a x b是小数
        a = randint(4,20) + randint(1,9)/10 
        x = randint(4,20)
        b = randint(4,20) + randint(1,9)/10 
        c = float(Decimal(str(a)) *  Decimal(str(x)) + Decimal(str(b))) # 使用decimal模块里的Decimal函数
        fomula = str(a)+"x + "+str(b)+" = "+str(c)

        temp = equation(fomula,[x])
        return temp
    
def main():
    for i in range(1,5):
        temp = get_equation1(i)
        if temp.ask():
            correct += 1
        temp = get_equation1(i)
        if temp.ask():
            correct += 1
    print("你答对了{0}道题,正确率是{1}%".format(correct,int(correct*10)))

if __name__ == '__main__':
    main()
注:1.该程序只能练习一元一次方程 (也许下次可以改进
      2.该程序不能挑选难度(也许下次可以改进
      3.欢迎大家来挑错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-20 15:31:19 | 显示全部楼层

回帖奖励 +1 鱼币

改进了一下
from random import *
from decimal import Decimal

correct = 0


class equation:
    def __init__(self, formula, answer):
        self.formula = formula
        self.answer = answer

    def ask(self):
        print(self.formula)
        split = input("请输入你的答案(x是多少)(有多个解用 / 隔开):").split("/")
        while True:
            try:
                ans = [float(i.replace(" ", "")) for i in split]
            except:
                split = input("输入错误,请重新输入:").split("/")
            else:
                break
        if ans == self.answer:
            print("恭喜你,答对了!")
            return True
        else:
            print("答错了,正确答案是: ", end="")
            print(*self.answer, sep=", ")
            return False


def get_equation1(level):

    if level == 1:
        # ax = b 类型的方程
        a = randint(4, 20)
        x = randint(4, 20)
        b = a * x
        formula = str(a) + "x = " + str(b)

        temp = equation(formula, [x])
        return temp

    elif level == 2:
        # ax = b 类型的方程,但是a x是小数
        a = randint(4, 20) + randint(1, 9) / 10
        x = randint(4, 20)
        b = float(Decimal(str(a)) * Decimal(str(x)))  # 使用decimal模块里的Decimal函数
        formula = str(a) + "x = " + str(b)

        temp = equation(formula, [x])
        return temp

    elif level == 3:
        # ax + b = c 类型的方程
        a = randint(4, 20)
        x = randint(4, 20)
        b = randint(4, 20)
        c = a * x + b
        formula = str(a) + "x + " + str(b) + " = " + str(c)

        temp = equation(formula, [x])
        return temp

    elif level == 4:
        # ax + b = c 类型的方程, a x b是小数
        a = randint(4, 20) + randint(1, 9) / 10
        x = randint(4, 20)
        b = randint(4, 20) + randint(1, 9) / 10
        c = float(
            Decimal(str(a)) * Decimal(str(x)) + Decimal(str(b))
        )  # 使用decimal模块里的Decimal函数
        formula = str(a) + "x + " + str(b) + " = " + str(c)

        temp = equation(formula, [x])
        return temp


def main():
    global correct

    for i in range(1, 5):
        temp = get_equation1(i)
        if temp.ask():
            correct += 1
        temp = get_equation1(i)
        if temp.ask():
            correct += 1
    print("你答对了{0}道题,正确率是{1}%".format(correct, int(correct * 10)))


if __name__ == "__main__":
    main()

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
tommyyu + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-20 16:59:35 | 显示全部楼层
#easygui版
from random import *
from decimal import Decimal
from easygui import *

class equation:
    def __init__(self,fomula,answer):
        self.fomula = fomula
        self.answer  = answer
    def ask(self,t):
        try:
            split = enterbox(self.fomula+'\n'+"请输入你的答案(x是多少)(有多个解用 / 隔开):",title = "第{0}题".format(t)).split("/")
        except:
            return 'exit'
        while True:
            try:
                ans = [float(i.replace(" ", "")) for i in split]
            except:
                try:
                    split = enterbox("输入错误,请重新输入:",title = "第{0}题".format(t)).split("/")
                except:
                    return 'exit'
            else:
                break
        if ans == self.answer:
            c = msgbox("恭喜你,答对了!",title = "第{0}题".format(t))
            if c:
                return True
            else:
                return 'exit'
        else:
            c = msgbox("答错了,正确答案是"+str(*self.answer),title = "第{0}题".format(t))
            if c:
                return True
            else:
                return 'exit'

def get_equation1(level):
    
    if level == 1:
        # ax = b 类型的方程
        a = randint(4,20)
        x = randint(4,20)
        b = a * x
        fomula = str(a)+"x = "+str(b)

        temp = equation(fomula,[x])
        return temp

    elif level == 2:
        # ax = b 类型的方程,但是a x是小数
        a = randint(4,20) + randint(1,9)/10 
        x = randint(4,20)
        b = float(Decimal(str(a)) *  Decimal(str(x)))# 使用decimal模块里的Decimal函数
        fomula = str(a)+"x = "+str(b)

        temp = equation(fomula,[x])
        return temp

    elif level == 3:
        # ax + b = c 类型的方程
        a = randint(4,20)
        x = randint(4,20)
        b = randint(4,20)
        c = a * x + b
        fomula = str(a)+"x + "+str(b)+" = "+str(c)

        temp = equation(fomula,[x])
        return temp

    elif level == 4:
        # ax + b = c 类型的方程, a x b是小数
        a = randint(4,20) + randint(1,9)/10 
        x = randint(4,20)
        b = randint(4,20) + randint(1,9)/10 
        c = float(Decimal(str(a)) *  Decimal(str(x)) + Decimal(str(b))) # 使用decimal模块里的Decimal函数
        fomula = str(a)+"x + "+str(b)+" = "+str(c)

        temp = equation(fomula,[x])
        return temp
    
def main():
    correct = 0
    for i in range(1,5):
        temp = get_equation1(i)
        t = temp.ask(2*i-1)
        if t and t!='exit':
            correct += 1
        elif t == 'exit':
            return 0
        temp = get_equation1(i)
        t = temp.ask(2*i)
        if t and t!='exit':
            correct += 1
        elif t == 'exit':
            return 0
    correct = 0
    msgbox("你答对了{0}道题,正确率是{1}%".format(correct,int(correct*10)))

if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-20 17:00:05 | 显示全部楼层
#idle版
from random import *
from decimal import Decimal

class equation:
    def __init__(self,fomula,answer):
        self.fomula = fomula
        self.answer  = answer
    def ask(self):
        print(self.fomula)
        split = input("请输入你的答案(x是多少)(有多个解用 / 隔开):").split("/")
        while True:
            try:
                ans = [float(i.replace(" ", "")) for i in split]
            except:
                split = input("输入错误,请重新输入:").split("/")
            else:
                break
        if ans == self.answer:
            print("恭喜你,答对了!")
            return True
        else:
            print("答错了,正确答案是"+str(self.answer))
            return False

def get_equation1(level):
    
    if level == 1:
        # ax = b 类型的方程
        a = randint(4,20)
        x = randint(4,20)
        b = a * x
        fomula = str(a)+"x = "+str(b)

        temp = equation(fomula,[x])
        return temp

    elif level == 2:
        # ax = b 类型的方程,但是a x是小数
        a = randint(4,20) + randint(1,9)/10 
        x = randint(4,20)
        b = float(Decimal(str(a)) *  Decimal(str(x)))# 使用decimal模块里的Decimal函数
        fomula = str(a)+"x = "+str(b)

        temp = equation(fomula,[x])
        return temp

    elif level == 3:
        # ax + b = c 类型的方程
        a = randint(4,20)
        x = randint(4,20)
        b = randint(4,20)
        c = a * x + b
        fomula = str(a)+"x + "+str(b)+" = "+str(c)

        temp = equation(fomula,[x])
        return temp

    elif level == 4:
        # ax + b = c 类型的方程, a x b是小数
        a = randint(4,20) + randint(1,9)/10 
        x = randint(4,20)
        b = randint(4,20) + randint(1,9)/10 
        c = float(Decimal(str(a)) *  Decimal(str(x)) + Decimal(str(b))) # 使用decimal模块里的Decimal函数
        fomula = str(a)+"x + "+str(b)+" = "+str(c)

        temp = equation(fomula,[x])
        return temp
    
def main():
    correct = 0
    for i in range(1,5):
        temp = get_equation1(i)
        if temp.ask():
            correct += 1
        temp = get_equation1(i)
        if temp.ask():
            correct += 1
    print("你答对了{0}道题,正确率是{1}%".format(correct,int(correct*10)))

if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-20 20:21:09 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-20 20:29:47 | 显示全部楼层

回帖奖励 +1 鱼币

不知道为啥,觉得很牛逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-20 22:02:02 | 显示全部楼层

回帖奖励 +1 鱼币

加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 00:42:59 | 显示全部楼层

回帖奖励 +1 鱼币

66666666666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 07:59:43 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 08:34:45 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 08:36:55 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 09:14:23 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 11:34:35 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 15:56:23 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 16:10:46 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-23 22:57:31 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-26 13:38:14 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-26 20:38:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-26 21:26:39 | 显示全部楼层
Python如此厉害?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 10:07:22 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表