1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

100日後にエンジニアになるキミ - 29日目 - Python - Python言語の基礎5

Posted at

今回もPythonの基礎の続きになります。

前回はこちら
[100日後にエンジニアになるキミ - 28日目 - Python - Python言語の基礎4]
(https://qiita.com/otupy/items/f9324f682df276b44ed3)

制御文

前回の講義まではpythonの基本的なデータ型や
演算子の使い方などをお伝えしてきました。

pythonでは条件分岐や繰り返しなど
プログラムを制御するための文法が存在します。

それを制御文と呼んでいます。

制御文はプログラミングを行う上で
欠かせないもので
あらゆるところで出てきます。

書き方、使い方を押さえておきましょう。

if文

表示されなかったらすみません

if文は条件分岐を行うための構文です。

if文の書き方

if 条件:
    処理
if 条件:
    処理
else:
    処理
if 条件:
    処理
elif 条件 :
    処理
    ・・・

まずはIF単独の場合

条件を書いて:セミコロンを末尾に書きます。

# if文で条件に合致した場合printする
if 1<2:
    print('1より2の方がおっきい')

1より2の方がおっきい

その条件に合致した場合にだけif文の中の処理が実行できます。

なお注意として制御文を使う場合、処理を書くブロックは
インデント(字下げ)といって空白4つ分ずらしてあげないといけません。
また空白4つはタブボタンでも代用可能です。

if 1<2:
print('1より2の方がおっきい')

IndentationError: expected an indented block

インデントを行わないとエラーになります。

# 条件はTrue or False
hh = 8
if hh== 8:
    print(hh)

8

if文では条件は bool型真偽値になるものを採用できます。

次に条件に合致しなかった場合は
if文のあとに else: と書いて
条件に合致しない場合の分岐処理も書くことができます。

hh = 7
if hh== 8:
    print('{}時だよ、全員集合'.format(hh))
else:
    # 条件に合致しなければこちらが実行される。
    print('{}時だよ、全員解散'.format(hh))

7時だよ、全員解散

条件が複数ある場合
elif 条件:で条件を増やすことができます。

hh = 9
if hh== 8:
    print('{}時だよ、全員集合'.format(hh))
elif hh==9:
    # 条件に合致すれば実行される。
    print('{}時だよ、全員遅刻'.format(hh))
else:
    # 条件に合致しなければこちらが実行される。
    print('{}時だよ、全員解散'.format(hh))

9時だよ、全員遅刻

if文では条件が合致したところだけ実行されます。
条件を分岐させたい時にだけelseelifを使えば良いです。

条件が複数にまたがる場合
ネストと言って、if文の階層を作ることができます。
その場合、if文の階層の分だけインデントを行います。

aa = 2
bb = 50
if aa == 2:
    if bb == 50:
        print('江頭{0}時{1}分'.format(aa,bb))
    else:
            print('江頭{0}時'.format(aa))
else:
        print('江頭')

江頭2時50分

インデントの位置で処理が変わってしまうので注意しましょう。

ネストを使うことでどんな条件でも
書き分けることができるようになります。

ただし、あまりネストを使いすぎると
わけわからなくなってきます。みるのも大変です。

あまり深い階層になってしまった場合は
そもそもの処理や条件などを見直した方が良いと思います。

またif文では何かしら処理を書かないとエラーになってしまいます。

if 1<2:

SyntaxError: unexpected EOF while parsing

特に処理を思いつかない場合はとりあえず passというのを書きます。

if 1<2:
    pass

passは何もしない処理を現します。
制御文だけを書いて、処理を書かずに実行すると
エラーになるので回避のために使えます。

pythonではインデントで処理するブロックが変わってきます。

なのでif文の中の処理なのか、その前の処理になるのかで
全体の処理が大きく変わってくることがありますので
どういう処理をさせるのかを考えてインデントをしてください。

for文

表示されなかったらすみません

pythonで処理を繰り返し行う場合は forを使っていきます。

forの書き方

for 任意の変数名 in イテラブルオブジェクト:
    処理

イテラブルオブジェクトとは?

イテラブルオブジェクトとは、繰り返しができるオジェクト
要は複数要素をもつオブジェクトの事のことです。

例えば変数に文字列を格納すると

aaaa = 'abcde12345'
print(aaaa)

abcde12345

これは文字列のオブジェクトになります。

オブジェクト指向ではデータオブジェクトとして扱うので
データを格納した⁠変数もまたオブジェクトと同じものだと言えます。

ではイテラブルオブジェクトってなんでしょうか?
これは繰り返しができるという意味で、
複数要素をもつオブジェクトのことになります。

要はリスト型辞書型文字列型のようなデータ構造のオブジェクトとなり
Python言語ではこのオブジェクトを用いて繰り返しを行います。

簡単なfor文の例

# 5回繰り返し処理を行う
for i in [1,2,3,4,5]:
    print(i)

1
2
3
4
5

これが一番シンプルな繰り返しです。
for文の中の繰り返される処理の部分はインデント(字下げ)をしてください。

繰り返し行う回数というのがinのあとに書いた
イテラブルオブジェクトの要素数分だけ行われます。

forの後に書いたiという変数は
繰り返しの中で使うことのできる変数になります。

それぞれ1回目はこのリストの1つ目がこのiに代入される
2回目は2つ目・・・
という仕組みになっているので
このリストの要素数分だけ処理が実行されるという仕組みです。

リストは変数に代入しておいても同じように動きます。

# リスト型の変数に6つの要素を格納する
sample_list =[ 1,2,3,4,5,6]

# 6回繰り返し処理を行う
for i in sample_list:
    print(i)

1
2
3
4
5
6

回数を指定したい場合

range()関数で回数分の値を生成する。

forに使用する回数部分はイテラブルオブジェクトでなければならないため
代わりにrange()関数でオブジェクトを生成して代用をします。

range()関数では指定した個数のオブジェクトを作成できるので
for文の回数指定に代用できるという仕組みです。

range関数の書き方

range(整数値)
range(開始,終了)
range(開始,終了,間隔)

range()関数は引数に指定した整数値の分だけ
数値を生成してくれます。

引数を追加すると開始、終了の数値、間隔を調整する事もできます。

# 10個の数値を持ったオブジェクトを生成
print(range(10))

range(0, 10)

range関数の結果はrange型になります。
ただしこれはリスト型ではないので分かりづらいです。
リスト型に変換してみましょう。

print(list(range(10)))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

これでリスト型になり中身がわかりやすくなります。

range()関数では0から始まって引数分だけ整数値を生成しますが
注意点としては0から始まるので終わりは指定した値にならないので注意してください。
指定した値 -1 になっています。

for i in range(3):
    print(i)

0
1
2

# range関数で4回だけ実行する場合
for i in range(4):
    print(i)

0
1
2
3

開始終了を指定する場合、第一引数から始まって、第二引数まで、となります。
この場合はから10の1つ手前までの値を生成します。

# 5から9まで
for i in range(5,10):
    print(i)

5
6
7
8
9

第三引数を指定すると、どれだけ加算するかを決められます。
マイナスを指定すると、引いていくこともできます。

# 2から10手前までの偶数
for i in range(2,10,2):
    print(i)

2
4
6
8

# 20から10手前までの3個飛ばしで
for i in range(20,10,-3):
    print(i)

20
17
14
11

文字列での繰り返し

繰り返しは基本、なんらかのオブジェクトを用いてその要素数だけ実行するか
range()関数を使って指定した回数だけ実行するか
ということになります。

文字列を指定すると、その文字数分だけ実行されます。

# 文字列型の文字数だけ実行する場合
for i in 'apple':
    print(i)

a
p
p
l
e

繰り返しの途中で抜ける場合(break)

for文の中で処理を抜けたい場合はbreakを用います。
breakが実行されるとfor文のブロックを抜けることになります。

li = ['Alice', 'in', 'Chains']
for name in li:
    if name == 'in':
        print('!!BREAK!!')
        # ここで抜ける
        break
    # 2回目の処理は行われない
    print(name)

Alice
!!BREAK!!

この場合は繰り返しの2回目でif文の条件に引っかかり、
その中のプリント文とbreakが実行されます。

そうなると途中で抜けた場合は、抜けた後以降の処理は行われません。
結果として2回目のプリントの前に抜けた、ということになります。

for文でもelseが使用できます。
elseの部分は一番最後に実行されます。

for i in  ['Alice', 'in', 'Chains']:
    print(i)
else:
    # for文の後に実行される
    print('処理終了')

Alice
in
Chains
処理終了

breakによって途中絵終了した場合には
elseの処理は実行されません。

li = ['Alice', 'in', 'Chains']
for name in li:
    if name == 'in':
        print('!!BREAK!!')
        break
    print(name)
else:
    # break後は実行されない
    print('!!FINISH!!')

Alice
!!BREAK!!

処理の途中で処理を飛ばす場合(continue)

breakは完全に処理を抜けてしまいますが
処理の一部だけを飛ばして、まだ処理を続けたい時は
continueを使います。

li = ['Alice', 'in', 'Chains']
for name in li:
    if name == 'in':
        print('!!continue!!')
        # ここで処理を飛ばす
        continue
    # continue後は実行されない
    print(name)
else:
    # 最後に実行される
    print('!!FINISH!!')

Alice
!!continue!!
Chains
!!FINISH!!

for文はプログラムの中でも高頻度で使われるもので
プログラムでは必須です。

どう処理を組み立てれば良いかを考えながら
for文を用いていきます。

特に2回以上行うような複雑な処理を2回以上書くよりは
for文1回で済ませてしまう方が楽になるので
使い方なども研究してみてください。

while文

表示されなかったらすみません

制御文の最後は while文です。

for文では繰り返しの回数が決まっていましたが
whileでは条件を満たすまで繰り返し続けます。

whileの書き方

while 条件 :
    処理

処理を書くところはインデント(字下げ)が必要になります。

while True:

しかしこう書いてしまうと、繰り返しがずっと行われてしまい
いつまでたっても終わりません。

jupyter notebook上で止めたい場合は
画面上部の四角ボタン(停止)を押して止めてください。

while文は条件を抜けるような処理を書いてあげないと
永久ループになってしまうので、注意が必要です。

while文の例:

sample_int =1 
while sample_int <= 10:
    print(sample_int)
    sample_int = sample_int  + 1

1
2
3
4
5
6
7
8
9
10

このようにして、変数などを条件に用いてwhile文の中で
変数を条件に合致しないように変更すると
whileの繰り返しを抜けることができます。

あらかじめカウント用の変数を用意したり、
フラグ値を用いたりすることでwhile文を抜けるのが
一般的な使い方になります。

forと同じようにcontinuebreakも使えます。

i=0
while i<5:
    if i ==2:
        i+=1
        continue
    print(i)
    i+=1

0
1
3
4

i=0
while i<5:
    if i ==2:
        break
    print(i)
    i+=1

0
1

continueは条件が満たされ続ける限りは
繰り返しが実行され続けるので注意しましょう。

まとめ

条件分岐や繰り返しなどの制御文は
プログラミングではどの言語でも存在する重要な部分です。

文法を把握して、正しくプログラムが実行されるように
コードが書けるようになりましょう。

君がエンジニアになるまであと71日

作者の情報

乙pyのHP:
http://www.otupy.net/

Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter:
https://twitter.com/otupython

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?