2017-09-14 62 views
-9

我知道这是要求我使用if语句。但我怎么能这样做呢?Python的二次多项式的根

编写一个程序qroots.py,它从命令行读取三个浮点数a,b,c并计算/打印二次多项式的根ax**2 + bx + c = 0。你的程序只需要处理真实根存在的情况,即当a,b,c的值产生非负判别式b**2 − 4ac >= 0

当判别式为负数时,程序应该只打印一条不存在真正根的消息。

提示:math.sqrt()是返回数字平方根的内置函数。

我有这到目前为止:

import sys 
import math 

a = float(sys.argv[1]) 
b = float(sys.argv[2]) 
c = float(sys.argv[3]) 

终端应该这样做:

qroots.py 1-3 2

1.0 2.0

+3

请阅读如何问在SO。这不是一个解决作业的网站。显示你所做的 –

+1

提示:https://en.wikipedia.org/wiki/Quadratic_formula –

+1

欢迎来到StackOverflow!在问这个问题之前,你有没有读过[如何提问](https://stackoverflow.com/help/how-to-ask)? – Jerrybibo

回答

0

首先读出的从命令行输入(提示:使用sys.argv)。你也需要弄清楚如何将字符串转换为python数字。然后检查是否b**2-4*a*c < 0。如果是的话,那么提出一个ValueError关于没有真正的根源。

否则解决的根源:roots = (b ± sqrt(b**2-4*a*c))/(2*a)

0

的方法,由我的评论和@Joran比斯利的答案描述下:

import sys 
from math import sqrt 

a, b, c = sys.argv[1:] 
a = float(a) 
b = float(b) 
c = float(c) 
if b**2-4*a*c < 0: 
    print("there's no real root") 
else: 
    print((-b+sqrt(b**2-4*a*c))/(2*a), (-b-sqrt(b**2-4*a*c))/(2*a)) 

如果你愿意,你也可以检查判别为零,只打印两个解决方案之一(在这种情况下显然是相同的)。