Используйте функцию 'try', 'поднимать', 'кроме', чтобы написать короткую программу

Рассмотрим класс Circle, используемый для представления объектов круга. Экземпляры класса Circle будут иметь атрибут под названием radius, который указывает размер круга. Метод конструктора (например, init) для этого класса будет инициализировать этот атрибут как обычно.

Ясно, что для объекта Circle не имеет смысла иметь размер меньше или равный 0.

Если кто-то пытается создать объект Circle с отрицательным или нулевым радиусом, вам следует вызвать исключение типа ValueError. Объект ValueError должен быть создан со следующей строкой:

Радиус не должен быть меньше или равен 0

Кроме того, если кто-то пытается создать объект Circle с нецелочисленным радиусом, вы должны вызвать исключение типа TypeError. Объект ValueError должен быть создан со следующей строкой:

Радиус должен быть целочисленным значением

Определите класс Circle с помощью метода конструктора, который предотвращает создание объекта Circle с недопустимым радиусом. Функции repr и str этого класса должны возвращать следующую строку:

Круг (х)

где х - радиус круга.

Например:

def main():
    try:
      c = Circle(10)
    except ValueError as x:
      print("Error: " + str(x))
    else:
      print(c)
def __init__(self, x):
    try:
      if x <= 0:
        raise ValueError('Radius must not be less than or equal to 0')
      elif x != int or x != float:
        raise TypeError('Radius must be an integer value')
    except ValueError as x:
        print('Error: {0}'.format(x))
    except TypeError as x:
        print('Error: {0}'.format(x))
main()

Результат должен быть:

Circle(10)

Если c = Circle(-100), результат должен быть:

Error: Radius must not be less than or equal to 0

Однако часть "def init(self, x)" неверна. Может кто-нибудь, пожалуйста, помогите?! Спасибо!

1 ответ

Решение

В вашем коде есть несколько ошибок:

Во-первых, вы говорите, что хотите "класс круга", но на самом деле вы его не определяете. Вы должны создать класс Circle и переместить __init__ внутри него.

Во-вторых, эта строка неверна:

elif x != int or x != float:

Я полагаю, что вы хотели убедиться, что x это либо число с плавающей точкой, либо целое число, и выдает ошибку, если это не так. Однако, как это написано, одно из двух условий всегда будет истинным: либо x целое число, так x != float правда, x это поплавок так x != int верно, или x ни то, ни другое, поэтому они оба Истинны.

Измените выражение elif следующим образом:

elif not isinstance(x, (int, float)):

В-третьих, вам, вероятно, нужно переключить порядок if и elif, иначе передача любого нечислового значения в конструктор вызовет <= бросить исключение.

Наконец, вы можете повернуть эти два excepts в один:

except (ValueError, TypeError) as x:

Итак, окончательный результат будет:

class Circle:
    def __init__(self, x):
        try:
            if not isinstance(x, (int, float)):
                raise TypeError('Radius must be an integer value')
            elif x <= 0:
                raise ValueError('Radius must not be less than or equal to 0')
        except (ValueError, TypeError) as x:
            print('Error: {0}'.format(x))
Другие вопросы по тегам