理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

【12日目】いろんな方法でループさせてみる

こんばんは、なぺです。
今日もループについて学びます。

・range
これまではイテラブルな要素について、その要素数だけループを繰り返すコードを書いていましたが、任意の回数だけループしたい。
そんなとき便利なのが、組み込み関数rangeです。
(組み込み関数…print()のように、Pythonに最初から用意されている関数。)
range(開始値、終了値)で、開始値から終了値の一つ前の整数まで、整数を順番に生成してくれます。
ちなみに開始値と終了値の引数に小数を使うとエラーでます。

>>> for i in range(1,5):
	print(i)

	
1
2
3
4

・whileループ
whileループでは、式がtureの間だけループを繰り返します。
基本情報技術者アルゴリズムでも似たようなループがよく出てきました!

>>> i = 3
>>> while i > 0:
	print(i)
	i -= 1

	
3
2
1

ん?これ、 デクリメント部分(-= 1 のところ)をインクリメントにしたら無限ループするんじゃね?と、軽い気持ちで-を+に変えてみました。

>>> i=3
>>> while i > 0:
	print(i)
	i += 1

	
3
4
5
6
7
8
9
...


ぎゃあああああ
数字が高速で出力され続けて止まらない!!
なんか怖い!!!
止めなければ!
「Esc」止まらぬ!「q」止まらぬ!
参考書の索引で「無限ループ」を探す
こうしている間にも数字が高速でprint()されている!
あった!
「無限ループを止めるには、Ctrl+c 」
「Ctrl+c」!!

...
9833
9834
9835
9836
9837Traceback (most recent call last):
  File "<pyshell#20>", line 2, in <module>
    print(i)
KeyboardInterrupt

ピタッ
...止まった
ふう、怖かった。
無限ループ怖い。

以後気を付けます。

・break
breakは、ループを終了させるキーワードです。
FE午後問にもよく出てきたよ!
先ほどのwhileと組み合わせて正解を入力するまで終わらないゲームを作ります。

msg = ["ノルマクリア失敗TT",
       "でも大丈夫",
       "え?本当?",
       "もう一回遊べるドン!^^",
       "助かったドン^^"]
n = 0
ans = "d"

print("アルファベット一文字を予想して当ててね!")
while True:
    a = input()
    if a == ans:
        print("ノルマクリア成功!!")
        break
    
    print(msg[n])
    n = (n+1)%5

出力結果↓

アルファベット一文字を予想して当ててね!
q
ノルマクリア失敗TT
w
でも大丈夫
e
え?本当?
r
もう一回遊べるドン!^^
t
助かったドン^^
y
ノルマクリア失敗TT
u
でも大丈夫
i
え?本当?
d
ノルマクリア成功!!

このゲームは、ループを繰り返すたびに、msgリスト内のメッセージを繰り返し表示しています( print(msg[n]) n = (n+1)%5のところ)。
正解キーを入力すると、 if a == ans:がTrueになり、breakに到達するのでゲーム終了です。
ヒント無しでアルファベットを当てるまで終われないという、ただ時間を浪費するだけのゲームですね。


ループについては以上です。
アルゴリズムぽくなってきた!

それではまた^^