MacによるPython3入門 その5 〜if文 while文 for文〜

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

はじめに

これまでPythonのデータ構造について説明してきました。

今回からは他のプログラミング言語でお馴染みのif文・while文・for文の説明をしたいと思います。

これらの制御フローツールを使えるようになれば、データ処理するためのプログラムが記載できるようになります。

さっそく説明していきたいと思います。

if文

プログラムを書いてみる

まずはif文からはじめます。 ここからは対話型インタープリタではなく、Pythonファイルを作成して実行していきたいと思います。
例として「kadai5_1.py」というファイルを作成します。

#Pythonファイルを作成する
vi kadai5_1.py

kadai5_1.pyに下記のプログラムを記載し、保存します。

※なお、viエディタでプログラムを記載する方法ですが、まずキーボードで「i」を押下し、「編集モード」にします。すると文字を入力できるようになるので、下記のプログラムを記載してきます。
記載し終わったら保存するのですが、保存する方法は、Escキーで「コマンドモード」に戻り「:wq」と入力し、Enterを押下します。

x = int(input("整数を入力してください"))
if x==1:
    print('hey')
elif x==2:
    print('hey hey')
else:
    print('hello')

kadai5_1.pyを実行します。

python kadai5_1.py
=>
整数を入力してください

整数を入力してくださいと表示されるので、適当な整数を入力してみましょう。 下記のような結果になるはずです。

#1の場合
hey
#2の場合
hey hey
#3の場合
hello

プログラムの解説

プログラムについて簡単に解説します。

まず変数xにキーボードから入力された数字が代入されます。 次にif文でx==1がTrueであるかチェックしています。x==1がTrueである、すなわち変数xに代入されている値が1であるなら、if文の下のインデントされた部分のプログラムが実行されます。つまりprint(‘hey’)が実行されます。

もし最初のif文でfalseになった場合は、次にelif文の条件がTrueであるかチェックされます。elif文の条件はx==2なので、xに2が代入されている場合、print(‘hey hey’)が実行されます。

最後に、if文 else if文のいずれもfalseである場合にelse文の下のインデントされた部分のプログラムが実行されます。

Pythonプログラムの特徴

ここで、Pythonでのプログラミングについての最大の特徴について説明します。

他のプログラミング言語を使用されていた方にとっては奇妙に見えるかもしれませんが、Pythonではコード構造はすべてインデントで表現されます。

「kadai5_1.py」にはif文とelif文とelse文の3つのブロックが存在しますが、それらのブロックはすべてインデントで定義されています。

他のプログラム言語、たとえば、C言語やJavaでは、プログラムのブロックを区切るために波括弧が使用されますし、RubyやVBでは、ブロックの終端を示す「end」の記述されます。

具体例としてJavaのプログラムを見てみましょう。 Javaでは、if文の後には波括弧が必要です。 試しに「kadai5_1.py」をjavaで書いてみると下記のような感じになります。

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{
        System.out.print("整数を入力してください");
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String buf = br.readLine();
        int x = Integer.parseInt(buf);
        if(x==1){
            System.out.println("hey");
        }else if(x==2){
            System.out.println("hey hey");
        }else{
            System.out.println("hello");
        }
    }
}

Javaで書き直してみると、プログラムが長く感じてしまいますね。

ただ、ここで注意点として、Pythonではインデントのサイズによってプログラムのブロックを識別しているので、インデントのサイズは同一ブロックでは同じサイズにしておく必要があります。

慣例としてインデントには4個のスペースを使うようになっています。

詳しくはPEP8というコーディング規約(日本語訳)をご覧ください。

While文

プログラムを書いてみる

他のプログラミング言語でもおなじみのwhile文について説明します。

#Pythonファイルを作成する
vi kadai5_2.py

kadai5_2.pyに下記のプログラムを記載し、保存する。

cnt = 1
while cnt <= 5:
  print(cnt)
  cnt += 1
python kadai5_2.py
1
2
3
4
5

ここでもwhile文のブロックはインデントで表現されています。

プログラムを解説

簡単にプログラムを説明すると変数cntが5以下なら処理を繰り返すという内容になっている。

まずcntには1が代入されており、cntは5以下であるからwhile文のブロックが実行され、print()で1が印字される。

print()を実行後、cntを1加算して、cntを2にする。while文の先頭に戻り、cntは5以下であるので、再びwhile文のブロックが実行される。

上記の流れをcntが5から6に加算されるまで繰り返すという流れになる。

for文

最後にfor文について解説します。

Pythonのfor文は、他のプログラミング言語、たとえば、C言語やJavaでのfor文とは少し異なります。

Pythonのfor文は、イテラブルオブジェクト、つまり、文字列、リスト、タプル、辞書などイテレーターに対応するオブジェクトに対して実行すると、イテラブルオブジェクトの要素を一つずつ取り出し処理を実行できます。

言葉では理解しにくいと思いますので、実際にプログラムを記述して、動作を確認してみましょう。

#Pythonファイルを作成する
vi kadai5_3.py

kadai5_3.pyに下記のプログラムを記載し、保存する。

weekdays =  ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for weekday in weekdays:
    print(weekday)
python kadai5_3.py
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

イテラブルオブジェクトであるリストから一つずつ要素を取り出し、print()を実行し、一つずつ要素を出力させています。

上記の例ではリストについてfor文を実行してみたので、今度は文字列で実行してみましょう。 ※以下からはPythonファイルを作成する過程は省略させていただきます。

str = 'hello'
for letter in str:
    print(letter)

出力結果

h
e
l
l
o

今度は辞書の場合を見てみましょう。

members = {
            'tanaka':'kenta',
            'yamada':'misaki',
            'takada':'takuya',
            }
for value in members:
    print(value)

実行結果

takada
tanaka
yamada

上記のプログラムでは辞書のキーが出力されているので、値を処理したい場合は下記のように書き換える

members = {
            'tanaka':'kenta',
            'yamada':'misaki',
            'takada':'takuya',
            }
for value in members.values():
    print(value)

実行結果

misaki
takuya
kenta

キーと値を両方処理する場合は下記のようにします。

members = {
            'tanaka':'kenta',
            'yamada':'misaki',
            'takada':'takuya',
            }
for value in members.items():
    print(value)

実行結果

('takada', 'takuya')
('yamada', 'misaki')
('tanaka', 'kenta')

上記の方法だとキーと値の両方がタプルで返されるので、キーと値を別々の変数に代入して処理する場合は、下記のように記述する

members = {
            'tanaka':'kenta',
            'yamada':'misaki',
            'takada':'takuya',
            }
for key,value in members.items():
    print('key:',key,' value:',value)

実行結果

key: yamada  value: misaki
key: tanaka  value: kenta
key: takada  value: takuya

今回は以上です。

続き、書きました。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

CAPTCHA