为了账号安全,请及时绑定邮箱和手机立即绑定

真不知道自己哪里错了,明明spyder上运行就是对的

import math


def quadratic_equation(a, b, c):

    x1=-b/2/a+math.sqrt((b/2/a)**2-c/a)

    x2=-b/2/a-math.sqrt((b/2/a)**2-c/a)

    return x1, x2


print quadratic_equation(2, 3, 0)

print quadratic_equation(1, -6, 5)


正在回答

5 回答


https://img1.sycdn.imooc.com//5d40fec80001d06504030360.jpg我试了没问题啊,不过感觉最好还是测一下Δ比较好
0 回复 有任何疑惑可以回复我~
#1

慕粉31740082 提问者

测过了,delta是对的谢谢
2019-08-02 回复 有任何疑惑可以回复我~

虽然你已经采纳了结果,我还是想从原理上解释你遇到的情况。

首先肯定一点,你的公式是对的,用笔算能出来正确的结果。

但Python的计算方式跟笔算不同,尤其是除法符号(/)。当两个整数相除时是不会算出小数的(例:3/2的结果是1二不是1.5)

这就导致了你的式子在算第一题的delta时算成了0

因为按照Python的除法结果如下:

b/2/a = 3/2/2 = 1/2 = 0

后面因为c/a因为C是0所以无伤大雅,不然可能又会出问题,比如c等于1时。

而第二题因为恰好计算过程中都能整除,所以能得出正确结果。

关于小数运算和整数运算好像是在教程3-8的位置有讲解。

解决方法:在计算过程中尽早加入小数的运算,下面我把原式中的2变成了2.0。这样就能得出正确结果了。

t = math.sqrt((b/2.0/a)**2-c/a)
    x1=-b/2.0/a + t
    x2=-b/2.0/a - t


3 回复 有任何疑惑可以回复我~

公式是对的,但是你的思维方式很乖

0 回复 有任何疑惑可以回复我~
#1

qq_lovingyou_1

(-b+sqrt(b**2-4*a*c))/(2*a)是否会更加清晰一点
2019-07-31 回复 有任何疑惑可以回复我~
#2

慕粉31740082 提问者 回复 qq_lovingyou_1

的确自己思维,就是以前高中算式的时候的习惯吧,喜欢写分数。只是想问一下是否网页版的答案不够健全。。谢谢
2019-08-02 回复 有任何疑惑可以回复我~

公式一定要这样算吗?计算思维不同,算式也可能不同。2a可以先被除再进行别的运算啊,你可以试试在网页去math.sqrt((b/2/a)**2-c/a),得到的结果是0.0。这样的结果显然是不对的。

0 回复 有任何疑惑可以回复我~

方程求根的表达式写错了,正确的应该是

def quadratic_equation(a, b, c):

    delta = b**2-4*a*c

    if delta >= 0:

        x1 = (-b+math.sqrt(delta))/(2*a)

        x2 = (-b-math.sqrt(delta))/(2*a)

        return x1,x2

    else:

        return 

print quadratic_equation(2, 3, 0)

print quadratic_equation(1, -6, 5)


0 回复 有任何疑惑可以回复我~
#1

慕粉31740082 提问者

公式一定要这样算吗?计算思维不同,算式也可能不同。2a可以先被除再进行别的运算啊,你可以试试在网页去math.sqrt((b/2/a)**2-c/a),得到的结果是0.0。这样的结果显然是不对的。
2019-07-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758614    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

真不知道自己哪里错了,明明spyder上运行就是对的

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信