一元二次方程组

最后都变了- 提交于 2020-01-12 09:38:12

11、定义一个函数 “quadratic(a,b,c)”,接收三个参数,返回一元二次方程:

ax² + bx + c = 0 的两个解。(提示:计算平方根可以调用math.sqrt()函数)

以下是我写的代码

import math


def quadratic(a, b, c):
    if type(a) == float or type(a) == int and type(b) == float or type(b) == int and type(c) == float or type(c) == int:

        z = b ** 2 - 4 * a * c
        if a == 0:
            x = -c / b
            print("此方程的解为:", x)
        if z == 0:
            x = -b / 2 * a
            print("此方程的解为:", x)

        if z > 0:
            t = float(math.sqrt(z))
            x = ((-b) - t) / 2 * a
            y = ((-b) + t) / 2 * a
            print("此方程的解为:", x, "和", y)
        else:
            print("该方程无解")
    else:
        print("请输入合法的字符!")


quadratic(2, 5, 6)

不过今天看到了一个大佬的解法
以下内容为转载
Python解一元一次方程只需要三行就完成了,确实很强悍啊

def s(eq, var='x'):
r = eval(eq.replace('=', '-(') + ')', {var:1j})
return -r.real / r.imag

原理如下:
这个段代码的关键是利用了复数。
第一步:
2 * x + 233 = x * 8 + 3
变成
2 * x + 233 -(x * 8 + 3)
然后把x变成虚数1j
然后变成
2 * 1j + 233 -(1j * 8 + 3)
通过eval算出结果为230-6j
因为我们知道这个表达式结果为0,而且j也相当于x。
所以问题变成了:230-6j=0,也就是230-6x=0。
最后x = - 230 / 6 = 38.33333333336。
这里的核心是用到了Python的黑暗魔法eval,eval的第一个参数是表达式,第二个参数是命名空间,也就是把 x = 1j 通过第二个参数把一些值放进去
转载地址是
https://www.cnblogs.com/cheer-wang/p/2817886.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!