2016-12-26 175 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