Функция + свичер в питоне

У меня проблема с использованием функций и переключателя в Python: у меня есть эта функция производственных затрат:

def fcostoproduccion (X,periodo):
if X > 0:
    switcher = {
            1:  200 + 15 * X,
            2:  100 + 20 * X,
            3:  100 + 4 * (X ** (1 / 2)),
            4:  100 + 3 * X,
            5:  150 + 6 * X,
            6:  200 + 12 * (X ** (1 / 2)),
            7:  200 + 15 * X,
            8:  100 + 10 * X,
            9:  100 + 6 * (X ** (1 / 2)),
            10: 200 + 5 * (X ** (1 / 2)),
            11: 100 + 10 * X,
            12: 150 + 6 * X

            }
return

И в конце я пытаюсь найти значение:

  for l in range(j+1, k+1):
    Ordenar = O[l] 
    Produccion = fcostoproduccion(Demanda, l)

Я знаю, что делаю ошибку, но не знаю, как ее исправить. Заранее спасибо.

2 ответа

Решение

Пара вещей с функцией fcostoproduccion:

  1. Всегда возвращается None
  2. Не имеет побочных эффектов
  3. Он использует только первый переданный в него аргумент (т. Е. Параметр periodo не используется в функции).

Трудно определить ваше намерение с помощью функции, однако я думаю,

  1. Вы хотите вычислить значение на основе X
  2. Формула для вычисления желаемого возвращаемого значения варьируется для разных значений X отсюда и словарь switcher,

Исходя из приведенных выше предположений, вы можете изменить функцию fcostoproduccion следующее:

def fcostoproduccion(X):
    switcher = {
    1:  200 + 15 * X,
    2:  100 + 20 * X,
    3:  100 + 4 * (X ** (1 / 2)),
    4:  100 + 3 * X,
    5:  150 + 6 * X,
    6:  200 + 12 * (X ** (1 / 2)),
    7:  200 + 15 * X,
    8:  100 + 10 * X,
    9:  100 + 6 * (X ** (1 / 2)),
    10: 200 + 5 * (X ** (1 / 2)),
    11: 100 + 10 * X,
    12: 150 + 6 * X
    }
    return switcher[X] if X in switcher else None #Handle cases where X switcher is not defined for X 

>>> [fcostoproduccion(i) for i in range(14)]
[None, 215, 140, 106.92820323027551, 112, 180, 229.39387691339815, 305, 180, 118.0, 215.81138830084188, 210, 222, None]

Если я правильно понимаю, вам нужно поведение старого доброго коммутатора. К сожалению, в Python нет встроенного переключателя. Предпочтительным способом является использование словаря. Таким образом, вы действительно близко. Попробуйте заменить ваше заявление возврата:

return switcher[X]

Обратите внимание, что вы хотите вернуть его, только если X > 1, поэтому обязательно сделайте отступ return Заявление и обрабатывать else дело как хочешь.

Обратите внимание, что в этом случае ваш второй аргумент кажется совершенно бесполезным. Так что вы можете удалить periodo,

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