0

虚数を含む複雑な数学のクラス プログラムを作成しようとしています。(基本的に、+bi を使って計算します。) 現在私が抱えている問題は 2 つあります。まず、ユーザーからの 2 つの別々の入力を取得して使用する方法が思いつきません。2 つ目は、 2 つの異なる数値セットを同時に使用してinit関数を使用する方法です。ここに私が持っているものの基本があります:

class Complex(object):

    def __init__(self, other, a = 0, b = 0):
        self._a = a
        self._b = b

    def __str__(self):
        return "c1 is (" + str(self._a) + " , " + str(self._b) + "i)\n"

    def __add__(self, other):
        noni = self._a + self._c
        yi = self._b + self._d
        if noni == 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " + (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(yi) + "i."
        elif noni != 0 and yo == 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " + (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(noni) + "."
        elif noni != 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " + (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(noni) + " , " + str(yi) + "i."
        else:
            return "0"


    def __sub__(self):
        noni = self._a - self._c
        yi = self._b - self._d
        if noni == 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " - (" + str(self._c) + " , " + str(self._d) + "i) = (" \
                   + str(yi) + "i)"
        elif noni != 0 and yo == 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " - (" + str(self._c) + " , " + str(self._d) + "i) = (" \
                   + str(noni) + ")"
        elif noni != 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " - (" + str(self._c) + " , " + str(self._d) + "i) = (" \
                   + str(noni) + " , " + str(yi) + "i)"
        else:
            return "0"


    def __mul__(self):
        noni = self._a * self._c
        yi = self._b * self._d
        if noni == 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " * (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(yi) + "i)"
        elif noni != 0 and yo == 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " * (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(noni) + ")"
        elif noni != 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " * (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(noni) + " , " + str(yi) + "i)"
        else:
            return "0"


    def __div__(self):
        noni = self._a / self._c
        yi = self._b / self._d
        if noni == 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " / (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(yi) + "i)"
        elif noni != 0 and yo == 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " / (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(noni) + ")"
        elif noni != 0 and yi != 0:
            return "(" + str(self._a) + " , " + str(self._b) + "i)" \
                   + " / (" + str(self._c) + " , " + str(self._d) + "i) = " \
                   + str(noni) + " , " + str(yi) + "i)"
        else:
            return "0"

def main():
    c1 = (raw_input("Enter the first complex number: "))
    c1.split()
    c1 = Complex(c1)
    c2 = (raw_input("Enter the first complex number: "))
    c2.split()
    c2 = Complex(c1)
    print c1
    print c2
    print c1 + c2
    print c1 - c2
    print c1 * c2
    print c1 / c2

main()

意図した結果のサンプルを次に示します。

最初の複素数を入力してください: 2.5、4.5

2 番目の複素数を入力してください: -2.5、11.2

c1 は (2.5 , 4.5i)

c2 は (-2.5 , 11.2i)

(2.5、4.5i) + (-2.5、11.2i) = 15.7i

(2.5、4.5i) - (-2.5、11.2i) = (5.0、-6.7i)

(2.5、4.5i) * (-2.5、11.2i) = (-56.65、16.75i)

(2.5 , 4.5i) / (-2.5 , 11.2i) = (0.335257043056 , -0.298048447111i)

与えられた助けを借りますが、最大のものは input とinitです。

4

1 に答える 1

0

まず、念のため、Python には複素数が組み込まれています (例: 1 + 2j)。あなたのコードについては:

other1) が入っているのはなぜ__init__ですか? そこでは何の役にも立たないようです。

2) 使用する代わりに、すべての操作で印刷コードを複製したのはなぜですか__str__(2 つの複素数の合計が文字列を返す理由については何も言わないでください...)?

3)split()文字列のメソッドはその結果を返しますが、その場で変数を変更しません。

4)関数の引数としてシーケンスを渡したい場合は、スプライシング演算子を使用し*ます(問題を正しく理解していれば)。または、返されるものの最初と2番目の要素を取得して、splitそれらをに渡すことができます__init__

5) 使用する属性とは何self._cですかself._d? other._aこれらはと であるべきではありませんother._bか?

6)実装が正しく__mul__あり__div__ません。複素数はこのようには機能しません。

これらすべてを念頭に置いて、変更されたプログラムは次のようになります (奇妙なstr-returning 動作はそのまま残します):

class Complex(object):

    def __init__(self, a = 0, b = 0):
        self._a = a
        self._b = b

    def __str__(self):
        if self._a == 0 and self._b == 0:
            return "0"
        else:
            return "(" + str(self._a) + " , " + str(self._b) + "i)"

    def __add__(self, other):
        res = Complex(
            self._a + other._a,
            self._b + other._b)

        return (str(self) + " + " + str(other) + " = " + str(res))

    def __sub__(self, other):
        res = Complex(
            self._a - other._a,
            self._b - other._b)

        return (str(self) + " - " + str(other) + " = " + str(res))

    def __mul__(self, other):
        res = Complex(
            self._a * other._a - self._b * other._b,
            self._a * other._b + self._b * other._a)

        return (str(self) + " * " + str(other) + " = " + str(res))

    def __div__(self, other):

        norm = other._a ** 2 + other._b ** 2
        res = Complex(
            (self._a * other._a + self._b * other._b) / norm,
            (-self._a * other._b + self._b * other._a) / norm)

        return (str(self) + " / " + str(other) + " = " + str(res))


def main():
    c1 = raw_input("Enter the first complex number: ")
    re, im = c1.split()
    c1 = Complex(a=float(re), b=float(im))
    # or:
    # re_im = c1.split()
    # c1 = Complex(a=float(re_im[0]), b=float(re_im[1]))

    c2 = raw_input("Enter the second complex number: ")
    re, im = c2.split()
    c2 = Complex(a=float(re), b=float(im))
    print c1
    print c2
    print c1 + c2
    print c1 - c2
    print c1 * c2
    print c1 / c2


if __name__ == '__main__':
    main()
于 2013-09-20T02:19:44.700 に答える