#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
.