使用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
相关产品推荐
相关产品推荐

