質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

413閲覧

pythonでの正しいインデントの仕方、外側ループの抜け方について

babbleman

総合スコア107

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/11/09 15:48

以下のコードを見てください。
五目並べプログラムを作っており、どこかに五目並べてあるかを判定するメソッドを書いているのですが(関係ない部分は省略しています)
まず最初に、盤面上に合法手がない場合には、game_endをTRUEとして、それでこのメソッドを終わらせたいです。ただ、self.end=Trueのところと同じインデントレベルでbreakしても以下の処理がどうも実行されているようでした。
二つ目に、多重ネストで書いているのですが、8方向をくまなく調べるところで、もしどこかで
if counter>=RENJU:がTRUEとなったときには、このループを一気に抜け出してメソッドそのものを切り上げたいです。ただ、今回は一般化として、どこにbreak文を記述すれば任意の場所のループを抜けられるかを教えてほしいです。
最後に、もし上二つに両方引っかからなかったら、game_end=falseをreturnしたいというものですが、
やはりこれも上二つをどのようにうまくbreakするかになると思います。そのやり方がわかりません。お願いします。

それと、ちょっとした質問ですが、もし後からこれをif文の中身として扱いたいとなったときに、それより下にある行の全てのインデントを修正する必要が出てきます。自分はやり方がわからず一行一行主導でやっているのですが、一気に合わせるやり方は存在するでしょうか?

それと、このプログラムは、盤面の外から出ない範囲で、という意味で
if 0<=y1<=SIZE-1 and 0<=x1<=SIZE-1:
を記述していますが、もう少しうまい方法はあるでしょうか?
こちらの方は、気が向いたらで構いません、教えていただけたら嬉しいです。
質問が沢山ありますが、よろしくお願いいたします。

python

1class Board(): 2 3 def end_check(self,turn): 4 if len(self.search_availablepos())==0: 5 self.end=True 6 7 #隣接8方向をくまなくチェック 8 9 y,x=numpy.where(self.board==turn) 10 for i,j in zip(y,x): 11 for p in direction: 12 k,m=p[0],p[1] 13 counter=0 14 for pp in range(-(RENJU-1),RENJU): 15 y1=i+pp*k 16 x1=j+pp*m 17 if 0<=y1<=SIZE-1 and 0<=x1<=SIZE-1: 18 if self.board[y1][x1]==turn: 19 counter+=0 20 else: 21 counter=0 22 else: 23 continue 24 if counter>=RENJU: 25 print(turn,"WINS!") 26 break 27 return False

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

まず最初に、盤面上に合法手がない場合には、game_endをTRUEとして、それでこのメソッドを終わらせたいです。

もしどこかでif counter>=RENJU:がTRUEとなったときには、このループを一気に抜け出してメソッドそのものを切り上げたいです。

最後に、もし上二つに両方引っかからなかったら、game_end=falseをreturnしたいというものですが、


次行でreturn (仕様に沿ったbool値)で関数を終了したらよいかと。
returnにて任意の位置で関数を抜けることができます。

一気に合わせるやり方は存在するでしょうか?

まともなテキストエディタを使いましょう。
たとえばWindows上のサクラエディタであれば行範囲選択したあとにShift+TaborTabキー入力でインデントレベルを一括で上げ下げできます。

投稿2018/11/09 16:00

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問