【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に到達するのでゲーム終了です。
ヒント無しでアルファベットを当てるまで終われないという、ただ時間を浪費するだけのゲームですね。
ループについては以上です。
アルゴリズムぽくなってきた!
それではまた^^