2017-03-08 76 views
0

我只是想实现突变集合,以下是相同组突变,为什么下面的代码不给我想要的结果

a=raw_input() 
setA=set(list(map(int,raw_input().split()))) 
N=int(raw_input()) 
for i in range(N): 
    operation=raw_input().split() 
    setB=set(list(map(int,raw_input().split()))) 
    if 'update' in operation[0]: 
     setA.update(setB) 
    elif 'intersection_update' in operation[0]: 
     setA.intersection_update(setB) 
    elif 'symmetric_difference_update' in operation[0]: 
     setA.symmetric_difference_update(setB) 
    elif 'difference_update' in operation[0]: 
     setA.difference_update(setB) 
print sum(setA) 

的代码,如果我执行上面的代码,我通知是没有说明,除了实际更新实施... 有人可以解释我背后的原因! 输入=串与它们之间的空间 输出应存在于组A的元素为您的响应 致谢总和预先:)

+5

如果'update'不'操作[0]',怎么能'intersection_update','symmetric_difference_update'和'difference_update'出现在'操作[0]'?所以,你的任何'elif'永远不会被执行。 –

+0

'operation [0]'可能的值是多少?为什么在操作[0]中测试''update'而不是'update'== operation [0]'? –

+0

谢谢@PeterWood :) – deb

回答

0
if 'update' in operation[0]: 
    setA.update(setB) 
elif 'intersection_update' in operation[0]: 
    setA.intersection_update(setB) 
elif 'symmetric_difference_update' in operation[0]: 
    setA.symmetric_difference_update(setB) 
elif 'difference_update' in operation[0]: 
    setA.difference_update(setB) 

密切关注这个代码段。如果子字符串update不在operation[0]中,则不存在intersection_update存在于operation[0]中。一些去其他elifs。

另一方面,假设您的operation[0]包含symmetric_difference_update,即使那么相应的elif也不会被调用。因为,那么if 'update' in operation[0]也是如此,这将被执行。所以,即使对于有效的输入,只有第一个将被执行。

那么解决方案是什么?

您必须更改条件的顺序。将较大的字符串放在顶部,并在底部放置较大字符串的子字符串,以避免生成大于大写的字符串。解决的办法之一:

if 'symmetric_difference_update' in operation[0]: 
    setA.symmetric_difference_update(setB) 
elif 'difference_update' in operation[0]: 
    setA.difference_update(setB) 
elif 'intersection_update' in operation[0]: 
    setA.intersection_update(setB) 
elif 'update' in operation[0]: 
    setA.update(setB) 

或者更恰当地说,你可以检查==而非in。那么顺序无关紧要。

+0

@PeterWood,已经添加了。谢谢你。 –

+0

了解(y) 感谢您的解释:) – deb

0

不能完全确定什么样的输入数据要处理,但林猜测,问题是,你正在使用

needle in haystack 
它匹配它匹配的确切字符串的一部分,而不是

A==B 

串。在做这件事之前,可能你会想要去掉空白空间。所以我建议尝试此:

a=raw_input() 
setA=set(list(map(int,raw_input().split()))) 
N=int(raw_input()) 
for i in range(N): 
    operation=raw_input().split() 
    setB=set(list(map(int,raw_input().split()))) 
    command = operation[0].strip() 
    if 'update' == command: 
     setA.update(setB) 
    elif 'intersection_update' == command: 
     setA.intersection_update(setB) 
    elif 'symmetric_difference_update' == command: 
     setA.symmetric_difference_update(setB) 
    elif 'difference_update' == command: 
     setA.difference_update(setB) 
print sum(setA) 
+0

大量的猜测,最好先澄清与原始问题的意见。 –

相关问题