Почему эта функция не возвращает отрицательное число?

#python #function #return-value

#python #функция #возвращаемое значение

Вопрос:

У меня есть эта функция здесь:

 def g(x: int) -> int:
    if x > 0:
        x = x * (-1)
    if x < 0:
        x = x * (-1)
    return x
  

Когда я вызываю функцию для g(10), она возвращает 10. Почему она не возвращает -10? Что я могу сделать, чтобы вернуть -10?

Комментарии:

1. Замените второе if на elif . Или вообще удалите условие, поскольку вы выполняете одну и ту же операцию в обоих случаях

2. Также можно напрямую вернуться изнутри if , чтобы предотвратить продолжение операции при успешном завершении. Создание исключения в конце потока (случай, когда не if возвращается) может помочь найти ошибки

3. @UnholySheep Спасибо, это исправляет проблему. Хотя, разве значение x не было бы задано первым оператором if независимо? Почему добавление elif устраняет проблему? Редактировать: Неважно, теперь я понимаю, почему. Спасибо!

4. Целая функция может быть return -x (если вы вызываете ее только с целыми числами).

5. Второй if проверяется после выполнения первого, включая первое умножение

Ответ №1:

Вы дважды проверили и, следовательно, дважды получили отрицательное значение, простое решение:

 def g(x: int) -> int:
    if x > 0:
        x = x * (-1)
    elif x < 0:
        x = x * (-1)
    return x
    
print(g(10))
  

вывод:

 -10
  

Ответ №2:

Ваш код слишком сложный, поскольку операция одинакова в обоих условиях if — вы могли бы упростить ее :

 def g(x: int) -> int:
    return x * (-1)
  

Но что касается того, почему ваш исходный код не работал —

Представьте, что переданное вами значение равно 10.

Итак, первое условие if if x > 0 выполнено, и теперь x становится -10 ( x=x * -1 )

Затем проверяется 2-е условие if if x < 0 — и это также теперь верно, поэтому x изменяется обратно на 10.

Эти два оператора if независимы друг от друга, и они выполняются в том порядке, в котором вы их задаете, один за другим.

Если вы хотите, чтобы они были зависимыми, используйте elif :

 def g(x: int) -> int:
    if x > 0:
        x = x * (-1)
    elif x < 0:
        x = x * (-1)
    return x
  

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