2016-10-02 104 views
0

中寫出一個條件語句來寫一個函數,該函數將一個名爲aList的列表作爲參數。如果列表中包含1到6之間的整數,那麼它返回一個布爾值True,否則返回False。統計每個元素出現在列表中的次數。然後從這個

這是作業,我認爲我說得對,但它現在告訴我,它是不正確的。這是我的代碼。

def isItAStraight(aList): 
    count = 0 
    for i in set(aList): 
     count += 1 
     return aList.count(i) == 1 

,即使一旦它仍然給真實,我想不通爲什麼它不會給我假的,除非第一個或最後一個數字的轉換的數字出現超過某些原因。

每個數字只能出現一次,否則它是錯誤的。

所以就像[1,2,3,4,5,6] 會是真的。 但[1,2,2,3,4,5] 將是錯誤的。

而且,我無法導入之類的櫃檯或集合(雖然這將是這麼容易做到這一點是沒有拆開的分配。)

名單是隨機產生1到6。

回答

2

在循環內部有return,您只能檢查一個值。你需要檢查每個值。另外,不要循環遍歷列表中的項目,而應該遍歷實際要查找的項目。這也有助於確保列表中有正確數量的項目。

def isItAStraight(aList): 
    if len(aList) != 6: 
     return False 
    for i in range(1, 7): 
     if aList.count(i) != 1: 
      return False 
    return True 

但要做到這一點最簡單的方法是簡單地對列表進行排序,並檢查它是否是你在找什麼:

def isItAStraight(aList): 
    return sorted(aList) == list(range(1, 7)) 
+0

有人可以告訴我這個答案有什麼問題,使它值得讚賞嗎? – TigerhawkT3

+0

其實這個答案幫我解決了我的代碼有問題。我不知道爲什麼它被拒絕投票。我沒有意識到我只是檢查一個元素。 (仍然是python的新手)因此,直到你說了些什麼之後,我才發現它有什麼問題。 – Wiggs

2

你需要注意什麼裏面的名單。什麼你寫的是基本相同下面的僞代碼:

let count = 0 
for every unique element in aList: 
    Add 1 to count 
    if count is now 1, return true. 

這將總是返回true,如果有至少一個元素aList,因爲你加1計數,然後立即返回。

幾種方法可以考慮:

  1. 創建一個名爲flags全零6元素列表。遍歷aList並將flags中的對應元素設置爲1。如果flags是全部,那麼你返回true。
  2. 對列表進行排序,然後檢查前六個數字是否爲1, 2, 3, 4, 5, 6
+0

我忘了提列表中的內容。我已經改變了我的帖子,上面反映了它,但列表僅僅是一個從1到6的隨機生成列表。 – Wiggs

相關問題