寻找一种在Python函数中的所有元素之间使用减法的方法

时间:2019-03-29 03:04:52

标签: python arrays arraylist subtraction

我目前正在制作一个简单的计算器,该计算器将用于连续执行计算。它是菜单驱动的,因此我无法真正在不同的操作之间进行交换,直到最后我可以追加答案并选择其他操作为止(希望我能弄清楚,也许是再来一次)。我需要菜单的选项之一是减法。

到目前为止,我设法通过加法和乘法使它正常工作。下面是一个将输入作为元素存储在我的数组中的函数:

是否有一种方法可以通过将下一个元素输入减去运行总计来创建反向运行总计?另外,是否可以使数字在逆向总计和元素输入中变为负数?

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 :(得分:0)

如果我正确理解了您的问题,我认为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