我正在尝试构建一个简单的计算器。我使用sum函数完成了加法部分。但是,我无法通过减法实现相同的功能。我想从它之前的值中减去列表中的每个值,即,如果列表(用户输入)是[10,5,3],我希望我的输出为10-5-3 = 2。到目前为止,这是我的代码。
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。
答案 0 :(得分:1)
试试这个 -
user_input = [10, 5, 3]
equation = '-'.join(map(str, user_input))
print(equation, '=', eval(equation))
输出 -
10-5-3 = 2
答案 1 :(得分:1)
l = [10,5,3]
s = reduce(lambda x, y: x - y, l)
s == 2
答案 2 :(得分:1)
使用以下代码
替换行map(float, input.split('-'))
import functools
import operator
l = map(float, input.split('-'))
r = functools.reduce(operator.sub, l) # 3
答案 3 :(得分:1)
你需要这两个功能:
from operator import sub
from functools import reduce
reduce(sub, map(float, input.split('-')))
答案 4 :(得分:1)
试试这个
l = [10,5,3]
if len(l) > 1:
ans = l[0] - sum(l[1:])
else:
ans = sum(l)
print(ans)
输出:2
答案 5 :(得分:0)
其他答案使用标准功能,尤其是functools.reduce
。
以下内容对我来说更简单,而它只使用意图列表:
head, *tail = [10, 5, 3]
r = sum(-x for x in tail, head)
print(r)
答案 6 :(得分:0)
听起来你可以使用 Sentinel 。 Sentinel基本上允许您跟踪循环中的任意条件。添加工作正常,因为您的初始总和为0,您可以继续添加以增加该值。但是使用减法,您需要使用列表中第一个出现的整数初始化一个sum变量,索引为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