2017-04-25 51 views
0

我通過這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)

請問你們幫我改進一下代碼嗎?

+0

只有'd1 == d2','d == d1和d == d2'纔可以爲真。你確定嗎? –

+0

您的代碼中似乎存在一些邏輯問題。你能告訴我們你想解決什麼問題嗎? – Allen

+0

字典變量中的d1和d2是什麼? –

回答

1

我們正在迭代list類型的數據結構。所以給變量賦予有意義的名稱。我已經給出了input_list =["d1", "d2", "d3", "d4"]

當我們迭代listinput_list變量時,那麼將從列表中迭代一個項目。所以我們不能這樣做if d ==d1 and d==d2:,因爲我們正在比較一個項目和兩個始終爲false的不同條件。

我從你的代碼中瞭解到,我們有一個列表,根據一些硬編碼條件,我們必須執行一些場景。

演示:

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中的關鍵字。
+0

第二個解決方案似乎是真的,但在實施您的解決方案時出現以下錯誤: 'TypeError:unhashable type:'dict'' –

+0

不能散列字典。可能是你在字典數據結構中添加/檢查密鑰,該密鑰是字典類型。需要你的代碼給你正確的理由。 ([email protected]) –

+0

第二種方法似乎更傾向於我的問題。但是,您的代碼中存在一些錯誤。在迭代列表中的每個項目時,您將同時檢查每個項目中的兩個字典。 對於'input_list'中'item'的第一次迭代,它只會得到'd1'而'if condition'會檢查'item'中'd1'&'d2'的存在位置 我修改了你的代碼這樣: '如果d1和d2在[x爲input_list中的x]: print'場景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

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 
+0

感謝您的解決方案,但我的輸入是列表,而不是字典。 –

相關問題