嗨,我正在运行一个简单的程序,其中一个组件是使用二次公式的二次函数解算器。我使用cmath module sqrt()方法计算判别式的sqrt,即使判别式是正的,它仍然返回一个复数。虽然当我在一个tkinter标签中显示答案时,我使用%.3f作为一个浮点数,但是它说它不接受它,因为它是一个复数。还有复数占位符吗?在
def quad(a,b,c):
global answers
print a,b,c
disc=b**2
ac4=4*a*c
disc-=ac4
sdisc=sqrt(disc)
b*=-1
a2=a*2
answer=[]
print a
if a!=0:
ans1=(b+sdisc)/a2
ans2=(b-sdisc)/a2
if ans1==ans2:
answer.append(ans1)
print type(ans1)
answers.config(text='%.3f' %ans1)
else:
answer.append(ans1)
answer.append(ans2)
answers.config(text='%.3f , %.3f' %(ans1,ans2))
elif a==0:
answers.config(text='Not a Quadratic Function.')
如果a是1和b,c=0,0,则返回复数。。。cmath会返回复数吗??在
熟悉python,虽然对复数还不熟悉,但刚刚开始学习。在
编辑: 我现在使用的是数学模块和特殊情况下的负输入,但是当我使用%.3f时,它不允许我这样做,因为它很复杂。(我用负数的负数的sqrt得到正数的sqrt乘以1j)有占位符来做这个吗?(比如%c??) 谢谢
是的。您需要正确地打印复数,或者使用常规的
math.sqrt
和特殊情况下的负数输入。在有多种可能的解决方案。在
首先,您可以使用}。它不会以任何明显的方式对程序的性能产生负面影响。在
math
,而不是{否则,如果你知道这个数是真的,你可以使用
complex.real
:cmath.sqrt(2).real
如果您希望数字应该是实数,可以对其进行测试并进行转换:
^{pr2}$你应该用适合你的问题和浮点运算固有的斜率来代替1e-9。在
相关问题 更多 >
编程相关推荐