2017-10-06 4 views
1

Python(V2.7)では、私はコンピュータプレーヤーに対してConnectFourゲームを作ろうとしています。私は4行を見つけて(ゲームの終わりを判断するための)シンプルな関数を試して、TRUEを返すようになりました。そして今、同じ関数を使って3行を探し出し、その位置を返します。Python:関数返りboolと整数タプル

私が入ることができる
def finder(matrix, player,number): 
    for row in matrix: 
      count = 0 
      for item in row: 
       if item == player: 
        count +=1 
        if count == number: 
         return True 
       else: 
        count = 0 

:ファインダー(ボード、「X」、4)行の4がTRUEであるか、まだデフォルトFALSEで(これは仕事をして)かどうかを知ります。今、私はこのような何かを試してみたい:

def finder(matrix, player,number): 
    for row in matrix: 
      count = 0 
      for item in row: 
       if item == player: 
        count +=1 
        if count == number: 
         return True 
         location = row, item 
         return location 
       else: 
        count = 0 

は、しかし、これは私が場所を初期化していないエラーを呼び出すので、私はそれから場所= 0、0は今、それだけでTRUEを返し、タプル(0を設定し、 0)。 3の最後の要素の位置を連続して与えるにはどうすればよいですか?

編集:私は3タプルを返そうとしました:TRUE、行、アイテム。しかし、問題の2番目の部分は、関数がTRUEのときに行番号と列番号を取得する方法です。次のコードは、脅威が存在することを認識するように動作しますが、脅威が存在する場合、脅威の場所を取得する方法を見つけることができません。

if finder(board, "X", 3) is True: 
    horizontal_threat = True 
    print row, item 
+4

ようにしなければならないとタプル(0,0) "_。それは私にとって可能な音ではありません。関数は2回返すことはできません。あなたの関数が 'return true'に達すると、直ちに終了し、' return location'に到達することなく 'true'を呼び出しコンテキストに渡します。あなたの主張している行動を示す[mcve]を提供できますか? – Kevin

+1

_ "私は次のように入力することができます:行の4つが真であるかどうかを知るためのfinder(board、" X "、4)。あなたはreturn文を打つことがなければ、あなたの関数がデフォルトで 'False'を返すと言っていますか?関数がreturn文を打ち切らずに終了すると、FalseではなくNoneを返します。公正では、誰も[虚偽]です(https://stackoverflow.com/questions/39983695/what-is-truthy-and-falsy-in-python-how-is-it-different-from-true-and-false )ので、いくつかのコンテキストでは同じように動作しますが、通常、すべてのコードパスがブール値を返すと予想される場合は、Falseを明示的に返すのが最善です。 – Kevin

+0

私は関数が1つの値しか返すことができないことに気づいていなかった、私はプログラムの始めにlocation = 0,0を設定した。今私は変数を私がしばらく前に呼んでいることを知っています。 – Ra31513

答えて

0

あなたは、現在のコードで間違った点がいくつかありますが、しかし

for (i, row) in enumerate(matrix): 
    ... 
    for (j, item) in row: 
     ... 
     if (count==number): 
      return (i, j) 

でそれを行うことができます。

  • あなたは2つのリターンステートメントを持っています。私はこれが(0、0)そのまま返すことができるとは思わない
  • あなたは行列のXの総数を数えます。あなたがラインに入っているかどうかをチェックしないでください。
0

上記のコメントで@Kevinによって指定された理由で2番目のreturn文が実行されません。

今では単にTRUEを返す "_あなたは

return True, location

のようなあなたの文を記述する必要があるとあなたがfinderを呼び出しているwherverあなたは

found, values = finder(board, "X", 3)

0
# Complete, working, Python 3 solution 


def finder(matrix, player, number): 
    location = None 
    for row in matrix: 
     count = 0 
     for item in row: 
      if item == player: 
       count +=1 
       if count == number: 
        location = row, item 
        break 
      else: 
       count = 0 

    return location 


matrixMain = [ [1, 0, 0, 0], [2, 2, 2, 2], [1, 0, 0, 0], [1, 0, 0, 0] ] 

for itemToFind in range(1, 3): 
    locationFound = finder(matrixMain, itemToFind, 3) 
    if locationFound is None: 
     print("item {} not found".format(itemToFind)) 
    else: 
     rowFound = locationFound[0] 
     itemFound = locationFound[1] 
     print("found item {}".format(itemFound)) 


# Is forcing users to indent code by four spaces really the best Stackoverflow can do ? 
関連する問題