Найти способ использовать вычитание между всеми элементами в функции в Python - PullRequest
0 голосов
/ 29 марта 2019

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

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

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

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 operation\n") 
            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 Ответ

0 голосов
/ 29 марта 2019

Если я правильно понимаю ваш вопрос, я думаю, что 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
...