Python:解一元二次方程(带分数和根号结果!)
- 利用Python解一元二次方程
- 完善方程的系数
- 定义函数开方后是否为整数(在试了n次后终于搞定如何判断开方为整数类型)
- 定义函数取整开方后的数
- 判断根的情况
- 附上源代码
- 打包后效果图
- 打包指令(能用就用,就不上就算了)
利用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
唯一有个缺点就是不能化为最简的分数有好方法欢迎评论
初次写博客,代码有问题或可以改进欢迎评论
希望以上的代码能对你有所帮助,谢谢观阅!