Как использовать печать для форматирования следующего?

Michael Ung спросил: 28 марта 2018 в 02:16 в: python

У меня есть домашнее задание, где я создаю класс, представляющий комплексное число. Я выполнил задачу, но одна часть не удовлетворительна для меня.

В приведенном примере:

Enter the real value of the first complex number: 5    # Inputs
Enter the imaginary value of the first complex number: 5
Enter the real value of the second complex number: 0
Enter the imaginary value of the second complex number: 0
C1 = 5.0+5.0i
C2 = 0
C1+C2 = 5.0+5.0i
C1-C2 = 5.0+5.0i
C1*C2 = 0
C1/C2 = None; Divide by Zero Error!    # This is how I want it to appear

Я использую следующие перегруженные деления и получить следующие результаты (было указано, что функция не должна использовать возврат, если происходит деление на ноль, и оно должно печатать внутри функции деления):

def __truediv__(self, other):   # Overrides division function
        denom = other.real ** 2 + other.img ** 2
        tempComp = Complex(other.real, -1 * other.img)
        if denom != 0:
            tempComp = self * tempComp
            return Complex(tempComp.real / denom, tempComp.img / denom)
        print("Error: Cannot divide by zero")
Enter the real part of the first complex number: 5
Enter the imaginary part of the first complex number: 5
Enter the real part of the second complex number: 0
Enter the imaginary part of the second complex number: 0
C1 = 5.0 + 5.0i
C2 = 0
C1 + C2 = 5.0 + 5.0i
C1 - C2 = 5.0 + 5.0i
C1 * C2 = 0
Error: Cannot divide by zero
C1 / C2 = None

Как мне поступить, если это возможно? Это также помогло бы, если бы также был включен специальный код, но только если вы хотите.

1 ответ

JayMech ответил: 28 марта 2018 в 02:41

Я неправильно понял вопрос в первый раз. Если вы хотите, чтобы он выглядел в точности так:

C1/C2 = None; Divide by Zero Error!

Вы могли бы иметь его:

return 'None; Divide by Zero Error!'

Но я бы не рекомендовал это, а вместо этого рекомендовал бы мой оригинальный ответ ниже:

Метод python всегда возвращает None, если он не достигает оператора return.

Если вы вообще не хотите, чтобы он возвращался, вы можете вызвать исключение:

def __truediv__(self, other):   # Overrides division function
        denom = other.real ** 2 + other.img ** 2
        tempComp = Complex(other.real, -1 * other.img)
        if denom != 0:
            tempComp = self * tempComp
            return Complex(tempComp.real / denom, tempComp.img / denom)
        else:
            raise(ZeroDivisionError("Error: Cannot divide by zero"))

Это то же поведение, что и для типа int.