2017-06-28 16 views
1

Ich schreibe eine Funktion, die komplexe Zahlen Multiplikation mit Python2.7 berechnet. Die funtion ist:TypeError: kann die Sequenz nicht mit Nicht-Int des Typs 'str' multiplizieren (bereits verwendet int (str))

def complexNumberMultiply(self, a, b): 
    """ 
    :type a: str 
    :type b: str 
    :rtype: str 
    """ 
    c,d = a.split('+') 
    e,f = b.split('+') 
    d = int(d[:-1]) 
    f = int(f[:-1]) 

    print c,d,e,f 
    return '%s+%si' % (c * e - d * f, c * f + d * e) 

Aber wenn ich es laufen, bekomme ich diesen Fehler:

In complexNumberMultiply return '%s+%si' % (c * e - d * f, c * f + d * e)
TypeError: can't multiply sequence by non-int of type 'str'

Meine Fragen ist, warum mein int (d [: - 1]) hat die Zeichenfolge nicht einschalten (zB -2) in eine ganze Zahl?

+4

1) liefern die Eingangs Sie diese Funktion testen, 2) Sie nicht konvertieren 'c' und 'e' 3) sind sich bewusst, dass es eine komplexe Zahl Art in Python? – hop

Antwort

2

Sie konvertiert d und f zu int, aber was ist c und e? Sie versuchen, c * e zu tun, und Sie können eine Zeichenfolge nicht mit einer Zeichenfolge multiplizieren.

Bedenken Sie:

def complexNumberMultiply(a, b): 
    """ 
    :type a: str 
    :type b: str 
    :rtype: str 
    """ 
    split_a = a.split('+') 
    split_b = b.split('+') 
    c, d = int(split_a[0]), int(split_a[-1][0]) 
    e, f = int(split_b[0]), int(split_b[-1][0]) 

    print (c,d,e,f) 
    return '%s + %si' % (c * e - d * f, c * f + d * e) 

print(complexNumberMultiply('1+2i', '3+4i')) 
# 1 2 3 4 
# -5+10i 

Oder complex verwenden, die ein eingebauter Typ in Python ist:

>>> complex('1+2j') * complex('3+4j') 
(-5+10j) 
>>> (1+2j) * (3+4j) 
(-5+10j) 
+0

Danke. Wie kommt es, dass ich nicht einmal c, e><||| bemerkt habe? –

+1

'(1 + 2j) * (3 + 4j)' funktioniert auch - keine Notwendigkeit, den 'complex()' -Konstruktor aufzurufen. –

+0

@TimPietzcker: natürlich, aber die Eingabe ist was es ist ... – hop

2

Imaginäre Zahlen werden in Python als Objekte erkannt, wie ganze Zahlen, schwimmt ...:

>>> complexN = 33 + 2j 
>>> complexN 
(33+2j) 
>>> complexN.real   # real part 
33.0 
>>> complexN.imag   # imaginary part 
2.0 

Addition komplexer Zahlen:

>>> complex + (33+2j) 
(66+4j) 

Die 2j ist der Imaginärteil und der Realteil ist 33. Dies ist der empfohlene Weg, um mit komplexen Zahlen in Python umzugehen.

Aber wenn Sie darauf bestehen, Ihre Funktion zum Experimentieren zu verwenden, glaube ich nicht, str zu verwenden und dann zu int konvertieren ist ein guter Weg. Warum nicht einfach Zahlen einfach verwenden? Auf diese Weise vermeiden Sie den Schnickschnack beim Formatieren der Eingaben für Ihre Funktion.

Siehe auch: Complex numbers usage in python

+1

'komplex ('33 + 2j ')' würde auch funktionieren – hop

+0

Danke für die Erinnerung daran. –

Verwandte Themen