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

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

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

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

Q&A

解決済

2回答

10334閲覧

python for文の中にif文を入れた際のelse

bullton

総合スコア39

Python

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

0グッド

1クリップ

投稿2017/09/15 11:00

編集2017/09/15 12:05

pythonにてfor文での繰り返し処理の中でifを用いた判定を行なっております。
その際に、本来であればforに対してelseを用いると最後の繰り返し時にのみ動作する命令を指定できると思うのですが、ifも利用しているとelseが混同しているのか分かりませんが、インデントエラーが表示されてしまいます。

どのようにすればforとifのelseを正しく区別し記述できますでしょうか?イメージ説明説明](64914278eb6cdbe9637998e104ab664f.png)

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

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

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

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

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

can110

2017/09/15 11:50

コードとエラー詳細(Tracebackをそのまま)を追記してください。
guest

回答2

0

ベストアンサー

try-exceptがelseを超えているのが問題だと思います。

Python

1result = [] 2for i in ip_list: 3 try: 4 if 0 <= int(i) <= 255: 5 result.append(int(i)) 6 except ValueError: 7 print("False") 8 break; 9else: 10 if len(result) != 4: 11 print("False")

公式リファレンスには、次のように書いてあります。

try 文は下記のように動作します。
まず、 try 節 (try clause) (キーワード try と except の間の文) が実行されます。

さらに、節に関しては次のように書いてあります。(引用元)

一つの複合文を成す各節のヘッダは、全て同じインデントレベルに置かれます。

try節が見つからないのが問題なのでしょう。

投稿2017/09/15 12:10

編集2017/09/15 12:23
LouiS0616

総合スコア35660

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

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

scsi

2017/09/15 12:20 編集

これで良くないですか? ``` result = [] for i in ip_list: if 0 <= int(i) <= 255: result.append(int(i)) if len(result) != 4: print("False") ```
bullton

2017/09/15 12:18

ありがとうございます。解決しました。
LouiS0616

2017/09/15 12:21

リストに数値以外が含まれる状況を想定しているようです。
can110

2017/09/15 12:23 編集

forの後にelseが来るのがちょっとざわっと感じます。 if len(result) != 4: print("False") else: for i in ip_list: # 略 のほうがいいかなあ。まずはresultの要素数が4以外ならFalseなので。 python上はアリなんだけど。
LouiS0616

2017/09/15 12:25

関数にしてふるい落とすのが一番シンプルで分かりやすい気もしますね。
can110

2017/09/15 12:29

ですね。getIpAddressみたいな関数にするとネスト浅くできますね。
LouiS0616

2017/09/15 12:33

前から疑問に思っていたのですが... 異なる型の返り値を許す関数って、Pythonでは習慣上どう捉えられるのでしょうか? def func(): ...if 何か: ......return False ...else: ......return [] 忌避されるのか、非推奨なのか、あるいは全然構わないのか、むしろ推奨されるのか。 静的型付けに触れていたせいで、このようなコードを避けてしまうのですが。
can110

2017/09/15 12:45

私も避けますね~ ざっと調べたところ、PEPの483や484にそのあたりのことが書かれているようです。 で、何だか分からないけど3.5で「型ヒント」なるものが導入されたと。 私にとっては「何それ美味しいの?」って感じです。
LouiS0616

2017/09/15 12:58

細かく型ヒントを付けだすと、Pythonのうま味が薄れそうですね... 参考になります、返答ありがとうございます。
can110

2017/09/15 13:08

pythonでもコンパイル言語系では当たり前の型チェックの助けになるなら型ヒントもありかと。 正直、未定義変数チェックもままならないpythonで大規模なコードを組むのはしんどいと個人的には思います。 こちらこそお付き合いありがとうございました。 スレチなのでこの辺で。
guest

0

elseのインデント位置で区別がつけられるのではないかと思います。
下記のコード実行してもインデントエラーが発生するでしょうか。

Pytyon

1for i in [1,2,3,4,5]: 2 if i % 2 == 0: 3 print(i) 4 else: 5 print(i * 3) 6else: 7 print("end") 8

投稿2017/09/15 11:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

bullton

2017/09/15 11:47

ご回答ありがとうございます。 そちらのコードですと、問題ないです。 ただ、自分のコードですとインデントの位置を揃えても解決されません。
scsi

2017/09/15 11:50

問題のコードを書いてください
bullton

2017/09/15 12:06

画像を添付いたしましたのでご参照ください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問