Поиск способа использовать вычитание между всеми элементами в функции в Python

#python #arrays #arraylist #subtraction

#python #массивы #arraylist #вычитание

Вопрос:

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

До сих пор мне удавалось заставить это работать с добавлением и умножением. Ниже приведена функция, которая сохраняет входные данные в виде элементов в моем массиве:

Есть ли способ создать обратный текущий итог путем вычитания текущего итога при вводе следующего элемента? Кроме того, возможно ли сделать так, чтобы числа стали отрицательными при обратном вводе итогов и элементов?

TL; DR Я хотел бы вычитать между каждым элементом списка при подсчете текущего итога. Если возможно, мне нужен способ заставить отрицательные числа работать также для ввода и обратного текущего итога, все это числа с плавающей запятой, а не целые числа.

 def number_list(operator_item, previous_total): 
    number_list = []
    counter = 1
    print("Enter values, enter '=' to create final answer and copy answer")
    while number_list != "=":         
        try:
            list_value = float(input())
        except ValueError: 
            sentinel_value = input("Type '=' again to finalize calculation, copy answer, and return to menu to select another operationn") 
            if sentinel_value == "=":
                copy(running_total)
                return running_total

            else:
                 print("Invalid option")
            menu_selection() #This is irrelevant

        number_list.append(list_value)
        counter  = 1

        if operator_item == " ":
            running_total = addition(number_list)
            print("Current sum:", running_total   ans)

#Using function as an example. Subtraction will be a separate function as well
def addition(number_array):
    total = sum(number_array)
    return total
  

Ответ №1:

Если я правильно понимаю ваш вопрос, я думаю, что это itertools.accumulate удовлетворяет вашим потребностям для любой операции:

 import itertools
import operator

nums = [5, 3, 4, 2, 1]

# Addition
print(list(itertools.accumulate(nums, operator.add)))
# [5, 8, 12, 14, 15]

# Subtraction
print(list(itertools.accumulate(nums, operator.sub)))
# [5, 2, -2, -4, -5]

# Multiplication
print(list(itertools.accumulate(nums, operator.mul)))
# [5, 15, 60, 120, 120]
  

Есть много других операций, определенных в operator . Если вам не нужны промежуточные результаты, используйте functools.reduce вместо этого. Например, вычитание:

 import functools
import operator

nums = [5, 3, 4, 2, 1]

print(functools.reduce(operator.sub, nums))
# -5
  

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

1. Эй, это совсем немного помогает. Единственная проблема, с которой я сталкиваюсь, заключается в том, что я хочу отображать только текущий элемент. Итак, если я вычту 3 из 5, будет отображаться только 2 (второй элемент). Когда дисплеи запустятся прямо сейчас, они покажут все элементы вплоть до текущего.

2. Можете ли вы продемонстрировать, как применить functools.reduce к сумме? Последний элемент — это то, что я хочу отобразить, без скобок

3. @CodyTapp Прежде всего, очень легко получить доступ к последнему элементу; просто используйте -1 в качестве индекса. В любом случае, я внес правку, демонстрирующую functools.reduce .