Разделите каждый элемент на следующий в Python
Как я могу Разделить каждый элемент на следующий в функции деления? Я передаю произвольные аргументы в вызывающей функции. Заранее спасибо.
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 ответа
Я не уверен, что я понимаю, что вы хотите, но если вы ожидаете звонить division()
с параметрами 100, 3, 2
и вычислить (100 / 3) / 2
(ответ: 16.6666
) затем
def division(*number):
numm = number[0]
for num in number[1:]:
numm /= num
return numm
Это не аналогично другим функциям, потому что они начинаются с numm
установить на ноль. Установка в 1 будет работать для умножения, но для деления это не поможет. Вам нужно установить его на первый параметр, а затем разделить последовательно на остальные параметры.
В Python 3 вы можете изящно достичь этой цели с помощью reduce
из библиотеки functools. Из документации:
Примените функцию двух аргументов кумулятивно к элементам последовательности слева направо, чтобы свести последовательность к одному значению. Например, Reduce(лямбда x, y: x+y, [1, 2, 3, 4, 5]) вычисляет ((((1+2)+3)+4)+5). Левый аргумент, x, является накопленным значением, а правый аргумент, y, является обновленным значением из последовательности. Если присутствует необязательный инициализатор, он помещается перед элементами последовательности в вычислении и служит по умолчанию, когда последовательность пуста. Если инициализатор не указан и последовательность содержит только один элемент, возвращается первый элемент.
И в качестве примера, как его можно использовать в вашем коде, чтобы он выглядел намного лучше:
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")