2016-06-02 15 views
0

Я пытаюсь построить простой калькулятор. Я выполнил добавочную часть, используя функцию sum. Тем не менее, я не могу добиться этого с вычитанием. Я хочу вычесть каждое значение в списке из значения перед ним, т. Е. Если список (пользовательский ввод) равен [10,5,3], я хочу, чтобы мой результат был 10-5-3 = 2. Вот мой код.Вычесть каждое значение списка Python

def calculate(): 
    input = raw_input("input: ") 
    if "+" in input: 
     sum_val = sum(map(float, input.split('+'))) 
     if sum_val.is_integer(): 
      print int(sum_val) 
     else: 
      print sum_val 
    elif "-" in input: 
     print map(float, input.split('-')) 

calculate() 

Пользовательский ввод может быть 10-5-3.

ответ

1
l = [10,5,3]  
s = reduce(lambda x, y: x - y, l) 

сек == 2

1

Попробуйте это -

user_input = [10, 5, 3] 

equation = '-'.join(map(str, user_input)) 

print(equation, '=', eval(equation)) 

Выход -

10-5-3 = 2 
1

Заменить строку map(float, input.split('-')) следующим кодом,

import functools 
import operator 

l = map(float, input.split('-')) 
r = functools.reduce(operator.sub, l) # 3 
1

вам нужны эти две функции:

from operator import sub 
from functools import reduce 
reduce(sub, map(float, input.split('-'))) 
1

попробовать этот

l = [10,5,3] 
if len(l) > 1: 
    ans = l[0] - sum(l[1:]) 
else: 
    ans = sum(l) 
print(ans) 

выход: 2

0

Другие ответы использовать стандартные функции, в частности, functools.reduce.

Следующая выглядит проще для меня, в то время как его используют только списки Намерение:

head, *tail = [10, 5, 3] 
r = sum(-x for x in tail, head) 
print(r) 
+1

Это неправильно. OP требует '10 - 5 - 3', а не' -10 - 5 -3'. –

+0

Соответственно отредактирован ответ. – aluriak

0

Это звучит, как вы могли бы использовать Стража. Часовое в принципе позволяет вам отслеживать произвольное условие в цикле. Дополнение работает отлично, потому что ваша начальная сумма равна 0, и вы можете просто продолжать увеличивать это значение. Но с вычитанием необходимо инициализировать переменную сумму с первым произошедшим целого числа в списке, под индексом 0.

пример:

sum = 0 
print_string = "" 
sample_list = [10,5,3] 
for i in range(len(sample_list)): 
    if (i == 0): 
     sum = sample_list[i] 
    else: 
     sum-=sample_list[i] 

    if ((i+1) < len(sample_list)): 
     print_string = print_string + str(sample_list[i]) + "-" 

    # Now is time to finish it up 
    print_string = print_string + "=" + str(sum) 

    print(print_string) 

Выход:

10-5-3=2 
Смежные вопросы