繁体   English   中英

python字符串串联中的占位符

[英]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.realcmath.sqrt(2).real

cmath会返回复数吗?

是。 您需要正确打印复数,或使用常规math.sqrt和特殊情况的负输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM