1

我有 2 个列表:

Gigits_ListGuesses_list

我需要比较它们并找到公牛和奶牛的位置(就像真正的游戏一样)

例如:如果一个列表是['1', '3', '4', '6'],第二个列表是['2', '3', '6', '4']. 所以是“2C 1B”2牛和1牛

    #setting the secret length
    Secret_Length = int(raw_input("the secret length"))

    #setting the secret base
    Secret_Base = int(raw_input("secret base_between 6-10"))

    #getting the secret from the user
    Secret = str(raw_input("enter the secret"))

    #checking if the secret in the right length
    if (int(len(Secret)) != Secret_Length):
        print "ERROR"
        sys.exit()

    Gigits_List = []
    #checking if the number in the right base
    for Each_Digigt in Secret:
        Gigits_List.append(Each_Digigt)
        if (int(Each_Digigt)>Secret_Base-1):
            print "ERROR"
            sys.exit

    #getting a guess from the user
    Guess = str(raw_input("enter the guess"))

    Guesses_list = []
    for Each_Guess in Guess:
        Guesses_list.append(Each_Guess)
4

2 回答 2

1
list1 = ['1', '2', '3', '3']
list2 = ['1', '3', '3', '3']

cow, bull, removed = 0, 0, 0
for i in range(len(list1)):
    if list1[i - removed] == list2[i - removed]:
        bull += 1
        list1 = list1[:i - removed] + list1[i - removed + 1:]
        list2 = list2[:i - removed] + list2[i - removed + 1:]
        removed += 1
for i in range(len(list2)):
    if list2[i] in list1:
        cow += 1
print cow, bull

输出

0 3
于 2013-11-15T13:45:45.860 回答
0
B=0
C=0
list1 = ['1', '2', '3', '3']#target list
list2 = ['1', '3', '3', '3']#guess list
rest_val_1 = []
rest_val_2 = []
for val_1,val_2 in zip(list1,list2):
   if val_1 == val_2: B+=1
   else:
      rest_val_1.append(val_1)
      rest_val_2.append(val_2)
if not rest_val_2:print "YOU WIN"
else:
   for val_2 in rest_val_2:
      if val_2 in rest_val_1:
          C+=1

使用 list1[:i - removed] + list1[i - removed + 1:] 很好。但是 list[:] 每次都会创建一个新列表,因此会花费更多时间。

于 2013-11-15T18:21:21.417 回答