2016-05-10 11 views
3

チック・タック・トー・ゲームを構築しようとしていますが、ボードがあるかどうかを確認するために働く機能に問題がありますフル。ボードのための私のリストは
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を参照してください。 org/3/library/stdtypes.html#sequence-types-list-tuple-range)を参照してください)。 Python 2には、特定の値の有無よりも複雑なものをチェックしているときに使用できる、より一般化された関数 'reduce'、' all'、 'any'もありました。私は彼らがまだどこかでPython 3で利用できると思いますが、直感的ではないためにグローバル関数として 'reduce'について覚えていると思います。 – Steve314

答えて

1

ループを実行するとき(ボード内のyの場合)、yはすでにボードリストの要素であり、インデックスする必要はありません(board [y])。ボード[y]をyに置き換えるだけで問題は解決します。

+0

また、 'else'は不要でエラーを引き起こします。 –

2

あなたのやっていることよりも簡単です。誤解はあなたのforループにあります。リストを反復するとき、yの値はboardリストの項目のインデックスではなく、各項目のです。だから、

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

return True 

あなたの混乱の原因は、おそらくforループを使用してPythonのdictの繰り返し処理を行う場合、(この場合はyで)変数が実際に辞書だろう、という事実から来ていますキー。そして、辞書のその位置にある値にアクセスするには、キーを使用する必要があります。しかしそれは辞書のためのものです。リストがあります。したがって、その必要はありません。

しかし、それを行うにしても迅速な方法があります:

それだ
if ' ' in board: 
     return False 
    return True 

...いいえfor、いいえ、何も。 Pythonのin演算子は、値がリスト(または特定の他の型)に含まれているかどうかを指示します。

あなただけ...もっと最小限取得したい場合:

return not ' ' in board 

それだ...コードは1行だけ。それが動作する方法は..ですボードのスペースの値を持つ項目がない場合board内のアイテムのいずれかが空白、またはFalseある場合' ' in boardTrueの値を持ちます。しかし、空白がある場合はFalseの値が必要です。Trueでない場合は、notを前面に置くことで、TrueをFalseに、逆を逆にします。

あなたが学んでいるので、この最小限のアプローチを取ることが必ずしも良いではないのですが、私はあなたがPythonがこれらの事をどのように処理するかをよりよく理解するであろうように、私は私の答えに追加すると考えました。

-1

あなたのコードは完全に正しいですが、1つです。ボードが辞書ではなくリストであることを確認しますか?リストにはキーと値のペアはありません。

ここで、固定コードです://docs.python:

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

これはOP – Bg1850

+0

@ Bg1850と同じ問題を引き起こします。 – phriol

+0

どうすれば動作しますか? 'board = [''、 ''、 ''、 ''、 ''、 ''、 '' ' 、 ''] ' – Bg1850

関連する問題