#前提
あるお仕事でPythonをプログラミング未経験者に説明することになったので、その下書きを兼ねてここにツラツラとPythonの簡単な説明を書いていきます。ここでは繰り返しについて扱います。
while文
while文は
while {条件式}:
繰り返す処理
というように書きます。条件式が常にTrue
だと無限ループが発生してしまうので注意しましょう。
例 : 連続する数のリストを作る
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文を書くことができます。
prefectures = ['東京','埼玉','神奈川','千葉','栃木','群馬','茨城']
for p in prefectures:
print(p)
上のex_for.py
を実行すると関東の都道府県がprefectures
から一つずつ出力されます。
東京
埼玉
神奈川
千葉
栃木
群馬
茨城
range関数
for文ではrange関数がよく使われるのでrange関数についても説明します。
ひとまず、range関数は以下のようにして使います。
range(整数)
例えば range(5)
とすると内部で[0,1,2,3,4]
というリストが作られています。(※イメージです)
したがって以下のように書いてあげると、0から9までの整数が順番に出力されます。
for i in range(10):
print(i)
range関数がとる引数は一つとは限らないです。以下のように引数を入力することで数を飛ばし飛ばし出力したり、大きい数から小さい数へと数えることができます。
引数が2つの時
for i in range(5,10):
print(i)
引数が2個の時は1つ目の引数が数え始め、2つ目の引数が数え終わりを示します。
したがってex2.py
を実行すると5から9までの整数が出力されます。
5
6
7
8
9
引数が3つの時
for i in range(20,-10,-5):
print(i)
引数が3個の時は3つ目の引数が飛ばして数える数を表します。これは負の整数でも構わないのでex3.py
を実行すると20から順に-5ずつ-10の手前まで数を数えていきます。
20
15
10
5
0
-5
例 : 3の倍数と3のつく数の時はバカになる
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で割り切れるからです。
['(°▽°)', 1, 2, '(°▽°)', 4, 5, '(°▽°)', 7, 8, '(°▽°)', 10, 11, '(°▽°)', '(°▽°)', 14, '(°▽°)', 16, 17, '(°▽°)', 19, 20, '(°▽°)', 22, '(°▽°)', '(°
▽°)', 25, 26, '(°▽°)', 28, 29, '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)', '(°▽°)']
breakとcontinue
ここではループ(繰り返し)の制御に必要となるbreak
とcontinue
について説明します。
-
break
: ループを終了する -
continue
: ループ内のそれ以降の処理を実行しないでループの先頭に戻る
それでは具体例を見ていきましょう。
breakの使い方
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
の出力は以下のようになります。
0
1
2
3
4
continueの使い方
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
の出力は次のようになります。
1
3
5
7
9
例 : コンピューターとジャンケン勝負をしよう
このようにbreak
とcontinue
を組み合わせるとコンピューターと繰り返しジャンケンするプログラムが作れます。
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")