Новичок: использовать функцию void для расчета стоимости ковров в Python?

Вот что сказано в инструкциях для этого задания:

Напишите программу с именем carpet.py, которая использует функцию void с именем carpet_cost для расчета и отображения стоимости коврового покрытия прямоугольной комнаты. В качестве аргумента функция должна принимать длину комнаты в футах, ширину комнаты в футах и ​​стоимость ковра на квадратный ярд. Эти три значения должны быть получены из пользовательского ввода в основной функции. Функция carpet_cost должна рассчитывать и отображать стоимость ковра в валютном формате со знаком $ прямо перед первой цифрой, разделителем запятой, если сумма указана в тысячах, и двумя десятичными знаками.

Вот что у меня так далеко,

length = int(input("What is the length of tbe room you're trying to carpet?: "))
width = int(input("What is the width of tbe room you're trying to carpet?: "))
cost = int(input("What is the cost per square yard of tbe room you're trying to carpet?: "))

def carpet_cost(total_cost):

    total_cost == ((length * width) / 3) * cost

    print('The cost to carpet this room will be $', format(total_cost, ',.2f'))

carpet_cost(total_cost)

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

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

3 ответа

Решение

Если под "void" вы подразумеваете "ничего не возвращает", у вас уже есть функция void.

Ваш carpet_cost функция принимает один параметр total_cost, но вместо этого он должен принимать три параметра для длины, ширины и стоимости за квадратный ярд. Кроме того, вы должны использовать оператор присваивания = вместо оператора проверки равенства ==,

length = int(input("What is the length of tbe room you're trying to carpet?: "))
width = int(input("What is the width of tbe room you're trying to carpet?: "))
cost = int(input("What is the cost per square yard of tbe room you're trying to carpet?: "))

def carpet_cost(l,w,c):
    total_cost = ((l * w) / 3) * c
    print('The cost to carpet this room will be $', format(total_cost, ',.2f'))

carpet_cost(length,width,cost)

Результат:

What is the length of tbe room you're trying to carpet?: 3
What is the width of tbe room you're trying to carpet?: 3
What is the cost per square yard of tbe room you're trying to carpet?: 50
The cost to carpet this room will be $ 150.00

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

Один из них, безусловно, может быть тем, что вы хотите

#example 1
def carpet_cost(length,width,cost_per_unit):
    return length*width*cost_per_unit

print carpet_cost(length=5,width=10,cost_per_unit=2.10)

#example 1.0005 
def carpet_cost(length,width,cost_per_unit):
    print length*width*cost_per_unit


#example 2 (pass by reference, since a list is editable)
def carpet_cost(args_list):
    length,width,cost_per_unit = args_list
    args_list[:] = [length*width*cost_per_unit]

length,width,cost = 5,10,1.12
result = [length,width,cost] # a list is editable
carpet_cost(result)
print result

Смотрите Python void-подобную функцию. Python динамически типизирован, и его функции всегда что-то возвращают. Если вы не указываете возвращаемое значение, Python автоматически возвращает None,

Кроме того, у вас есть total_cost в качестве аргумента для carpet_cost, которая является функцией, которая вычисляет total_cost, Я думаю, вам нужно проверить свою логику.

Другие вопросы по тегам