如果它与列表中的两个元素匹配,我怎么能*做某事*?

时间:2017-04-25 06:48:14

标签: python

我正在传递这4个字典,其中包含不同类型的测试用例。

 1. Manual-Smoke         ==> d1
 2. Manual- Regression   ==> d2 
 3. Automated-Smoke      ==> d3
 4. Automated-Regression ==> d4

现在我将4个词典列表传递给一个函数     给我数数。 我的问题是得到所有“手动”案件的数量&     “自动化”案件

我有一个名单input_list =[d1,d2,d3,d4]。现在,我必须执行6个场景:

 1. d1 && d2
 2. d3 && d4
 3. d1
 4. d2
 5. d3
 6. d4

因此,如果出现上述任何一种情况,那么我将做一些事情。所以,我使用的代码涵盖了4个场景,但从未涵盖前两个

for d in dict:
  if d ==d1 and d==d2:
    print 'Scenario:1 ==> d1 && d2'
  elif d==d3 and d==d4:
    print 'Scenario:2 ==> d3 && d4'
  else:
    if d==d1:
      print 'Scnario 3: ==> d1'
    elif d==d2:
      print 'Scnario 4: ==> d2'
    elif d==d3:
      print 'Scnario 5: ==> d3'
    elif d==d4:
      print 'Scnario 6: ==> d4'

我知道我的循环永远不属于Scenario 1& Scenario 2条件,因为我的列表不包含(d1,d2) (d3,d4)

你们可以帮助我改进代码吗?

3 个答案:

答案 0 :(得分:1)

我们正在迭代list类型的数据结构。所以给变量赋予有意义的名称。我给了input_list =["d1", "d2", "d3", "d4"]

当我们迭代listinput_list变量时,列表中的一个项目将被迭代。所以我们不能做if d ==d1 and d==d2:,因为我们将一个项目与两个不同的条件进行比较,这两个条件总是假的。

我从你的代码中理解的是,我们有一个列表,根据一些硬编码条件,我们必须执行一些场景。

<强>演示:

input_list =["d1", "d2", "d3", "d4"]



if "d1" in input_list and "d2" in input_list:
  print 'Scenario:1 ==> d1 && d2'
elif "d3" in input_list and "d4" in input_list:
  print 'Scenario:2 ==> d3 && d4'
elif "d1" in input_list:
  print 'Scnario 3: ==> d1'
elif "d2" in input_list:
  print 'Scnario 4: ==> d2'
elif "d3" in input_list:
  print 'Scnario 5: ==> d3'
elif "d4" in input_list:
  print 'Scnario 6: ==> d4'

假设列表包含字典项。

<强>演示

d1 = {}
d2 = {}
d3 = {}
d4 = {}

input_list =[d1, d2, d3, d4]


for item in input_list:
    if "d1" in item and "d2" in item:
        print 'Scenario:1 ==> d1 && d2'
    elif "d3" in item and "d4" in item:
        print 'Scenario:2 ==> d3 && d4'
    elif "d1" in item:
        print 'Scnario 3: ==> d1'
    elif "d2" in item:
        print 'Scnario 4: ==> d2'
    elif "d3" in item:
        print 'Scnario 5: ==> d3'
    elif "d4" in item:
        print 'Scnario 6: ==> d4'

备注:

  1. 不要使用Python的保留关键字。 dict是Python中的关键字。

答案 1 :(得分:1)

以下代码

for d in [1, 2, 3, 4]:
  print d

打印

1
2
3
4

因此,每次循环变量d只有一个值。它不能同时是12

但这是你的一项测试的守卫。即你测试d==1 and d==2被修改以适合我的例子,这将永远不会是这样。

话虽如此,您的代码怎么能改进?看一下下面的代码

1 in [2, 3]

这将打印

False

我们可以从中了解到in可以确定元素是否包含在数组中。因此,不是循环遍历数组,而是尝试检查不同的情况。因此,您的复合测试可能看起来像1 in dict and 2 in dict

答案 2 :(得分:0)

scenario_map={}   

for d in dict :
    scenario_map[d] = 1 

if scenario_map[d1] == 1 and scenario_map[d2] == 1:
    #execute scenario 1
elif scenario_map[d3] == 1 and scenario_map[d4] == 1 :
    #execute scenario 2 
elif scenario_map[d1] == 1 :
    #execute scenario 3 
elif scenario_map[d2] == 1 :
    #execute scenario 4 
elif scenario_map[d3] == 1 :
    #execute scenario 5 
elif scenario_map[d4] == 1 :
    #execute scenario 6
else :
    #No scenario to execute