Вычисление значения функции
y = f(x)

Дана функция y = f(x). Например, такая (какая именно - не столь важно):

y = x - 0.5, при x > 0;
y = 0, при x = 0;
y = |x|, при x < 0.

Написать программу, определяющую значение y по переданному значению x.

Решение задачи на языке программирования Python

При решении подобных задач - выражения с переменной x (после знака =), которые приравниваются y, не так важны. Они могут быть разными от задачи к задаче.

Самое главное - это наличие двух и более условий, то есть диапазонов x. "Сумма" диапазонов должна покрывать все возможные значения, а сами диапазоны не должны перекрываться. Так в примере функции выше x может быть больше, меньше или равен нулю. Любое число попадет в один из трех промежутков.

В задаче может быть два условия. Например:

y = x / 2, при x >= 100;
y = x / 1.5, при x < 100;

Однако здесь также учитываются все возможные значения x.

При написании программы, которая вычисляет значение функции, необходимо использовать оператор ветвления (условный оператор) с количеством "ветвей" равным количеству условий (вариантов вычисления значения функции). В Python для множественного ветвления используется оператор if-elif-else, в котором при необходимости может быть множество веток elif, как и ни одной.

Рассмотрим такой программный код, решающий данную задачу:

x = float(input())

if x > 0:
    y = x - 0.5
elif x < 0:
    y = abs(x)
elif x == 0:
    y = 0

print(y)

Это верное решение, однако оно имеет один недочет. Несмотря на то, что в условиях веток мы предусмотрели все варианты, интерпретатор Питона не может это знать или как-то оценить. То есть он не может прийти к выводу, что все варианты значения x учтены. Поэтому для него существует гипотетическая ситуация, когда значение x не подпадает ни под одно условие в заголовках веток условного оператора. В этом случае переменная y не будет существовать, а выражение print(y) будет выводить ошибку.

Чтобы избежать неоднозначности, мы можем заменить последнее elif на else, в ветку которого попадают все неучтенные до этого случаи.

x = float(input())

if x > 0:
    y = x - 0.5
elif x < 0:
    y = abs(x)
else:
    y = 0

print(y)

Такая замена возможна, так как если x ни больше и ни меньше нуля, то он ему равен. Однако в этом случае теряется наглядность примера. Теперь мы, люди, явно не видим условия x == 0 и должны подумать, выполнив оценку программного кода. Хотя для интерпретатора, избегания потенциальных ошибок и лишних действий (нет третьего сравнения) такой код лучше.

Также мы можем ввести переменную y до условного оператора и присвоить ей один из вариантов вычисления значения функции.

x = float(input())
y = 0

if x > 0:
    y = x - 0.5
elif x < 0:
    y = abs(x)

print(y)

В данном случае, если x равен нулю, то y остается равным также нулю, так как ни одна из веток оператора ветвления не сработает. Также доволен интерпретатор, так как y в любом случае будет иметь значение.

Минусом такого решения может быть сложность выражения вычисления. Допустим, наша функция y = f(x) выглядит так:

y = x - 0.5 + 2.5, при x > 0;
y = -0.12 + x / 2, при x = 0;
y = |x| * 3.2 - 1.8, при x < 0.

В этом случае, присвоив y одно из выражений заранее, в случае неподходящего под это выражение значения x, программе придется выполнять еще одно сложное выражение.


Решение задач на Python




Все разделы сайта