Новичок: использовать функцию 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
, Я думаю, вам нужно проверить свою логику.