最終更新: jade_python 2013年02月26日(火) 00:08:54履歴
ここでは制御文の優先順位についてお話します。
そもそも制御文には数学の四則演算のような優先順位はあるのでしょうか?
数学の四則演算の場合、掛け算と割り算が優先されますね。
つまり一つの式内で計算の流れは「乗除」→「加減」と流れていくのです。
しかし、制御文の場合はそのような優先順位差というものはありません。
つまり、プログラムは「素直に頭から順に」流れていくのです。
「そんなの当たり前じゃん!」
と思うかもしれないのですが、コーディングをしているとたまにミスってしまうのです。
下の例を見てください。
このプログラムはListの中に格納されている数を偶数と奇数に分けるプログラムです。
ただ、このプログラムを作った人は「0を偶数の組」に分けることが嫌だったようで
Listの中に0があった場合は「何もしない」という分岐を作りたかったようです。
では実行結果を見てみましょうか?
ターミナルには次のように出力されました。
Even=[0,2,4,6,8,10]
Odd=[1,3,5,7,9]
おやおや??
0がEven(偶数)リストの中に格納されてしまっていますね。
そうなんです。
前述のとおり、プログラムは素直に「上から順番に」コードを流れていきます。
ですので「i=0」の場合は
5行目のif条件式と7行目のelif条件式の両方に合致しますが
はじめに流れ着いた(はじめに真とされた)分岐へと流れて行ってしまうのです。
システム開発の際には、こういう「抜け目」に注意したいものですね!
僕は一度、何も考えずにこのようなミスをしてしまい・・・大変なことになったことがあります><(泣)
python-project
そもそも制御文には数学の四則演算のような優先順位はあるのでしょうか?
数学の四則演算の場合、掛け算と割り算が優先されますね。
つまり一つの式内で計算の流れは「乗除」→「加減」と流れていくのです。
しかし、制御文の場合はそのような優先順位差というものはありません。
つまり、プログラムは「素直に頭から順に」流れていくのです。
「そんなの当たり前じゃん!」
と思うかもしれないのですが、コーディングをしているとたまにミスってしまうのです。
下の例を見てください。
List=[0,1,2,3,4,5,6,7,8,9,10] #初めにこういうリストがあったとして Even=[] #偶数を格納していくリスト Odd=[] #奇数を格納していくリスト for i in List: if i % 2 == 0: Even=Even+[i] elif i==0: pass else: Odd=Odd+[i] print Even print Odd
このプログラムはListの中に格納されている数を偶数と奇数に分けるプログラムです。
ただ、このプログラムを作った人は「0を偶数の組」に分けることが嫌だったようで
Listの中に0があった場合は「何もしない」という分岐を作りたかったようです。
では実行結果を見てみましょうか?
ターミナルには次のように出力されました。
Even=[0,2,4,6,8,10]
Odd=[1,3,5,7,9]
おやおや??
0がEven(偶数)リストの中に格納されてしまっていますね。
そうなんです。
前述のとおり、プログラムは素直に「上から順番に」コードを流れていきます。
ですので「i=0」の場合は
5行目のif条件式と7行目のelif条件式の両方に合致しますが
はじめに流れ着いた(はじめに真とされた)分岐へと流れて行ってしまうのです。
システム開発の際には、こういう「抜け目」に注意したいものですね!
僕は一度、何も考えずにこのようなミスをしてしまい・・・大変なことになったことがあります><(泣)
python-project
コメントをかく