2016-05-10 20 views
3

我正在嘗試構建一個tic tac腳趾遊戲,並且在製作工作函數時檢查板子是否有問題充分。我對董事會名單
board = [' ',' ',' ',' ',' ',' ',' ',' ',' ']
和我的功能是如何解決我的函數,檢查我的井字遊戲中的全板

def fullBoard(): 
"""Returns a boolean value reporting the state of the board, full or not. 
True for full, False for not full.""" 
for y in board: 
    if board[y] == ' ': 
     return False 
     print(False) 
     break 

else: 
    print(True) 
    return True 

什麼,我想要它做的是搜索列表中的每個項目,當它找到一個「」或空間,則返回false和休息循環。但如果沒有''它返回真正意思董事會已滿(我把打印功能只是爲了我的緣故,當我試圖修復織補事情。)

我認爲這會工作,但我得到TypeError :列表索引必須是整數或切片,而不是str指向我的if board[y] == ' ':行。如果有人知道如何以我想要的方式工作,那會很棒。另外請注意,我只在comp prog 1中,並且處於非常基礎的級別,所以簡單性最好。 (也請不要試圖縮短或跑得更快,我只是想知道我犯的錯誤是什麼,所以我可以從中學習)。非常感謝!

+0

另一種選擇是避免使用'in'或'不in'運營商自己的編碼循環(見[這裏](HTTPS://docs.python。 org/3/library/stdtypes.html#sequence-types-list-tuple-range)。在Python 2中,還有更多的泛化函數'reduce','all'和'any',您可以在檢查比特定值的存在/不存在更復雜的東西時使用。我想他們仍然可以在Python 3中找到,但我想我記得'reduce'作爲一個全局函數被棄用,因爲它不直觀。 – Steve314

回答

1

當您執行循環時(對於板中的y),y已經是棋盤列表中的元素,並且您不需要對它進行索引(棋盤[y])。只需用y替換board [y],那應該可以解決你的問題。

+0

另外,'else'不是必需的,並且會導致錯誤。 –

2

它比你現在做的更容易。誤解在您的for循環中。在迭代列表時,y的值不是board列表中項目的索引,而是每個項目的

所以:

for y in board: 
    if y == ' ': 
     return False 

return True 

你的困惑的來源可能來自一個事實,即,使用for循環遍歷Python字典時,實際上將變量(在這種情況下y)字典鍵。然後,您需要使用該鍵來訪問字典中該位置的值。但是這是一本字典..你有一個列表。因此不需要那個。

但有一個更快的方式做到這一點:

if ' ' in board: 
     return False 
    return True 

就是這樣..沒有for,什麼都沒有。 Python的in運算符告訴你一個值是否包含在一個列表(或某些其他類型)中。

如果你想獲得更多的最小..只是:

return not ' ' in board 

就是這樣..代碼只需一行。它的工作方式是...... ' ' in board的值爲True(如果board中的任何項目是空格)或False(如果沒有具有空間值的項目)。但是如果有空格,你想要的值爲False,如果不是,則需要True ..所以通過將not放在前面,可以反轉該值。將True設置爲False,反之亦然。

由於您正在學習,採取這種最簡單的方法並不一定好,但我想我會將它添加到我的答案中,以便您更好地理解python如何處理這些事情。

-1

你的代碼是完全正確的,但有一點。看看董事會不是一本字典,而是一份清單?列表沒有鍵/值對。

這裏的固定代碼:

def fullBoard(): 
    for y in board: 
     if board[y] == ' ': 
      return False 
     else: 
      return True 
+1

這會引起與OP – Bg1850

+0

@ Bg1850相同的問題它對我有效 – phriol

+0

它如何與 一起使用board = ['','','','','','','','','','','','' ,'']' – Bg1850