LoginSignup
5
8

More than 3 years have passed since last update.

for文とwhile文について

Last updated at Posted at 2019-05-18

前提

あるお仕事でPythonをプログラミング未経験者に説明することになったので、その下書きを兼ねてここにツラツラとPythonの簡単な説明を書いていきます。ここでは繰り返しについて扱います。

while文

while文は

while {条件式}:
    繰り返す処理

というように書きます。条件式が常にTrueだと無限ループが発生してしまうので注意しましょう。

例 : 連続する数のリストを作る

ex1.py
n = 0
list = []
while n < 10: # "n<10"の時条件を満たす
    list.append(n) # リストの末尾にnを加える
    n += 1 # nに1を加える
print(list)

ex1.pyを実行すると

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

というリストが出力されます。

for文

for文は

for 要素 in シーケンス:
    繰り返す処理

というように書きます。シーケンスとは文字列やタプル、リストなどのことを指します。他にも繰り返すことが可能な要素を用いてfor文を書くことができます。

ex_for.py
prefectures = ['東京','埼玉','神奈川','千葉','栃木','群馬','茨城']
for p in prefectures:
    print(p)

上のex_for.pyを実行すると関東の都道府県がprefecturesから一つずつ出力されます。

ex_for.pyの出力
東京
埼玉
神奈川
千葉
栃木
群馬
茨城

range関数

for文ではrange関数がよく使われるのでrange関数についても説明します。
ひとまず、range関数は以下のようにして使います。

range(整数)

例えば range(5)とすると内部で[0,1,2,3,4]というリストが作られています。(※イメージです)
したがって以下のように書いてあげると、0から9までの整数が順番に出力されます。

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

range関数がとる引数は一つとは限らないです。以下のように引数を入力することで数を飛ばし飛ばし出力したり、大きい数から小さい数へと数えることができます。

引数が2つの時

ex2.py
for i in range(5,10):
    print(i)

引数が2個の時は1つ目の引数が数え始め、2つ目の引数が数え終わりを示します。
したがってex2.pyを実行すると5から9までの整数が出力されます。

ex2.pyの出力
5
6
7
8
9

引数が3つの時

ex3.py
for i in range(20,-10,-5):
    print(i)

引数が3個の時は3つ目の引数が飛ばして数える数を表します。これは負の整数でも構わないのでex3.pyを実行すると20から順に-5ずつ-10の手前まで数を数えていきます。

ex3.pyの出力
20
15
10
5
0
-5

例 : 3の倍数と3のつく数の時はバカになる

ex4.py
list = []
for i in range(40):
    if not i % 3:
        list.append("(°▽°)")
    elif '3' in str(i):
        list.append("(°▽°)")
    else:
        list.append(i)
print(list)

ex4.pyを実行すると以下のような出力が得られます。最初が(°▽°)になっているのは0が3で割り切れるからです。

ex4.pyの出力
['(°▽°)', 1, 2, '(°▽°)', 4, 5, '(°▽°)', 7, 8, '(°▽°)', 10, 11, '(°▽°)', '(°▽°)', 14, '(°▽°)', 16, 17, '(°▽°)', 19, 20, '(°▽°)', 22, '(°▽°)', '(°
▽°)', 25, 26, '(°▽°)', 28, 29, '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)']

breakとcontinue

ここではループ(繰り返し)の制御に必要となるbreakcontinueについて説明します。

  • break : ループを終了する
  • continue : ループ内のそれ以降の処理を実行しないでループの先頭に戻る

それでは具体例を見ていきましょう。

breakの使い方

ex_break.py
n = 1
while True:
    if n < 5:
        print(n)
        n += 1
    else:
        break

ここではwhile文が使われていますね。
while文の書き方は先ほどもあったように

while {条件式}:
    繰り返す処理

となっていますのでwhile True:は常に条件式が成立することを表します。これでは永遠に繰り返しが続いてしまい、コンピューターが壊れてしまいます。そこでbreakの出番となるわけです。
ex_break.pyでは、nが5未満のときnを出力し、それ以外のときはbreak、つまり繰り返しを終了する、とプログラムされています。したがってex_break.pyの出力は以下のようになります。

ex_break.pyの出力
0
1
2
3
4

continueの使い方

ex_continue.py
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

ここではrange関数を用いてiに0から9の整数を代入しています。print(i)となっているので整数iが出力されるはずですが、i % 2 == 0、つまりiが2で割り切れるときはcontinueとなっています。
continueときはそれ以降の処理が実行されずに次のループに移るのでex_continue.pyの出力は次のようになります。

ex_continue.pyの出力
1
3
5
7
9

例 : コンピューターとジャンケン勝負をしよう

このようにbreakcontinueを組み合わせるとコンピューターと繰り返しジャンケンするプログラムが作れます。

janken.py
from random import randint

hands = {0 : "グー", 1 : "チョキ", 2 : "パー"}

print("コンピューターとじゃんけん!!")
while True:
    player = input("0:グー 1:チョキ 2:パー 3:辞める\n>> ")

    # 3を選択した場合はループを終了する
    if player == "3":
        break

    # 求められる形式以外の入力だった場合はループの先頭に戻る
    elif player not in ("0","1","2"):
        print("正しい入力をしてください\n")
        continue
    com = randint(0,2) # コンピューターの手を決める

    # じゃんけんの勝敗を求める
    player = int(player)
    n = player - com
    if n == 0:
        ans = "あいこ"
    elif n == -1 or n == 2:
        ans = "あなたの勝ち"
    else:
        ans = "あなたの負け"

    # 結果を出力
    print("あなたの手:",hands[player],"   コンピューターの手:",hands[com])
    print("結果:",ans,"\n")
5
8
4

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
5
8