【问题标题】:math domain error python for quadratic equation二次方程的数学域错误python
【发布时间】:2021-01-28 19:56:25
【问题描述】:

我是一个完整的初学者,由于某种原因,当我尝试运行代码时,它说存在数学域错误。我真的不明白问题是什么,非常感谢您的帮助:)

a = float(input('Rentrer la valeur de a : '))
b = float(input('Rentrer la valuer de b : '))
c = float(input('Rentrer la valuer de c : '))
delta = b**2 - 4*a*c

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

console:

Traceback (most recent call last):
  File "main.py", line 31, in <module>
    x1 = ((-b) + sqrt(delta)) / (2*a)
ValueError: math domain error

【问题讨论】:

  • abc 输入了什么?
  • 您没有处理delta 为负数的情况(在这种情况下,您尝试求解的方程将没有真正的解)。
  • a= 5 b = 4 和 c = -1
  • 你能告诉我们你现在运行的 Python 版本是什么吗?
  • 好的,我认为“数学导入 *”就足够了,但我现在明白了,再次感谢

标签: python python-3.x math


【解决方案1】:

sqrt 函数必须将正数 作为参数。当您输入数字 abc 时,您必须确保 delta(判别式)值是积极的(见https://en.wikipedia.org/wiki/Discriminanthttps://www.expii.com/t/the-discriminant-of-a-quadratic-4540)。如果您输入值 a=1、b=3、c=-2,您将不会看到此错误,因为在这种情况下,delta 值为 17(正数)

如果您知道复数是什么,则可以改用 cmath 包中的 sqrt 函数(来自 cmath import sqrt)并避免此错误,但您将使用复数。

【讨论】:

    【解决方案2】:

    答案非常简单:您需要 math 库:

    
    from math import sqrt
    
    a = float(input('Rentrer la valeur de a : '))
    b = float(input('Rentrer la valuer de b : '))
    c = float(input('Rentrer la valuer de c : '))
    delta = b**2 - 4*a*c
    
    x1 = ((-b) + sqrt(delta)) / (2*a)
    x2 = ((-b) - sqrt(delta)) / (2*a)
    
    print(x1, x2)
    
    """
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2021-08-04
      • 2011-06-11
      相关资源
      最近更新 更多