Python解一元一次方程和一元二次方程,输出数学形式和小数形式
Python解一元一次方程和一元二次方程,输出数学形式和小数形式
- 一元一次方程
- 一元二次方程
- 完整代码
- 运行结果
创建函数:
def eqt(c,b,a=0):
其中,a、b、c分别是二次项系数、一次项系数和常数项,a==0
时即为一元一次方程。输入的a、b、c可能是整数、浮点数或复数。当其都属于整数或浮点数时,还需要以化简后的数学形式输入计算结果;若存在复数时,或输出结果为复数时,不输出数学形式。
一元一次方程
为输出化简后的数学形式,需要先将输入值浮点数化成整数:
def intoint(numlist,k):def isint(numlist):intornot = Truefor num in numlist:if num != int(num):intornot = Falsereturn intornotwhile isint(numlist) == False:numlist = [num * k for num in numlist]return numlist
将输入的numlist中每一个数同时乘以k(一般是10,在一元二次方程中判别式化简时为100),直到小数点后均为0为止。
infl = (int, float)
if a == 0:if type(c) in infl and type(b) in infl:cblist = intoint([c, b], 10)c, b = int(cblist[0]), int(cblist[1])mcf = maxcf([abs(c), abs(b)])c, b = int(c / mcf), int(b / mcf)xx = '-' if c / b > 0 else ''c, b = str(abs(c)), str(abs(b))xx += c + '/' + b if b != '1' else cx = eval(xx)return [xx, x]else:x = -c/breturn [None, x]
先判断输入值中是否含有复数,若有,则直接输出小数形式-c/b
,若无,则先将浮点数化为整数,再同除以最大公因数以化简。这里用到了求多个整数的最大公因数的maxcf
函数,详见Python求多个数的最大公因数(HCF)和最小公倍数(LCM)。再判断结果的正负和是否b==1
,b==1
时省略分数线和分母。输出结果中,xx
是字符串形式的数学表达式,x
是小数形式的计算结果。
一元二次方程
else:dlt = b**2-4*a*cif type(c) in infl and type(b) in infl and type(a) in infl and dlt >= 0:dlk, dlt0 = 1, dltintdlt = intoint([dlt], 100)[0]dlr = dlt = int(intdlt)dltpflist = pf(dlt)[1]t = 2for tt in range(1,len(dltpflist)):if dltpflist[tt] == dltpflist[tt-1]:t += 1else:t = 2if t == 3:dlk = int(dlk * dltpflist[tt])dlr = int(dlr / dltpflist[tt] ** 2)t = 1dlk = dlk / (intdlt / dlt0) ** 0.5 if dlt0 > 0 else 0aa = a * 2bdalist = intoint([b, dlk, aa], 10)b, dlk, aa = int(bdalist[0]), int(bdalist[1]), int(bdalist[2])mcf = maxcf([abs(b), abs(dlk), abs(aa)])b, dlk, aa = int(b / mcf), int(dlk / mcf), int(aa / mcf)if dlr == 1 or dlr == 0:def dlr1xx(n,inputaa):nalist = intoint([n, inputaa], 10)n, aa1 = int(nalist[0]), int(nalist[1])mcf = maxcf([abs(n), abs(aa1)])n, aa1 = int(n / mcf), int(aa1 / mcf)xx = '-' if n / aa1 < 0 else ''n, aa1 = str(abs(n)), abs(aa1)xx += n + '/' + str(aa1) if aa1 != 1 else nreturn xxif dlr == 0:dlk = 0xx1 = dlr1xx(-b+dlk,aa)xx2 = dlr1xx(-b-dlk,aa)else:if b / aa < 0:xx1 = xx2 = '('elif b / aa > 0:xx1 = xx2 = '-('elif b == 0 and aa > 0:xx1, xx2 = '(', '-('else:xx1, xx2 = '-(', '('dltype = ['+', '-'] if b < 0 else ['-', '+']b, aa, dlr, dlk = str(abs(b)), str(abs(aa)), str(dlr), str(dlk)if b != '0':xx1 += b + dltype[0]xx2 += b + dltype[1]if dlk != '1':xx1 += dlk + '*'xx2 += dlk + '*'xx1 += dlr + '**0.5)'xx2 += dlr + '**0.5)'if aa != '1':xx1 += '/' + aaxx2 += '/' + aax1, x2 = eval(xx1), eval(xx2)return [dlt0, xx1, xx2, x1, x2]else:x1 = (-b+(dlt)**0.5)/(2*a)x2 = (-b-(dlt)**0.5)/(2*a)return [dlt, None, None, x1, x2]
先判断输入的a、b、c是否均为整数或浮点数,若存在复数,则直接计算结果;若均为浮点数或整数且判别式非负,即dlt>=0
,则需先得到数学表达式。
先将判别式通过intoint([dlt], 100)[0]
转化为整数形式,注意已翻倍的需在根号外除回。再将判别式化为最简形式,用到了pf
函数求其质因数,详见Python判断质数合数,质因数分解并得到所有因数。将根号外的系数设为dlk
,根号内的数为dlr
,aa = a * 2
。对b、dlk、aa三个数化为整数后同时除以最大公因数得到最简形式。当dlr == 1 or dlr == 0
时,不需要保留根号。判断输出结果的正负,以及b是否为0,aa是否为1,dlk是否为1,分别处理,输出结果。返回的列表中,第一项是判别式的值(初始值),第二、三项是两个解的数学表达式(输入存在复数或判别式为负时为None
),第四、五项是两个解的小数形式。
完整代码
def eqt(c,b,a=0):def intoint(numlist,k):def isint(numlist):intornot = Truefor num in numlist:if num != int(num):intornot = Falsereturn intornotwhile isint(numlist) == False:numlist = [num * k for num in numlist]return numlistinfl = (int, float)if a == 0:if type(c) in infl and type(b) in infl:cblist = intoint([c, b], 10)c, b = int(cblist[0]), int(cblist[1])mcf = maxcf([abs(c), abs(b)])c, b = int(c / mcf), int(b / mcf)xx = '-' if c / b > 0 else ''c, b = str(abs(c)), str(abs(b))xx += c + '/' + b if b != '1' else cx = eval(xx)return [xx, x]else:x = -c/breturn [None, x]else:dlt = b**2-4*a*cif type(c) in infl and type(b) in infl and type(a) in infl and dlt >= 0:dlk, dlt0 = 1, dltintdlt = intoint([dlt], 100)[0]dlr = dlt = int(intdlt)dltpflist = pf(dlt)[1]t = 2for tt in range(1,len(dltpflist)):if dltpflist[tt] == dltpflist[tt-1]:t += 1else:t = 2if t == 3:dlk = int(dlk * dltpflist[tt])dlr = int(dlr / dltpflist[tt] ** 2)t = 1dlk = dlk / (intdlt / dlt0) ** 0.5 if dlt0 > 0 else 0aa = a * 2bdalist = intoint([b, dlk, aa], 10)b, dlk, aa = int(bdalist[0]), int(bdalist[1]), int(bdalist[2])mcf = maxcf([abs(b), abs(dlk), abs(aa)])b, dlk, aa = int(b / mcf), int(dlk / mcf), int(aa / mcf)if dlr == 1 or dlr == 0:def dlr1xx(n,inputaa):nalist = intoint([n, inputaa], 10)n, aa1 = int(nalist[0]), int(nalist[1])mcf = maxcf([abs(n), abs(aa1)])n, aa1 = int(n / mcf), int(aa1 / mcf)xx = '-' if n / aa1 < 0 else ''n, aa1 = str(abs(n)), abs(aa1)xx += n + '/' + str(aa1) if aa1 != 1 else nreturn xxif dlr == 0:dlk = 0xx1 = dlr1xx(-b+dlk,aa)xx2 = dlr1xx(-b-dlk,aa)else:if b / aa < 0:xx1 = xx2 = '('elif b / aa > 0:xx1 = xx2 = '-('elif b == 0 and aa > 0:xx1, xx2 = '(', '-('else:xx1, xx2 = '-(', '('dltype = ['+', '-'] if b < 0 else ['-', '+']b, aa, dlr, dlk = str(abs(b)), str(abs(aa)), str(dlr), str(dlk)if b != '0':xx1 += b + dltype[0]xx2 += b + dltype[1]if dlk != '1':xx1 += dlk + '*'xx2 += dlk + '*'xx1 += dlr + '**0.5)'xx2 += dlr + '**0.5)'if aa != '1':xx1 += '/' + aaxx2 += '/' + aax1, x2 = eval(xx1), eval(xx2)return [dlt0, xx1, xx2, x1, x2]else:x1 = (-b+(dlt)**0.5)/(2*a)x2 = (-b-(dlt)**0.5)/(2*a)return [dlt, None, None, x1, x2]
运行结果
>>> eqt(1, 2, 1)
[0, '-1', '-1', -1, -1]
>>> eqt(-11, 2.8, 1)
[51.839999999999996, '11/5', '-5', 2.2, -5]
>>> eqt(12, 44)
['-3/11', -0.2727272727272727]
>>> eqt(1j, 2j)
[None, (-0.5+0j)]
>>> eqt(4, 75, 2)
[5593, '-(75-5593**0.5)/4', '-(75+5593**0.5)/4', -0.05340940171176456, -37.44659059828824]
Python解一元一次方程和一元二次方程,输出数学形式和小数形式相关推荐
- Java解一元一次方程,一元二次方程,一元三次方程
/*** @author Along* @desc 一元三次方程,二次方程,和一次方程求解工具类*/ public class EquationCalculation {/* 计算一元三次方程最大实根 ...
- Python解二元一次方程
使用Python解二元一次方程组 用到的库:sympy 下面举一个例子: 解方程组:y = x + 1,y = -x + 1 #导入sympy from sympy import *#定义变量 x = ...
- Python float输出指数形式和小数形式切换(即科学计数法和完整数值切换)
Python float输出指数形式和小数形式切换(即科学计数法和完整数值切换) (本文数字全部瞎编,仅作举例之用,请勿相信. 另,本人Python初学者,写个文章作为笔记,也希望可以对他人有所帮助, ...
- 解题报告——习题2-5 分数化小数(decimal) 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。
立志用尽量少的代码做高效的表达. 题目描述: 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位. a,b ≤10^6 ,c≤100.输入包含多组数据,结束标记记为a = b = c = ...
- 如何解一元一次方程视频_七年级数学教学视频-小邵课堂
本套课程为七年级数学第三章专题教学,初中七年级学生在学完解一元一次方程之后,已掌握了书本上所总结的五个解题步骤,但在整个一元一次方程部分的习题和练习题中,还存着一些解题技巧,也就是说在解题中研究一元一 ...
- python解二元一次方程_Python数据处理篇之Sympy系列(五)---解方程
前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 https://docs.sympy.org/latest/tutorial/solv ...
- Python解二元一次方程,没想到如此简单
没有用过Python的小伙伴们可能不太清楚,其实Python也可以做数学计算,那是因为它有一个科学计算库Sympy.如果你已经有python开发环境,你还需要安装一下sympy库,只需要在命令模式输入 ...
- python求解三元一次方程_北师大版八上数学5.2 求解二元一次方程组 知识点微课精讲...
知识点总结 代入消元法 代入消元法的实质是将二元一次方程组中的某一个方程进行未知数的分离,即将该方程进行变换,完整分离出一个独立的未知数,而这个未知数将用含有另一个未知数的式子来表示.设某二元一次方程 ...
- python解三元一次方程组_关于实现求解三元一次方程组的小程序的一点小研究
引入 在今年的暑假,作者利用空闲时间阅读了gilbert strange的introduction to linear algebra.作为享誉国际学界多年的MIT教材,该书以高斯消元法求解二三元方程 ...
最新文章
- 第三方控件DevExpress的TreeList绑定XML文件
- Chrome OS 云里雾里
- [css] 使用纯CSS代码实现动画的暂停与播放
- 美团面试题 | JVM 堆内存溢出后,其他线程是否可继续工作?
- 无法建立跟远程计算机的连接,彻底解决win8、win10系统宽带拨号出现“错误720:不能建立到远程计算机的连接”的问题-网络教程与技术
-亦是美网络...
- 带你了解 HBase 数据模型和 HBase 架构
- ElementUI:el-container实现高度占满
- 嵌入式linux基础学习全套精品视频教程
- RapidXml用法
- 哈哈,原来这叫做“松鼠症”……并谈谈我建议的学习方法
- 各大互联网厂面试题(付详细答案,持续更新中...)
- 更换移动硬盘显示图标
- apollo自动驾驶入门课-高精地图
- 与同行的对比,M-DAO的崛起已成定局
- java mysql 源码分析_JAVA JDBC(MySQL)驱动源码分析
- android原生MediaPlayer播放本地的m3u8
- 怎么节省PayPal收款手续费?
- word编辑的公式转换为mathtype,公式自动编号,数学公式规范
- 关于uni-app接入萤石云UIKit Javascript
- oracle resize datafile,用resize缩小datafile大小
热门文章
- 3.通过html向数据库添加数据
- Autoware学习笔记waypoint_follower之wf_simulator
- RocketMQ msgId与offsetMsgId释疑(实战篇),腾讯技术官发布的“神仙文档”火爆网络
- sql 查询重复记录2
- BiasFinder: Metamorphic Test Generation to Uncover Bias for Sentiment Analysis Systems阅读
- vue单页面应用的原理
- python分配使利润最高_求解最大利润算法
- 基于单片机的毕业设计推荐
- 用R中的包实现逐步回归
- 移动电子商务的发展趋势