Python 我如何修复这个程序,它将一个列表中的所有整数相加,除了等于所说总和的那个整数之外?
我试图解决一个问题,我必须输入几个整数作为输入(用空格分隔),然后打印出所有其他整数之和的整数 例如: 1233会给出:3,因为3=1+2 1 3 5 9会给出:9,因为5+3+1=9 这是我目前拥有的代码:Python 我如何修复这个程序,它将一个列表中的所有整数相加,除了等于所说总和的那个整数之外?,python,python-3.x,list,Python,Python 3.x,List,我试图解决一个问题,我必须输入几个整数作为输入(用空格分隔),然后打印出所有其他整数之和的整数 例如: 1233会给出:3,因为3=1+2 1 3 5 9会给出:9,因为5+3+1=9 这是我目前拥有的代码: x = input().split(" ") x = [int(c) for c in x] y = 0 for i in range(len(x)-1): y += x[i] del x[i] z = sum(x) if y ==
x = input().split(" ")
x = [int(c) for c in x]
y = 0
for i in range(len(x)-1):
y += x[i]
del x[i]
z = sum(x)
if y == z:
print(y)
break
else:
x.insert(i,y)
作为输出,无论发生什么,它都不会给出任何结果。
有人发现错误吗?我会非常棒,因为我只是一个有很多东西要学的初学者:)如果保证其中一个整数是所有其他整数的总和,你能不能对输入列表排序并打印最后一个元素(假设为正整数) (我把你奇怪的名字
x
改名为numbers
)
解释如下:
如果存在一个元素s
,使得s=(其他元素的总和)
,然后
(所有元素之和)=s+(其他元素之和)=s+s=2*s
所以
s=(所有元素的总和)/2
我认为这是一个棘手的问题,可以通过使用技巧快速完成
i、 e创建一个包含所有键的字典,并将总和存储为值,如
{1: 18, 3: 18, 5: 18, 9: 18}
现在迭代字典,如果val-key在字典中,那么这就是数字
a = [1, 3, 5, 9]
d = dict(zip(a,[sum(a)]*len(a)))
print([k for k,v in d.items() if d.get(v-k, False)])
如果最后输入的数字始终是输入序列中先前数字的总和。您的问题在于x.insert(i,y)语句。例如,以以下输入序列为例: “1 2 5 8”
after the first pass through the for loop:
i = 0
z = 15
x = [1, 2, 5, 8]
y = 1
after the second pass through the for loop:
i = 1
z = 14
x = [1, 3, 5, 8]
y = 3
after the third pass through the for loop:
i = 2
z = 12
x = [1, 3, 8, 8]
y = 8
and the for loop completes without printing a result
我真的不知道你的代码应该做什么。它看起来与问题完全无关,正如你所说的那样,
1 3 5 9
给出9
对我没有帮助,当前面的例子是1 2 3
时,你给出的答案是两个例子中的最后一个字符。您是否试图在代码中进行累积求和?很抱歉造成混淆,这是我试图解决的问题:通常在迭代列表时不需要修改列表。如果您需要的话,为什么不使用z=sum(x)-x[i]
?此外,您的定义是指“所有其他整数的总和”;但是在你的代码中有y
,它是“到目前为止所有整数的总和,包括这一个”。如果保证存在一个等于所有其他整数总和的整数,那么它必须正好是总和的一半,所以你可以返回sum(x)/2
。好主意,但我要说返回int(sum(x)/2)
因为它需要打印一个整数。谢谢Peteris,这很有效。PApostol的解决方案也很好,不过我忘了提到输入也可以是负整数。执行命令import this
,然后仔细阅读前3条语句。;-)@MarianD明白了我觉得你的解决方案很有趣需要O(n)?我的也需要O(n),我在问?@DeepakTripathi,可能所有的解决方案都内在地在O(n)中
a = [1, 3, 5, 9]
d = dict(zip(a,[sum(a)]*len(a)))
print([k for k,v in d.items() if d.get(v-k, False)])
after the first pass through the for loop:
i = 0
z = 15
x = [1, 2, 5, 8]
y = 1
after the second pass through the for loop:
i = 1
z = 14
x = [1, 3, 5, 8]
y = 3
after the third pass through the for loop:
i = 2
z = 12
x = [1, 3, 8, 8]
y = 8
and the for loop completes without printing a result