前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用python还能解析二元一次方程?

使用python还能解析二元一次方程?

原创
作者头像
学神IT
修改2019-07-11 11:09:16
1.6K0
修改2019-07-11 11:09:16
举报

二元一次函数的实现

代码语言:javascript
复制
import cmath
import math
import sys

这里导入cmath包是在后面用来处理复数的情况

导入math使用来处理 平方 根号等的运算

而导入sys的意义是为了比较0 ,在python中float的精度值不够,所以在计算复数时需要用到sys.float_info.epsilon

代码语言:javascript
复制
def get_float(msg,allow_zero):
 x =None
 while x is None:
 try:
 x= float(input(msg))
 if not allow_zero and abs(x) < sys.float_info.epsilon:
 #在python中float是双精度,精度不够,在比较时容易出错,所以需要用函数sys.float_info.epsilon
 #sys.float_info.epsilon代表无限接近 0,是机器可以区分出的两个浮点数的最小区别 
 print('不允许为0')
 x = None
 except ValueError as err:
 print(err)
 return x

这个函数是用来读取用户输入的数字,并对其进行判定是否满足二元一次方程式的标准

对输入值进行判定是否为数字类型:

是 -> 则进行下一步,将变量赋值

不是 -> 返回错误信息,并要求重新输入数值

代码语言:javascript
复制
print('axN{SUPERSCRIPT TWO}+bx+c=0')
#N{SUPERSCRIPT TWO} 代表显示上标一个2
ax²+bx+c=0
a = get_float('enter a: ',False)
b = get_float('enter b: ',True)
c = get_float('enter c: ',True)
x1 = None
x2 = None
discriminant = (b**2)-(4*a*c)
if discriminant == 0:
 x1 = -(b/(2*a))
else:
 if discriminant >0:
 root = math.sqrt(discriminant)
 else:
 root = cmath.sqrt(discriminant)
 x1 = (-b+root)/(2*a)
 x2 = (-b-root)/(2*a)
equation = ("{0}xN{SUPERSCRIPT TWO}+{1}x+{2}=0"
 " N{RIGHTWARDS ARROW} x={3}").format(a,b,c,x1)
 # N{RIGHTWARDS ARROW} 代表显示一个箭头标识(→)
if x2 is not None:
 equation +=' or x={0}'.format(x2)
print(equation)
enter a: 1
enter b: 2
enter c: 1
1.0x²+2.0x+1.0=0 → x=-1.0

取到a b c 的值后 对(b²-4ac)进行计算,

当计算出来的值为0时,表示只有一个解为

当计算出来的值大于0时,表示有两个解

当计算出来的值小于0时,表示有两个复数解

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二元一次函数的实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档