Вычислить модуль зоны


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

import math

# A python program to calculate the area of shapes


# area of a square is length multiplied by width
def area_of_square(length, width):
    _check_if_values_are_strings(length = length, width = width)
    _check_if_values_are_negitive(lenth = length, width = width)

    return length * width

# area of a triangle is base multiplied by height divided by 2
def area_of_triangle(base_value, height):
    _check_if_values_are_strings(base_value = base_value, height = height)
    _check_if_values_are_negitive(base_value = base_value, height = height)

    return (base_value * height) / 2

# area of a circle is radius squared times pi
def area_of_circle(radius):
    _check_if_values_are_strings(radius = radius)
    _check_if_values_are_negitive(radius = radius)

    return math.pow(radius,2) * math.pi


def _check_if_values_are_strings(**values):
    for k,v in values.items():
        if (isinstance(v,str)):
            raise TypeError("{0} is a string".format(k))

def _check_if_values_are_negitive(**values):
    for k,v in values.items():
        if v < 0:
            raise ValueError("{0} is a negitive".format(k))

Моя главная забота заключается в использовании _check_if_values_are_strings и _check_if_values_are_negitive методы. Я использую их правильно, или есть ли лучший подход для проверки параметров брикетирования расчет?



547
3
задан 6 марта 2018 в 01:03 Источник Поделиться
Комментарии
2 ответа

Вместо нескольких _check_if_values_are_что-тоы, просто есть один проверьте тип значений, которые вы хотите. Вы хотите, чтобы значения быть положительным действительным числом, просто отстаивать их:

def ensure_positive_reals(*values):
assert all(val >= 0 for val in values)

который поднимет ValueError если какой-либо из val была строка и AssertionError если какой-либо из них отрицательных (спасибо Матиас). Чтобы использовать его, вы должны:

ensure_positive_reals(radius)
ensure_positive_reals(length, width)
ensure_positive_reals(base_value, height)


Вместо math.powиспользуйте возведения в степень выражение **:

math.pi * (radius ** 2)

что быстрее.

2
ответ дан 6 марта 2018 в 09:03 Источник Поделиться

Несколько вещей:


  1. Квадраты не имеют ширину и высоту, эти прямоугольники

  2. Вы убедитесь, что ваши ценности не stringы, что если они listS (или другие типы объектов)?

  3. Ваша ошибка контрольной функции, если их название верно, это нелогично. Что-то вроде ensure_value_is_positive было бы лучше имя.

3
ответ дан 6 марта 2018 в 03:03 Источник Поделиться