2016-12-26 30 views
0

我試圖尋找到處的答案,我確信它非常簡單,但不知何故我無法使它工作。在Python中比較列表值(數字,順序事項)

我有兩個列表,其中有完全相同數量的值,我想知道有多少人完全匹配值和位置。這是我一直在使用的代碼:

ListA = [1, 2, 3, 4, 5] 

solved = 0 

While solved == 0: 
    rr = 0 
    i = 0 

    userinput = input("Enter a 5 digit number):") 
    ListB = [] 

    for u in userinput: 
     ListB.append(u) 

    While i < 5: 
     if ListA[i] == ListB[i]: 
      rr = rr + 1 
    print(rr) 
    solved = 1 

我要找的是輸出,例如,如果輸入的是12763,2,但它似乎從來如果爲真來評價,所以它永遠不會rr加1。 我試過一個for循環和這個設置的變體,但是我看不出我錯在哪裏。

非常感謝您的時間!

+4

'While'不是Python中的有效構造。你是不是指'while'? –

+0

在Python中,通常直接在集合中的項目上循環,而不是通過索引間接獲取這些項目(比如'i')。這導致了緊湊,簡潔的代碼,例如'sum(int(c)== u for c,u in zip('12763',[1,2,3,4,5]))' –

回答

1

ListA包含整數,而ListB將包含(單個字符)字符串。改爲使用int(ListB[i])

此外,內部while循環是無限的,因爲i永不改變。

0

對我來說就像你是過於複雜的事情。一對夫婦列表內涵應該做的伎倆:

ListB = [int(x) for x in userinput] 
rr = sum([ListA[i] == ListB[i] for i in range(len(ListA))]) 
+2

這仍然有問題用整數比較字符串。 – fuglede

+0

@fuglede喲,很好的接收!我正在試驗翻譯,並抄錯了一行。編輯並修復。 – Mureinik

0

您有幾個問題:

  1. While應該while
  2. 您接收來自用戶的輸入是一個字符串,所以當你遍歷你應該將其轉換爲int,因爲你想比較整數。
  3. 你的i變量永遠不會增加,所以你處於一個無限循環。

試試這個:

ListA = [1, 2, 3, 4, 5] 

solved = 0 

while solved == 0: 
    rr = 0 
    i = 0 

    userinput = input("Enter a 5 digit number):") 
    ListB = [] 

    for u in userinput: 
     ListB.append(int(u)) 

    while i < 5: 
     if ListA[i] == ListB[i]: 
      rr = rr + 1 
     i += 1 
    print(rr) 
    solved = 1 
+0

無法工作,在這裏:用戶輸入中的u: ListB.append(int(u)) – Teshtek

+0

看來input()已經知道輸入是一個整數。我執行這個並得到'int對象是不可信的。我解決了這個問題,通過str()來輸入(),例如:str(input()或userinput在for循環中,例如:for u in str(userinput()。 –

+0

@JoshuaStokes抱歉,我認爲有5個數字,但只是1和5位 – Teshtek

0

input()函數返回一個字符串。在比較之前,您需要將個人數字轉換爲int s。您還可以使用zip()相應項目從兩個列表比較:

>>> listA = [1, 2, 3, 4, 5] 
>>> userinput = input("Enter a 5 digit number: ") 
Enter a 5 digit number: 12567 
>>> listB = [int(x) for x in userinput] 
>>> sum(x == y for x, y in zip(listA, listB)) 
2 
-1

我認爲一個解決辦法是這樣的:

首先而不是當你也永遠不會增加我進入第二個同時也是最後如何可以複製到列表輸入?你使用空間還是如何?你怎麼知道你有5個號碼?我說他們是按空間劃分的?

ListA = [1, 2, 3, 4, 5] 

solved = 0 

while solved == 0: 
    rr = 0 
    i = 0 

    userinput = input("Enter a 5 digit number: ") 
    ListB = [int(x) for x in userinput.split(' ') if x.isdigit()] 

    while i < 5: 
    if ListA[i] == ListB[i]: 
     rr += 1 
    i += 1 
    print(rr) 
    solved = 1 

如果intput是1 2 3 4 5所以輸出5

UPDATE: 如果輸入是5個你還沒有分割的空間,所以找了其他用戶的解決方案數字

+0

用戶輸入沒有請參閱OP的'input'提示符:'Enter an 5 digit numbers):「' –

+0

好完美!謝謝 – Teshtek

+0

這似乎是我的代碼和@ Mureinik的代碼的副本 – lmiguelvargasf