codeXprojectX Ответов: 1

Как я могу вычесть динамические значения, переданные функции


Мне трудно сохранить первое значение, которое динамически передается через функцию.

Я попытался использовать приведенный ниже код, но первое значение, как показано на рисунке, будет хранить -3(ожидаемое значение 3), так как логика "вычитание-=i" вычислит 0-первое значение, которое будет отрицательным.Пожалуйста, помогите мне с правильным процессом, чтобы следовать.

Аналогично,логика деления

Спасибо.

Что я уже пробовал:

subtraction = 0
def sub(*x):
    l2 =list(x)
    l2.sort(reverse=True)
    sortedValue = l2
    for i in sortedValue:
        global subtraction
        subtraction-=i  #first parameter should not change.but here the value becomes negative
    print("Subtraction of numbers{0} = ".format(sortedValue),subtraction)
    return subtraction

SubtractionResult = sub(20,2,5)

1 Ответов

Рейтинг:
1

Richard MacCutchan

Subtraction = 0
def sub(*x):
    l2 =list(x)
    l2.sort(reverse=True)
    sortedValue = l2
    for i in sortedValue:
        global subtraction

У вас есть два разных написания: Subtraction и subtraction


codeXprojectX

Спасибо за ответ, Ричард.Тем не менее,результат остается тем же самым..(вычитание-=i делает вычитание = 0-i). Я хочу, чтобы мое первое значение было нетронутым, а не отрицательным целым числом. Это должно работать идеально, когда есть 'n' количество значений, передаваемых в вызове функции.

Если def(20,2,5) передается, то переменная temp(вычитание) должна повторяться следующим образом
вычитание = 20/2 -- 10
вычитание = 10/5 -- 2

наконец возвращаем значение 2

Richard MacCutchan

Я запустил ваш исходный код, и он правильно вернул значение -4, выполнив повторные вычитания. Откуда берется это разделение?

codeXprojectX

Извини,это была ошибка.

когда функция sub(20,2,5) вызывается после повторных вычитаний, мой ожидаемый результат равен 13.

например, вычитание = 18(20-2), а затем вычитание = 13 (18-5)

Но с приведенным выше кодом он возвращает значение -27 при вызове функции sub(20,2,5)

Richard MacCutchan

Да, -27 - это правильный ответ. Ваш код начинается со значения 0 и многократно вычитает каждое число из этого значения. Если вам нужен какой-то другой расчет, то ваш код должен быть изменен. Зачем вам нужен список, отсортированный в обратном порядке?

codeXprojectX

Я понимаю, что код должен быть изменен. Как уже упоминалось в моем предыдущем комментарии,мой ожидаемый результат отличается.Я хотел знать, какие изменения в моем коде приведут к получению желаемого результата.. как ТЭМП=параметр1-параметр2 и тогда темп = param3-темп.

Я хочу, чтобы вычитаемое значение трех переданных параметров..20-2-5 привело к 13 после итерации.

Спасибо

Richard MacCutchan

Во-первых, не сортируйте свой список, так как это может повлиять на ответ.
Во-вторых, вы должны установить subtraction поле до первого числа в списке, а затем несколько раз вычесть остальные. Что-то вроде:

l2 = list(x)
subtraction=l2[0] # start with the first number
l2 = l2[1:] # create a new list of the remaining numbers
for x in l2: #
subtraction -= x # subtract each number from the first one

codeXprojectX

Я использовал функцию сортировки, чтобы убедиться, что элементы списка находятся в порядке убывания(так что результат не будет отрицательным).
Я хотел проверить, можно ли динамически вычитать значения с помощью вызова функции.Однако код, который вы даете для вычитания, работает правильно.

Спасибо за ваше драгоценное время :)