[英]Placeholders in python String Concatenation
嗨,我正在运行一个简单的程序,一个组件是使用二次公式的二次函数求解器。 我正在使用cmath模块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?)谢谢
r = cmath.sqrt(1)
print('%f+i%f' % (r.real, r.imag))
如果您希望该数字为实数,则可以对其进行测试并进行转换:
if abs(r.imag) < 1e-9:
r = r.real
else:
print('Surprise: got a nonzero imaginary part!')
在这里应该用任何适合您的问题的小值替换1e-9以及浮点运算的固有斜率。
有多种可能的解决方案。
首先,您可以只使用math
而不是cmath
。 它不会以任何明显的方式对程序的性能产生不利影响。
否则,如果您知道数字是实数,则可以使用complex.real
: cmath.sqrt(2).real
cmath会返回复数吗?
是。 您需要正确打印复数,或使用常规math.sqrt
和特殊情况的负输入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.