「かめののろい」でPython #10時間目(1/2)
10時間目 条件文if elseともう1つのくり返しwhileで数当てゲームを作る
こんにちは!デザイン重視で朝の陽ざしにも耐えられないサングラスを買ったヒラバヤシヤスキです!
ついに、10時間目まで進みました!全部で24時間目まであるので、もうすぐ折り返しですね。
今日はタイトルからワクワクしています。ついに条件文が使える!
これでプログラミングの幅がぐっと広がりそうです。
それでは進めていきます。
数あてゲームをつくる
10時間目では、カメさんからはなれて、「数あてゲーム」を作るみたいです。
まずは、テキストに従って以下をプログラミングします。
(新しいコマンドも備忘録としてコメントで書いておきますね。)
from random import*
kazu=randint(1,5)
print('1から5までの数字を当てよう') #printは文字を出力するコマンド
ateru=input('数を当ててみよう') #inputは文字を入力するコマンド
ateru=int(ateru) #intは整数という意味
if kazu==ateru: #でた!条件文!あとで説明があるはず
print('おめでとう')
print(kazu)
else:
print('ざんねん')
print(kazu)
どうやら、
・1~5までで正解がランダムで決定
・1~5までの数字を入力
・正解なら「おめでとう(&正解の数)」、不正解なら「ざんねん(&正解の数)」と表示
というプログラムのようです。
さらっと、if文がはいっていますが、以下のようです。
※if イフ 条件 else エルス 条件:
このプログラムの 場 合 は 「もし(if) kazu と ateru が 等 しければ、 「おめでとう」 と kazu の 中 身 を 表示 しなさい。
ちがえ ば(else) 「ざんねん」 と kazu の 中 身 を 表示 しなさい。」 という 意味 になりま す 。
条件にあうか、あわないか、の2つに分岐できるというこですね。
だとすると、条件Aにあう、条件Bにあう、条件Cにあう、など3つ以上の条件分岐はどう実現するのでしょうか。入れ子にする??
これは今後でてきそうです!(というか、目次みたら「elif」なるものが!これかな?)
それでは、早速実行してみます。
◆
◆
ほほう。もちろん数字がなんなのかは、ノーヒント。
とりあえず「3」を入力してEnter!
◆
◆
シビア!笑
気を取り直して、テキストに戻ります。
if文や、while分でよく使われる比較演算子
while文というのは、今からやるのでしょうが、上記がif分などでよくつかわれる比較演算子だそうです。
数学で習ったので、特に抵抗はありません。
書き方も、以上「>=」とか以下「<=」は、数学の「≧」、「≦」と書き順が一緒なので、そんなに意識しなくても「>(<)」と「=」の順番は間違えなさそうです。
また、比較演算子という言葉は小難しいですが、「+」とか「-」も(算術)演算子ですので、演算子自体は、とりあえず「記号」くらいに捉えて、比較演算子は、「比較をするのに用いる記号」くらいの理解でいいのではないでしょうか。
1~5以外の数字の入力を弾くようにする
forで決められた数だけ繰り返すプログラムをいままで作ってきましたが、新たな繰り返しのwhileを使い、1~5以外の数字は弾くようにプログラムを作ります。
for はくり 返 す 回 数 が 決 められていますが、 while は 条件 が 合 うまでくり 返 したり、 合 わなくなるまでくり 返 したりと、 くり 返 す 回 数 が 決 まってい ません。
つまり、繰り返しを回数で決めるのではなくて、条件に合うか合わないかで繰り返すか決めるコマンドということですね。
早速、テキスト通りにプログラミングします!
◆
◆
from random import*
kazu=randint(1,5)
print('1から5までの数字を当てよう')
while True: #ifの結果が真(True)まで繰り返す
ateru=input('数を当ててみよう')
ateru=int(ateru)
if 1<=ateru and ateru<=5: #ateruが1から5までなら
break #ifの呪縛から解放
if kazu==ateru:
print('おめでとう')
else:
print('ざんねん')
print(str(kazu)+'でした') #strは数を文字にするコマンド
while文が間に入りました。
これにより、1から5までの数字でない限りwhile文の中を延々と繰り返すわけですね。
また、elseの中身が少し変わっています。
最初のプログラムは「ざんねん 5」というスーパーぶっきらぼうな回答でしたが、今回は、「ざんねん 5でした」と、少し丁寧になるようです。
print()の中が複雑ですが、これは、print()が、数字のみを表示するか、文字のみを表示するかのどちらかになってしまうため、数字の5を、文字としての5に変換する必要があるだからだそう。
そこで、数字であっても文字列に変換できるコマンドがstr()のようです。強そうに見えますが、stringの略です!
intといい、strといい、ワクワクするコマンドが多いですね笑
でも、今後苦しめられそうな予感がします…。
それでは、実行してみます!
1~5の数字以外だとループするはずです。
◆
◆
いい感じですね!
続いて…
何 度 か Run した 後 にアルファベットや 記 号 を 入 れてみてください。
とのことなので、「a」と入力してみます。
◆
◆
なにやらエラーがでました!
int()で、literal、つまり文字のエラーが起きているので、「aは整数に変換できないよ!」ということなのでしょう。
この解決は、次回に回します!!
今回もお読みいただきありがとうございました。
【今回の学び】
・if文は「条件にあう場合(if 条件:)」「あわない場合(else:)」の条件分岐を実現可能。
⇒3つ以上の条件分岐はどうするのかな?
・比較演算子で条件を作れる
・While文は、繰り返しを回数で決めるのではなくて、条件に合うか合わないかで繰り返すか決める、くりかえし文
・str(文字列に変換)とint(数字に変換)は、今後、おちいりやすい罠になりそう。
【未解決の疑問】
・kame=turtle と kame=turtle.Turtle() は同じ働きをする。テキストではあえて後者なのはなぜか?
・長い動画をアップする方法
・3つ以上の条件分岐はどうするのか?[new]
「かめののろい」の目次
0時間目 まずパソコンにPythonをインストール
1時間目 IDLEを起ち上げ まずはコマンドラインでカメさん登場
2時間目 楽してカメさん エディターを使いこなそう!
3時間目 変数(箱)を使ってturtleを操ってみる
4時間目 同じ命令の繰り返しfor を使ってturtleを操ってみる
5時間目 for を使ってturtleをさらに操ってみる②
6時間目 for を入れ子にしてturtleをさらに操ってみる③
7時間目 for と変数でturtleをさらにさらに操ってみる④
8時間目 randomを使ってturtleを操ってみる①
9時間目 randomを使ってturtleをさらに操ってみる②
10時間目 条件文if elseともう1つのくり返しwhileで数当てゲームを作る
11時間目 条件文ifとelif・elseでおみくじを作る
12時間目 おみくじの結果でカメがよろこぶ
13時間目 座標(ざひょう)を操って多角形を書く
14時間目 座標(ざひょう)を操って多角形を書く②
15時間目 今まで学習したメソッドを駆使して図形を描く①
16時間目 今まで学習したメソッドと演算子で図形を描く
17時間目 今まで学習したメソッドを駆使して図形を描く②
18時間目 同じ模様の書き方をアルゴリズムのちがいで書いてみる
19時間目 inputを使って大きさのちがう複雑な図形を描いてみる
20時間目 少し複雑な図形を描いてみる
21時間目 変数とfor・if文で少し複雑な図形を書いてみる
22時間目 図形から離れて少し遊んでみる
23時間目 関数を作って遊んでみる
24時間目 自動計算とループ処理で多角形を書く
この記事が気に入ったらサポートをしてみませんか?