ステージ3:ブール値、条件分岐、ループ
ブール値(Boolean)
ここで新たにブール値というデータ型について解説します。
ブール値という名前は聞き馴染みがないかもしれませんが、中身は非常に簡単で、「正誤」のことです。ブール値にはTrue
(正しい)とFalse
(正しくない)の2つの値しかありません。後で出てきますが、Pythonはこのブール値を元にして、どのようにデータを処理していくかを判断します。
print(1==1)
print(1==2)
print(10>5)
print('Hello'=='Hello')
print('llo' in 'Hello')
print('Hi' not in 'Hello')
1行目の「1==1」と6行目の「'llo' in 'Hello'」は、見た目は全く違いますが、データとしては同じ「True
」というブール値です。
上の例では、ステージ1で少し触れた「==」や、「in」オペレータを使ってブール値をみています。「<=」や「>=」も使って試しに上の画面にコードを実際に書いてみましょう。
文(Statement)
文とは、説明が難しいのですが、Pythonに備わっている機能を使うための指示であると思ってください。文を使うことでデータの処理の道筋を示したり、新たに関数を定義したり、外のプログラムとのやり取りなどが可能になります。最初のうちは文の概念がつかみにくいと思います。一つずつ理解していってください。
この講座では以下の文を扱います。
if
, for
, while
, def
, return
, import
この講座では扱いませんが以下の文も比較的よく使われます。
pass
, break
, continue
, try
, with
, class
書き方は文によって多少異なります。また文によっては、複数の節(clause)からなるものがあります。 文についてもっと知りたい場合は、公式ドキュメントの7. 単純文 (simple statement)や8. 複合文 (compound statement)により詳しく解説されているのでそちらを参照してください。
それでは、条件分岐の文とループの文を見ていきます。
条件分岐
条件分岐とは、「この条件のときはこうする」ということを指定することです。分岐を指定する文にはif
文があります。さらに、if
文を構成する要素としてelif
節、else
節を含むことがあります。書き方は
if ○○:
○○が当てはまる場合の処理
elif □□:
○○が当てはまらず、□□が当てはまる場合の処理
else:
if, elifのどちらにも当てはまらない場合の処理
です。
if
文では、条件を指定した後にコロン「:」をその行の最後につけて、次の行をインデントする(行の最初に空白を設けること)のが決まりとなっています。「○○」や「□□」には、True
、False
のいずれかのブール値をとるようなコードを書きます。True
は「当てはまっている」、False
は「当てはまっていない」と解釈されます。
条件分岐のフローチャート
上記の例では、if
の後にelif
, else
が書かれていますが、実際にはif
単体でも機能します。if
単体のとき、if
の条件がFalse
の場合は「何もしない」という指示が実行されます。
また、上記の例ではelif
は1個しかありませんが、実際はいくつでも指定することができます。
それではif
文を使った例をみてみましょう。
myname = '田中'
if myname == '鈴木':
print('鈴木さんこんにちは。')
elif myname == '田中':
print('田中さんこんにちは。')
elif myname == '佐藤':
print('佐藤さんこんにちは。')
else:
print('どちら様ですか?')
1行目では、「myname」という変数に「田中」という文字列を入れています。
2、3行目では、「myname」という変数の中身が「鈴木」という文字列であった場合は「鈴木さんこんにちは。」をprint()
するように指示しています。
4,5行目では、「myname」という変数の中身が「田中」という文字列であった場合は「田中さんこんにちは。」をprint()
するように指示しています。
5、6行目では、「myname」という変数の中身が「佐藤」という文字列であった場合は「佐藤さんこんにちは。」をprint()
するように指示しています。
7、8行目では、「myname」という変数の中身が「田中」でも「鈴木」でもない場合は「どちら様ですか?」をprint()
するように指示しています。
この状態でコードを実行すると、「myname」という変数の中に「田中」という文字列が入るので、「田中さんこんにちは。」がprint()
されます。
それでは、1行目の「myname」という変数に「斎藤」という文字列を入れたら何がprint()
されるでしょうか?実際に試してみてください。
ループ
ループとは、ある特定の処理を複数回繰り返し行うことです。ループを指定する文には主にwhile
とfor
があります。
while
文
while
文は、ある条件が満たされている限り繰り返し処理を行う場合に用いられます。
書き方は下のようになります。
while ○○:
処理
while
文も、if
文と同様に、条件を指定した後にコロン「:」をその行の最後につけて、次の行をインデントします。「○○」には、True
、False
のいずれかのブール値をとるようなコードを書きます。
whileループのフローチャート
n = 1
while n < 6:
print(n)
n = n +1
この例では、
1行目で「n」という変数に「1」という整数を入れ、
2行目でwhile
文を使って「nという整数が6未満である間は」という条件を指定し、
3行目で「nをプリントする」、
4行目で「nという変数を、nに1足した値で上書きする」という指示を与えています。
4行目を実行した後、pythonは再度2行目に戻りループの条件を確認し、True
であった場合は再度3行目と4行目を実行します。
「n」の値は5回目のループの最後で「6」という値になります。これにより、2行目で指定されている「nという整数が6未満である間は」という条件が満たされずFalse
となるのでループは終了します。
for
文
for
文は、いくつかのデータの集まりに対して同じ処理を繰り返すために使います。
書き方は下のようになります。
for □□ in 〇〇:
処理
for
文も、if
文やwhile
文と同様に、条件を指定した後にコロン「:」をその行の最後につけて、次の行をインデントします。○○には処理するデータの集まりを、□□にはそのデータの集まりの中の各データを入れるための変数を指定します。この指定した変数は繰り返し使われ、○○の要素の数だけこの変数を使って「処理」が実行されます。
データの集まりはそれ自体が1つのデータでもあるのですが、このことについてはステージ5で詳しく解説します。
今の段階で知っているデータ型だと、文字列がそれにあたります。文字列は、複数の文字の集まりだと言えます。文字列を使ったfor
文の例を見てみましょう。
word = 'Hello World'
for i in word:
print(i)
1行目で、「word」という変数に「'Hello World'」という文字列を代入しています。
2行目で、「『word』の中の文字それぞれについて」という条件を指定しています。ここに書かれている「i」には、ループごとに「word」の中の文字が一つずつ順番に代入されます。
3行目で、各ループの「i」をprint()
することを指示しています。
実行結果を見ると、「word」という変数に指定した「'Hello World'」の中の文字が一文字ずつprint()
されているのがわかります。
さて、for
文が文字列で使えることがわかりましたが、やはりある回数を指定してループで処理を行いたい場合があると思います。そんなときは、for □□ in 〇〇:
の〇〇
の部分に整数のデータの集まりを与えます。この整数のデータの集まりを作る時に便利なのがrange()
関数です。range()
関数は「ある数以上、ある数未満」の整数のデータの集まりを作ります。range()
関数を使ったfor
文の例を見てみましょう。
my_numbers = range(1, 6)
for i in my_numbers:
print(i)
1行目で、「my_numbers」という変数に、range()
関数で作成した、1から5までの整数のデータを代入しています。
2行目で、「『my_numbers』の中の整数それぞれについて」という条件を指定しています。ここに書かれている「i」には、ループごとに「my_numbers」の中の整数が一つずつ順番に代入されます。
3行目で、各ループの「i」をprint()
することを指示しています。
結果を見ると、1から5までの整数が一つずつprint()
されているのがわかります。
エラーメッセージ
次の項で実際にプログラムを書いていきますがその前にもう一つだけ、エラーというものを見ていきましょう。自分でいろいろ実験してみた人はすでに見ているかもしれませんが、プログラムになにか問題があって実行ができなかった場合にPythonはエラーメッセージを表示してくれます。下の例を実行してみましょう。
a + b
実行したら以下のような文章が出てきたと思います。
Traceback (most recent call last):
File "/tmp/sessions/a3e809c329bf52ad/main.py", line 1, in <module>
a + b
NameError: name 'a' is not defined
これがエラーメッセージです。
1行目はエラーの際のお決まりの文章です。
2行目は実行したファイルとエラーが発生した行(line〇〇)、
3行目はエラーが発生した行の具体的な記述、
4行目はエラーの種類を表しています。
この場合は、NameError: name 'a' is not defined、つまり、「a」という変数が指定されていません、というエラーです。
エラーの対処はtry
やexcept
といった文を使ったりと奥が深いのですが、今はエラーメッセージの見方だけ覚えておいてください。