将每个元素除以python中的下一个元素

时间:2018-06-14 13:16:16

标签: python function calculator multiple-arguments

我怎样才能将每个元素除以除法函数中的下一个元素?我在调用函数中传递任意参数。提前致谢。

    def add(*number):
        numm = 0
        for num in number:
            numm =num+numm
        return numm

    def subtract(*number):
        numm = 0
        for num in number:
            numm = num-numm
        return numm

    def division(*number):
        #i am facing problem here
        # numm = 1
        # for num in number:

        try:
        if (z>=1 and z<=4):
            def get_input():
                print('Please enter numbers with a space seperation...')
                values = input()
                listOfValues = [int(x) for x in values.split()]
                return listOfValues

            val_list = get_input()

            if z==1:
                print("Addition of  numbers is:", add(*val_list))
            elif z==2:
                print("Subtraction of numbers is:", subtract(*val_list))
            elif z==3:
                print("division of numbers is:", division(*val_list))

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的需求,但如果您希望使用参数division()和计算100, 3, 2致电(100 / 3) / 2(答案:{{1}然后

16.6666

它与其他功能不相似,因为它们以def division(*number): numm = number[0] for num in number[1:]: numm /= num return numm 设置为零开始。将它设置为1将适用于乘法,但对于除法它不会有帮助。您需要将其设置为第一个参数,然后依次除以其余参数。

答案 1 :(得分:0)

在Python 3中,您可以使用functools库中的reduce优雅地实现此目标。来自文档:

  

将两个参数的函数累加到序列项中,   从左到右,以便将序列减少到单个值。   例如,reduce(lambda x,y:x + y,[1,2,3,4,5])计算   ((((1 + 2)3)4)5)。左参数x是累计值和   正确的参数y是序列的更新值。如果   可选的初始化程序存在,它放在项目之前   计算中的序列,并在序列时作为默认值   是空的。如果没有给出初始化程序,序列只包含一个   item,返回第一个项目。

作为示例如何在代码中使用它,以便它看起来更好:

from functools import reduce


def get_input():
  print('Please enter numbers with a space seperation...')
  values = input()
  listOfValues = [int(x) for x in values.split()]
  return listOfValues

def add(iterable):
  return sum(iterable, start=0)
  # or reduce(lambda x, y: x + y, iterable, 0)

def subtract(iterable):
  return reduce(lambda x, y: x - y, iterable, 0)

def division(iterable):
  return reduce(lambda x, y: x / y, iterable, 1)


if __name__ == '__main__':
  try:
    print("Operation_type: ")
    value = input()
    operation_type = int(value)
  except ValueError:
    operation_type = -1

  if (operation_type >= 1 and operation_type <= 4):
    values = get_input()

    if operation_type == 1:
      print("Addition of  numbers is: {}".format(add(values)))
    elif operation_type == 2:
      print("Subtraction of numbers is: {}".format(subtract(values)))
    elif operation_type == 3:
      print("division of numbers is: {}".format(division(values)))

  else:
    print("An invalid argument was specified: `operation_type` must be in range between 1 and 4")