Python 我如何修复这个程序,它将一个列表中的所有整数相加,除了等于所说总和的那个整数之外?

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 ==

我试图解决一个问题,我必须输入几个整数作为输入(用空格分隔),然后打印出所有其他整数之和的整数

例如:

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 == 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