40代塾講師の「ほぼ独学プログラミング日誌。」17

記事
学び
『プログラミングで切り開く、新しい未来♪』

こんにちは!
塾講師のdainarです。
今週末はまた寒くなるかと思ったのですが、こちら九州の地は思いのほか暖かいですよ〜♪

さて、前回に引きつづき『ヒット&ブロー』の作成を進めて参りましょう!

目次 
1. 正しく入力!
2. ループ処理で簡単に

正しく入力!


前回はリストを使って4桁のランダムな値を作るところまで終わりましたね。

hit&blow1.png

このゲーム、「4桁の数字を予想して当てる」というものですが、中には”数値”ではなく”文字列”で数字を入力したり、数字ではなく「ひらがな」や「アルファベット」を入力される御仁もいらっしゃるかもしれませんよね?(動作確認のために?)
そこで数字ではないものが入力されたときに、エラーを表示して再入力してもらうところまで考えます=イレギュラーの対応を考える!

まずは下記のコードを見てください。

hit&blow2.png

isokという変数にFalseという値を入れます。
while構文で「isok == False」つまり”条件を満たさない間”はwhile以下の処理がくり返されます。
len「長さ」lengthを判定する関数できちんと4桁の数字が入力されたか”を判断し、条件が満たされない時はprint文で指示を出します。
ちなみに「!=」は演算子の1つで「A != B」で「AとBの値が等しくない」という意味です。
”4桁の数字がきちんと入力される”とif文の条件を満たさなくなり、else以下の処理が実行されます。

「isok = True」(条件を満たした)というGOサインが出されて、以下のprint文が表示されるわけです!

さらに各行が数字であることの判定を行う処理を書いていきたいと思います。

各行が数字であるということは、それぞれの桁が「0以上9以下」であるということで以下のように判定することができます。

if ( b[0] >= ” 0 ” ) and ( b[0] <= ” 9 ” ) :

ここで変数bのそれぞれの要素はユーザーが入力した”文字列”を切り出したもの(input関数で受け取った値は”文字列”として扱われる)で”数字”ではありません!なので「” 0 “」「” 9 “」のように「” “」でくくり”文字列”として扱う点に注意してください。

hit&blow3.png


ループ処理で簡単に


さて、だいぶ完成に近づいてきましたがここでもうひと工夫です!

上記のプログラムでは「if」「elif」がたくさんあり、見にくくて分かりにくいものとなっています・・・
なので少し工夫をしてみようと思います。
ここで登場するのが”ループ処理”です!

hit&blow4.png

for構文を使って書き換えてみました。
まず「kazuok = True」(数OK?)で”正しい数値かどうか”の判断をしています。”正しい数値が入力されていれば” for構文が実行されます!

kazuok = False でkazuokをFalseに設定します。kazuokは”数字が入力されているはず”ということを示す変数として使ったので”実際に確認したら、数字以外だった”という設定になります。
1つでも数字でなければ残りを判定するのは無駄なので

break

としてforループを中断して、次の処理に進みます。
最後にkazuokがTrueであるかどうかを判定(kazuok = Trueということは、数字ではないものがなかったということ)してisokをTrueに設定します。

hit&blow5.png

はい、お疲れさまでした〜
今回は以上になります。
次回はいよいよ最終段階、完成を目指していきますよ!٩( ‘ω’ )و

※参考図書=『いちばんやさしいPython入門教室』大澤文孝(著) ソーテック社
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す