Функция Python, которая рассчитывает стоимость членства - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь выяснить, как добавить математику в эту функцию:

Вопрос: Напишите программу, которая сначала определяет функцию с сигнатурой CalculateFathersDayPrice (price, isMember). Функция должна возвращать 95% цены, если пользователь не является участником, и 85% цены, если пользователь является участником (то есть, как указано в isMember). Затем ваша программа должна запросить цену и указать, является ли пользователь участником (вы можете предположить, что пользователь вводит «да» или «нет»), вызвать метод convertFathersDayPrice (), а затем распечатать цену, возвращаемую функцией.

Пока мой код:

def calculateFathersDayPrice(price, isMember):
"""Prints price*0.85/100 if isMember is True, prints price*0.95/100 if isMember is
false
"""
if isMember:
    print  price * 0.85/100
else:
    print  price * 0.95/100 

price = raw_input ("Please Enter Price of Item: ")
isMember = raw_input ("Are you a member?: ") 
print 'price:', price, 'Member Status:', isMember
print calculateFathersDayPrice(price, isMember)

Ответы [ 4 ]

1 голос
/ 15 февраля 2012

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

def calculateFathersDayPrice(price, isMember):
    if isMember:
        print  price * 0.85/100
    else:
        print  price * 0.95/100 
  1. Как отметил Ааюш, вам не следует делить на 100. Возможно, вы думали price * 85/100? Несмотря на это, самый простой подход - просто умножить на 0,85 и 0,95.
  2. Вместо того, чтобы печатать значение в функции, вас попросили вернуть значение. Это хороший дизайн, чтобы отделить логику представления от бизнес-логики, и в этом случае бизнес-логика - это расчет. Ваша функция выполняет вычисления и передает результаты обратно в основную часть вашей программы, которая обрабатывает фактическое отображение. Чтобы вернуть значение, это просто return some_value.

Вот измененная версия вашей функции с этими двумя изменениями.

def calculateFathersDayPrice(price, isMember):
    if isMember:
        return price * 0.85
    else:
        return price * 0.95 

Наконец, как отметил Андрей, вам нужно обработать пользовательский ввод и сделать с ним что-то полезное. Вам нужно решить, какие значения принимать от пользователя и что вы собираетесь делать, если они вводят что-то фальшивое. После вашей строки isMember = raw_input ("Are you a member?: ") вам необходимо добавить небольшой код, чтобы превратить ввод пользователя в значение True / False в Python. Кроме того, что вы будете делать, если они ответят: "Сыр фета - это мерзко!" как ответ на ваш вопрос? Это правда или ложь, или вы спрашиваете их снова для более разумного ввода?

1 голос
/ 15 февраля 2012

Я склонен поощрять отсутствие побочных эффектов в функциях, поэтому вы можете использовать «return» вместо «print».

def calculateFathersDayPrice(price, isMember):
    if isMember:
        return price * 0.85
    return price * 0.95

price = float(raw_input("Please Enter Price of Item: "))
isMember = raw_input("Are you a member?: ").lower() in ['true', '1', 't', 'y', 'yes']

print 'Member Status: %s' % isMember
print 'Price: %.2f' % calculateFathersDayPrice(price, isMember)

Это проверит, является ли ответ одним из предоставленных истинных значений, а затем вычислит цену на основе статуса isMember. Наконец, используя форматирование строки, вы получите результат с правильным количеством знаков после запятой.

1 голос
/ 15 февраля 2012

Я не совсем понимаю, о чем вы спрашиваете.

Кроме того, вы не должны снова делиться на 100. Так должно быть: print price * 0.85 и print price * 0.95 соответственно.

0 голосов
/ 15 февраля 2012

Если вы предполагаете, что пользователь вводит yes или no, когда его спрашивают, является ли он / она участником, вам следует оценить его / ее ответ на True или False.Ваша программа теперь печатает price*0.85/100 в любом случае.И да, нет необходимости деления на 100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...