2017-10-18 54 views
0

在我的代碼中,我做了一個匹配系統,其中有兩個列表,代碼將一個變量添加到列表中相同索引中的每個項目的變量和另一個列表中的項目相同,否則它將另一個變量添加到另一個變量中,然後將這兩個數字放在列表中並打印列表。我不知道如何使我的匹配系統工作

def report(ticket,winner): 
kiss = [] 
Love = [] 
x = 0 
y = 0 
for number in ticket: 
    if number in winner: 
     x +=1 
    elif ticket not in winner: 
      y += 1 
kiss.append(x) 
kiss.append(y) 
print kiss 

錯誤是這樣的輸入是,報表([1,2],[1,2,3]),我希望它兩個附加於x監守他們兩個都在THR正確的位置並且是相同的,那麼它需要向y添加一個,因爲它在那裏並且不匹配,但是它使我得出:[2,0]如果我在報告中([1,3],[1,2,3] )它給了我[2,0],即使你沒有在同一個索引中。該輸出應該是[1,2]。

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [在主題](http://stackoverflow.com/help/on-topic)和[如何提問](http://stackoverflow.com/help/how-to-ask)適用於此處。 StackOverflow不是一個設計,編碼,研究或教程服務。 – Prune

+0

什麼不按照您期望的方式在當前代碼中運行? – davedwards

+0

它沒有在索引中查找匹配項,以確保輸入與其他項相同,但它看起來是否在列表中,而不是正確的放置位置。 –

回答

0

根據您描述的邏輯,您的代碼需要實現一些問題。主要是,在Python中,in運營商檢查是否有任何物品存在 a list,因此對於您的示例將始終爲True,並且您會得到意外的輸出。

相反,我們希望在同一指數檢查中對在winner列表中每個項目的ticket列表中的每個項目,所以檢查每個號碼時,我們必須指定索引。

試試這個:

def report(ticket,winner): 
    kiss = [] 
    Love = [] 
    x = 0 
    y = 0 

    # because we are checking different length lists, set ticket to longest list 
    if len(ticket) > len(winner): 
     pass 
    elif len(winner) > len(ticket): 
     temp = ticket 
     ticket = winner 
     winner = temp 

    for i, number in enumerate(ticket): 
     try: 
      if winner[i] == number: 
       x+=1 
      else: 
       y+=1 
     except IndexError: 
      y+=1 

    kiss.append(x) 
    kiss.append(y) 
    print kiss 

l1 = [1,2] 
l2 = [1,2,3] 
report(l1, l2) # prints [2, 1] 

l1 = [1,3] 
l2 = [1,2,3] 
report(l1, l2) # prints [1, 2] 

這些是你預期的產出?

希望這會有所幫助。

0

這是一個稍短的版本,使用zip

def report(ticket, winner): 
    z = sum(1 for x, y in zip(ticket, winner) if x == y) 
    return [z, max(len(ticket), len(winner)) - z] 
相關問題