Python:解一元二次方程(带分数和根号结果!)

本文介绍了一种使用Python解决一元二次方程的方法,不仅处理了方程的实数根,还特别关注了根的分数和根号表示,确保结果的精确性和数学表达的清晰性。

利用Python解一元二次方程

完善方程的系数

from math import sqrt		# 调用开方的函数
print("解方程 aX^2 + bX +c = 0")
a = int(input("请输入 a 的值(自行转化为整数) : "))
b = int(input("请输入 b 的值(自行转化为整数) : "))
c = int(input("请输入 c 的值(自行转化为整数) : "))
d = b ** 2 - a * c * 4  # 判断δ情况
a0 = a * 2

定义函数开方后是否为整数(在试了n次后终于搞定如何判断开方为整数类型)

定义函数取整开方后的数

def is_sqr(x):  # 判断δ开方后是否为整数
    num1 = sqrt(x)
    return int(num1) == num1


def sqr(x):     # 将开方后的δ取整
    num2 = sqrt(x)
    return int(num2)

判断根的情况

自创强制分数形式 /酷

 if d < 0:
    print("此方程无实数根")
elif d == 0:
    print("此方程仅有一个实数根")
    print("      ", -b, "\n", "X =-------", "\n", "      ", 2 * a, sep="")      # 强制转化为分数形式
elif d > 0:
    print("此方程有两个实数根")
    if is_sqr(d):   # 当δ为能开尽时
        s1 = -b + sqr(d)
        s2 = -b - sqr(d)
        x1 = s1 / a0    # 方程的根1
        x2 = s2 / a0    # 方程的根2
        if s1 % a0 == 0 and s2 % a0 == 0:   # 两根都是整数
            print("X1 = ", x1, "\n",)
            print("X2 = ", x2, "\n",)
        elif s1 % a0 == 0 and s2 % a0 != 0:     # 有一根为整数
            print("X1 = ", x1, "\n",)
            print("      ", -b - sqrt(d), "\n", "X2 =-------", "\n", "      ", a0, "\n", sep="")
        elif s1 % a0 != 0 and s2 % a0 == 0:     # 有一根为整数
            print("      ", -b + sqrt(d), "\n", "X1 =-------", "\n", "      ", a0, "\n", sep="")
            print("X2 = ", x2, "\n",)
        else:       # 两根都为浮点数时
            print("      ", -b + sqrt(d), "\n", "X1 =-------", "\n", "      ", a0, "\n", sep="")
            print("      ", -b - sqrt(d), "\n", "X2 =-------", "\n", "      ", a0, "\n", sep="")
    else:       # 当δ为开不尽时
        print("      ", -b, "+ √", d, "\n", "X1 =-------", "\n", "      ", a0, "\n", sep="")
        print("      ", -b, "- √", d, "\n", "X2 =-------", "\n", "      ", a0, "\n", sep="")
input("按Enter键退出")

网上大部分解一元二次方程的代码大多结果为浮点数
对于一般函数带根号结果没有什么用
我在此制作了可以带根号的结果

附上源代码

from math import sqrt
print("解方程 aX^2 + bX +c = 0")
a = int(input("请输入 a 的值(自行转化为整数) : "))
b = int(input("请输入 b 的值(自行转化为整数) : "))
c = int(input("请输入 c 的值(自行转化为整数) : "))
d = b ** 2 - a * c * 4  # 判断δ情况
a0 = a * 2


def is_sqr(x):  # 判断δ开方后是否为整数
    num1 = sqrt(x)
    return int(num1) == num1


def sqr(x):     # 将开方后的δ取整
    num2 = sqrt(x)
    return int(num2)


if d < 0:
    print("此方程无实数根")
elif d == 0:
    print("此方程仅有一个实数根")
    print("      ", -b, "\n", "X =-------", "\n", "      ", 2 * a, sep="")      # 强制转化为分数形式
elif d > 0:
    print("此方程有两个实数根")
    if is_sqr(d):   # 当δ为能开尽时
        s1 = -b + sqr(d)
        s2 = -b - sqr(d)
        x1 = s1 / a0    # 方程的根1
        x2 = s2 / a0    # 方程的根2
        if s1 % a0 == 0 and s2 % a0 == 0:   # 两根都是整数
            print("X1 = ", x1, "\n",)
            print("X2 = ", x2, "\n",)
        elif s1 % a0 == 0 and s2 % a0 != 0:     # 有一根为整数
            print("X1 = ", x1, "\n",)
            print("      ", -b - sqrt(d), "\n", "X2 =-------", "\n", "      ", a0, "\n", sep="")
        elif s1 % a0 != 0 and s2 % a0 == 0:     # 有一根为整数
            print("      ", -b + sqrt(d), "\n", "X1 =-------", "\n", "      ", a0, "\n", sep="")
            print("X2 = ", x2, "\n",)
        else:       # 两根都为浮点数时
            print("      ", -b + sqrt(d), "\n", "X1 =-------", "\n", "      ", a0, "\n", sep="")
            print("      ", -b - sqrt(d), "\n", "X2 =-------", "\n", "      ", a0, "\n", sep="")
    else:       # 当δ为开不尽时
        print("      ", -b, "+ √", d, "\n", "X1 =-------", "\n", "      ", a0, "\n", sep="")
        print("      ", -b, "- √", d, "\n", "X2 =-------", "\n", "      ", a0, "\n", sep="")
input("按Enter键退出")

打包后效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打包指令(能用就用,就不上就算了)

pyinstaller -F -i ico图片名.ico py文件名.py

唯一有个缺点就是不能化为最简的分数有好方法欢迎评论
初次写博客,代码有问题或可以改进欢迎评论
希望以上的代码能对你有所帮助,谢谢观阅!

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值