eljefeblog 

Any sufficiently advanced technology is indistinguishable from magic

programming python-basic-lectures

【基本を学ぶ3: 超初学者向け】Pythonプログラミング入門【条件分岐編】

Pythonプログラミング入門【条件分岐】


このシリーズは
Pythonプログラミングを学びたい初学者向けに執筆しています。
第1章はこちらの記事ですので
初めから勉強したい方は順番にご覧になることを推奨します。↓


悩むペン銀

Pythonに何ができるのか具体的に知りたい

Pythonの基本構文を学んで見たい

Pythonを実際にコーディングして学習したい

本記事はこういった疑問に答えていきます。



さて、前回の記事ではPythonの基本構文について勉強しました。


本記事ではこの学んだ構文を利用し
いよいよ条件分岐の学習に入っていきましょう。


本記事を通して学ぶことで
より”プログラミングっぽい事”を体感できるはずです。




条件分岐


条件分岐とは書いて字のごとく
ある条件毎にプログラムの動作を変更する事を表しています。



少し簡単な例を上げてみましょう。
例えば科学者がプログラムしたロボットが道を歩いていることを想像してください。 ロボットは買い物を頼まれスーパーへ向かっています。

スーパーまでの道のりは一本道で、少し歩いていくと目の前に小高い段ボール箱が積まれていることに気づきました。しかし、スーパーへ向かうにはこの道以外なく、どうにかして通らなくてはなりません。

このとき、ロボットが行うことができる行動は以下3つであることが判明しました….

① 段ボールの上を飛び越えて道を進む
② 段ボールを手で押しどけて進む
③ 段ボールを避けて迂回して道を進む



簡単に3つ道を通り方法を書きましたが
場合によっては他にもたくさんの方法が出てくるでしょう。



条件分岐とは
こういったある状況に出くわしたとき、プログラムがどのように動作するのか
予め決めておくことを指しています。


つまり
科学者ロボットのプログラムを行う際、もし仮に道に何か障害物があった場合
①の選択肢を実行するのか。はたまた②か③を実行するのか
その条件に合わせてロボットの動作を変える事ができるという事です。


