You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python math模块求解二次方程时遇定义域错误求助

问题解决:二次方程求解脚本的math domain error问题

问题根源

你的代码错误在于先计算平方根再判断判别式正负:当输入的参数导致判别式d<0时,math.sqrt(d)会直接抛出math domain error,因为math模块的平方根函数仅支持非负数,此时代码根本没机会执行到if d < 0的判断分支。

修复后的代码

将判别式的判断逻辑移到计算根的代码之前,就能提前拦截负数判别式的情况,避免报错:

#Importerer math
import math

print("Programmet skal løse andregradslikningen ")
print("ax^2 + bx + c = 0 ved hjelp av abc-formelen")
print("Skriv inn verdiene for a, b og c.")

a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))

d = (b**2) - (4*a*c)

# 先判断判别式状态,再执行对应逻辑
if d < 0:
    print("Likningen har ingen løsning")
elif d == 0:
    print(f"Løsning x = {-b/(2*a)}")
else:
    sol1 = (-b + math.sqrt(d))/(2*a)
    sol2 = (-b - math.sqrt(d))/(2*a)
    print("Løsningen er")
    print(f"x = {sol1}, og x= {sol2}")

关键说明

  • 核心调整:先判断判别式的正负,再根据情况计算根或输出提示,确保只有当d>=0时才调用math.sqrt(),完全符合课程仅使用math模块的要求。
  • 复数根场景直接输出指定提示,无需引入cmath模块,满足直观性要求。

内容的提问来源于stack exchange,提问作者Edward Bruer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:25:10