2015-10-18 77 views
2

我正在嘗試按特定順序(如多選題測試)以「A」,「B」,「C」或「D」讓用戶輸入他的答案。之後我想創建第三個列表並列出正確與錯誤。這是我到目前爲止。將用戶輸入列表與重複項順序進行比較

userAnswersList = [] 
correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A'] 

while len(userAnswersList) <= 19: 
    userAnswers = input('Give me each answer total of 20 questions I\'ll let you know how many you missed.') 
    userAnswersList.append(userAnswers.upper()) 

correctedList = [] 
for i in userAnswersList: 
    if i in correctAnswers: 
     correctedList.append(i) 
    else: 
     correctedList.append('XX') 

print(correctedList) 

所以我的最終結果將是修正的清單,代替「X」,他們錯過了答案,如果這是正確的,它只是把用戶輸入的那個地方。 因此,在用戶輸入他們的20個答案之後,它將看起來像 ['A','C','A','XX','D','B','C','XX','C' 'B''A'''XX''C''A''D''XX''B''B''XX''A'] 如果他們錯過了5按照這個順序

編輯

問題再次感謝您的所有幫助我能解決我的問題,在您的幫助和一些偉大的答案。因爲我們是這樣學習的,所以我使用了Nicks解決方案。

我會嘗試其他人,以便我可以習慣他們。

+0

搜索枚舉一個列表,然後使用userAnswersList中的索引將結果與此索引處的correctAnswers進行比較 – rebeling

回答

0

而不是使用:

for i in userAnswersList: 

你可能會發現更容易通過數組進行迭代,並檢查是否值相等,如:

for i in range(len(userAnswersList)): 
    if userAnswersList[i] == correctAnswers[i]: 
     correctedList.append(userAnswersList[i]) 
    else: 
     correctedList.append('XX') 
+0

這完全修復了我的代碼非常感謝您Nick A – Asuu

1

這裏沒有問題,所以我會假設你問你有什麼問題。

比較部分在兩個列表中使用相同的變量i,但即使它不同也不行。

你需要沿着以下的說法:

for i in range(len(correctAnswers)): 
    correctedList.append(correctAnswers[i] if userAnswersList[i] == correctAnswers[i] else 'XX') 
0

這可以使用Python的map方法完成。

如幫助解釋了地圖:

map(...) 
    map(function, sequence[, sequence, ...]) -> list 

    Return a list of the results of applying the function to the items of 
    the argument sequence(s). If more than one sequence is given, the 
    function is called with an argument list consisting of the corresponding 
    item of each sequence, substituting None for missing values when not all 
    sequences have the same length. If the function is None, return a list of 
    the items of the sequence (or a list of tuples if more than one sequence). 

因此,在這種情況下,你想你的兩個相等列出了每個項目進行比較,並針對它們應用的條件。我們將介紹的條件將遵循以下邏輯:

如果某個列表中的某些內容與另一個列表中的內容不相等,請設置「XX」,否則返回該值。

因此,我們將在這裏介紹所謂的「lambda」函數,以便將上述條件置入。這裏是一個lambda是什麼文件:http://www.python-course.eu/lambda.php

lambda x, y: 'XX' if x != y else y 

所以,當我們把它放在一起,我們有這樣的:

d = map(lambda x, y: 'XX' if x != y else y, userAnswersList, correctAnswers) 

演示:

correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A'] 

userAnswersList = ['A', 'C', 'A', 'B', 'D', 'B', 'C', 'A', 'A', 'B', 'A', 'C', 'C', 'A', 'D', 'C', 'D', 'C', 'D', 'B'] 

結果:

['A', 'C', 'A', 'XX', 'D', 'B', 'C', 'A', 'XX', 'B', 'A', 'XX', 'C', 'A', 'D', 'C', 'XX', 'XX', 'D', 'XX'] 
0

您可以將兩個列表zip在一起,併爲您的常用指標的元素,你可以使用列表理解更換你的,而所有的答案與range

userAnswersList = [input('Give me each answer total of 20 questions I\'ll let you know how many you missed.').upper() 
        for _ in range(20)] 
correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A'] 

correctedList = ["XX" if u_a != c_a else u_a for u_a, c_a in zip(userAnswersList)] 

如果相應的元素從每個列表都是相同的我們添加的信,如果不是,我們添加"XX"來標記不正確的答案。

+0

此地圖還能工作嗎?我只是使用地圖來組合一個解決方案。好奇地知道你的承擔。 – idjaw

+1

@idjaw,它會工作,但我認爲拉鍊將是慣用的方法。 –

相關問題