2021年12月23日

課題★<時><分>を除いて、いま秒針が何秒を指していたかクイズ。シェルスクリプト疲談-6

seconds_quiz_2021-12-23_11-46-08.jpg

#!/bin/bash

guess=-1
answer=`date +%S`
while [ $guess -ne $answer ]
do
echo "〜〜〜〜〜〜〜 〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜"
echo "いま秒針が、何秒を指しているか予想してください:"
echo " "
read guess
if [[ $guess -gt $answer ]]
then
echo " "
echo "その数字より小さいです"
echo " "
elif [[ $guess -lt $answer ]]
then
echo " "
echo "その数字より大きいです"
echo " "
else
echo " "
echo "ピタリ一致。あんたは天才や!!!"
echo " "
fi
done

シバンがbashなのは、そのほうが
上手くいくことがおおいため。

date +%S は、現在の秒のみを表示するコマンド。

[[ ]]の意味は、表示される警告を出ないようにするため。
./number: 9 行: [: -gt: 単項演算子が予期されます
./number: 12 行: [: -lt: 単項演算子が予期されます

を出なくするためです。

スクリプトを実行した時点で、回答は確定。
私、勘違いしまして、同じ数字を打って回答しつづければ、
近づいてきてそのうち当たるだろうと期待しましたが、
コードをよく眺めると、そういう仕掛けではないようで。
プロンプトで、スクリプトを実行するたびに
当然のことながら新たな回答をもつので、
答えの数が変わります。

入力した数が回答と一致するまで、問題がループして、
スクリプトは終了しません。(強制終了はctrl +c)
その数より小さいです  と その数より大きいです で、
間を詰めていき、いかに回数少なく時間は短く
答えに到達するか、みたいなゲームですね。
操作の速さを要求されるので、
年寄り向きじゃないですね。例として、
スクリーンショットを撮るためにやりましたが、
疲れました。

課題提供者の元問題は、英文にしてありましたが、
孫用に「にほんご」にしました。

学びは、while文とif文を
混ぜることができるんだな、でした。
たくさんやって、身体に覚えさせるしか
ないですね。出題者の変数の表し方がときどき
ちがうやり方だったりします。$も{}も付けずに、
変数って扱えるんですかね。[ ]の中だったら?
きょうは、$だけにしましたが、
無事に動いています。

guess=のところの  -1  は、とりあえずありえない数に
しておくのが、こういうときの作法か、と。
入力すべきは、0〜59 。
正解のときに派手にするには、
フォントに色をつけたりフォントサイズを大きくするか?
それができないなら、画像でドカンとやるとか?ですかね。


※考えてみれば、時制がおかしいですね、この問題。
本番では直します。
「いま何秒だったかクイズ!! この下へ入力:」
みたいなのを幼児に解るようにすればいい?
いまとは、今の「ま」を云ったときにはすでに過去!
時間は、逆さ回しにはできないことを伝えるぞっ!?
(2021/12/24)


posted by ブログ開設者 at 12:02| Comment(0) | linux | このブログの読者になる | 更新情報をチェックする