Pythonでは簡単にこの条件分岐を実装することが可能で
いくつかの数学の論理演算子を提供しています。
例えば、ある変数同士が

  • 要素が等しい時: x == y

  • 要素が等しくない時: x != y


  • もしくはある変数同士を比べて、

  • ある要素が小さい時: x < y

  • ある要素が小さいもしくは等しい時: x <= y

  • ある要素が大きい時: x > y

  • ある要素が大きいもしくは等しい時: x >= y


  • これらの演算子はPythonの条件分岐を行う際、その条件として定義されます。


    百聞一見に如かずですね
    ターミナルを起動し、Pythonを実行。
    以下のコードを入力し確認してみましょう。

    (>>>はPythonの対話環境を表しています。入力する必要はありません。)
    ( 3行目で:(コロン)を入力した後、エンターキーを押すとif文のブロックに入れます。)

    >>> x = 30
    >>> y = 55
    >>> if x < y:
    ...     print("yはxより大きい")
    ...      
    'yはxより大きい'



    Pythonのif文では if 条件 : (コロン)と言う書き方が決まりです。
    if文ではxがyより小さいのか否かTrueかFalseを返します。
    もしTrueであればprint()関数が実行され、もしFalseであれば無視されます。



    ここでprint()関数の左側にインデント(空白)がある事に気付けた貴方は
    なかなかセンスがありますね。
    Pythonはプログラムを綺麗に保つ言語としても有名で
    これはコードを段落で区切ると言う決まりによって実現されています。
    上記の例では

    >>> if x < y:
    ...     print("yはxより大きい")


    ここまでがひと塊りとして動作します。


    通常if文ではifの先頭である「i」の文字から4つもしくは2つの空白
    を挟んで段落を区別
    します。(4つの空白が良く使われます。また、どちらの空白を使用するにもインデント方法は1つに統一することが決まりです。)
    これのインデントが正しくされない場合、エラーが発生するため注意してください。


    前述した例では変数xの値が変数yの値より小さいので
    print()関数が実行されるはずです。


    2つ以上の条件分岐

    プログラムを書いていると
    更に条件を付け動作を分岐させたいと思うでしょう。
    そこでelifを使用します。
    以下のコードを入力し、実行してください。

    >>> x = 30
    >>> y = 50
    >>> if x > y:
    ...     print("xはyより大きい") 
    ... elif x < y:
    ...     print("xはyより小さい")
    ...
    'xはyより小さい'

    elifはelif 条件 :(コロン)という書き方をします。
    前段のifがFalseであった場合、次の行に書かれたelifのブロックが実行される流れとなります。
    この例では変数xの値は変数yの値に比べ小さいため、前段のif文は実行されずelif文のブロックprint()関数が実行されます。


    どの条件にも当てはまらない場合

    これまで学んだifelifの条件がどれも当てはまらない場合も考えられます。
    この場合、elseがそのほか全ての条件に対応する事が可能です。
    例を見てみましょう。

    >>> x = 111
    >>> y = 4
    >>> if y > x:
    ...     print("yはxより大きい")
    ... elif x == y:
    ...     print("xとyの値は等しい")
    ... else:
    ...     print("上記どちらの条件にも当てはまらない")
    ... 
    '上記どちらの条件にも当てはまらない'

    このように変数xの値は変数yの値より大きいため
    ifとelifのブロックに書かれたprint()関数はそれぞれ無視され、
    最後に残ったelseブロックのprint()関数が実行されます。


    実際に自分の手を動かして確認してくださいね。
    繰り返しになりますがコピペでは学習速度が低下するため効率が悪いです。
    長い目で見て、最短ルートを突っ走りましょう!



    もっと簡潔に条件分岐を定義する


    上記のようにif文では条件分岐を行う際
    if 条件:(コロン)という構文を宣言する必要がありました。

    しかしPythonではif文をさらに簡単に書くことが許されています。
    以下のコードを入力して確認してみましょう。

    >>> a=100
    >>> b=38 
    >>> if a > b: print("aはbより値が大きい")
    "aはbより値が大きい"



    このようにPythonにおいて、if文は1行で記述でき
    コードの内容はデフォルトのif構文コードと全く同じ動作をします。


    簡潔にプログラムを書けるよう訓練しておくことで
    プロジェクトの開発スピードを大きく向上させることが出来ます。
    基本的なif文の構文を抑えた方は
    是非この記述方法もマスターすると良いでしょう。


    より複雑な条件分岐を実現する



    さらに条件分岐の構文に使用される予約語としてandが用意されています。
    andは論理演算子であり、指定された複数の条件が全てTrueである場合
    ブロック内のprint()関数が実行されます。
    以下のコードを入力して確認してみましょう。

    >>> a=200
    >>> b=33
    >>> c=500
    >>> if a>b and c>a:
    ...     print("これら2つの条件は満たされている")
    ...
    "これらの2つの条件は満たされている"


    4行目を確認してください。
    a>b and c>aの2つの条件が定義されていますね。

    この2つの条件「a>b及びc>aが満たされている」場合
    ブロック内のprint関数が実行される事になります。

    加えて予約語orはandと同様に論理演算子であり、
    2つの条件の内、どちらか一方の条件が満たされている
    (True)であるならばそのブロックを実行させます。



    >>> a=200
    >>> b=33
    >>> c=500
    >>> if a>b or a>c:
    ...     print("2つの条件の内少なくとも1つの条件が真である")
    ...
    "2つの条件の内少なくとも1つの条件が真である"



    aはcより大きな値では無いですが、
    aはbより大きな値であるため、2つの条件中1つがTrueとなります。
    故にブロック内のprint関数が実行されています。





    条件分岐の中に、条件分岐を定義する


    これまで条件分岐を学んできて
    ある条件に分岐した時、さらに条件を分岐させたい時は
    どうするのか、疑問が湧いてきた方もいるでしょう。

    Pythonでは条件分岐を簡単にnestする事ができます。

    >>> x = 20
    >>> if x > 2:
    ...     print("xは2より大きい")
    ...     if x>30:
    ...         print("xは30より大きい")
    ...     else:
    ...         print("しかし30よりは小さい") 
    ... else:
    ...     print("xは2より小さい") 
    ...
    "xは2より大きい"
    "しかし30より小さい"
    




    条件分岐に関して、ここまでの知識が有れば基本は習得できています。
    あとは実現したい動作がある場合、
    自分で調べ、学び、コーディングすること。

    このステップを繰り返せば
    必然的にエンジニアとしてのスキルが向上していきます。
    まずは基礎知識を固めていきましょう!




    まとめ



    いかがだったでしょうか?
    今回も少しヘビーな内容だったためここ辺にしておきましょう。


    条件分岐はプログラムを書く上で本当によく使う構文です。
    というか使わないと言う事はほぼ無いでしょう。


    初めてみるこういった処理は覚えるのが大変そうに感じますが
    コピペせず繰り返し自分の手で入力し
    実行結果を確認する作業を続けてみてください。


    知らず知らずのうちに思い出さずとも
    自然に使いこなせるようになります。


    千里の道も一歩からです。
    焦る事なくゆっくり体に染み込ませていきましょう。
    何度でも言いますが楽しむことが大切です
    疲れたら適度に休憩をとり、自分のペースで学習を続けましょう。



    今回は以上です。
    ではでは



    続編はこちら↓↓






    人気記事【初学者必見】効率的なプログラミング勉強方法を紹介します

    人気記事 CS学位取得者がプログラミングスクールを調査してみた件【おすすめのスクール】







    このエントリーをはてなブックマークに追加



    data-ad-format="rectangle" data-ad-format="rectangle"

    返信する

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    某国立大学大学院(理系)に所属しています。 最近の趣味は人工知能関連の論文を読む事で 研究ではComputer Vision周りを中心に活動しており、 サイドワークとしてデータ分析の業務に関わっています。 本ブログはこれまで筆者が学んできた様々な知識の中から 有益だと思えた情報のみをまとめたものです。 内容は個人の見解であり、所属する機関と関係するものではありません。 Research: is related to Computer Vision Hobby: is to study Artificial Intelligence / Machine Learning.