課題
次に示す要領にしたがって,タートルグラフィクスで時刻を示す目印を入れて時計を描くプログラムを作成し,プログラムを提出してください.

- 時刻はプログラムでランダムに指定するようにします.
- 指定された時刻に合わせて時計盤,短針,長針を描きます.
- さらに時計盤の1時,2時,...,12時(=0時)にあたる位置に目印(円など)を配置します.
- 時計盤の大きさ,長針と短針の長さ,目印の形状や色などは自由に決めてください.
- たとえば秒針を追加するなど,様々に工夫して拡張してみてください.
描画処理には必ず「繰り返し処理(for文)」を採り入れてください. また前回の課題(プログラミング ー 時計の描画)のプログラムに何らかの拡張を加えてください. 課題に取り組むにあたって,必要であれば前回の課題のページも参照してください.
目次
準備
課題に取り掛かる前に次のように準備をしてください.
- 前回の課題のプログラムのコピー
今回のプログラムは前回の課題「プログラミング ー 時計の描画」のプログラムをベースにして作ることを想定しています. そこでまず前回のプログラムをコピーします.- Idle/Idle3を起動する
- 前回の課題(プログラミング ー 時計の描画)のプログラムのファイルを開く([File]→[Open])
- ファイルを別名で保存する([File]→[Save As...])
- 時刻の指定方法の変更
今回は入力の手間を省くために時刻はランダムに自動決定することにします. そのために時刻を指定する処理を次のように書き換えてください.# 変更前 hour,minute = feed_time('何時何分?',2) # 変更後 hour,minute = [rand(n) for n in [24,60]]
なお「秒」まで指定する場合には次のようにしてください.
# 変更前 hour,minute,second = feed_time('何時何分何秒?',3) # 変更後 hour,minute,second = [rand(n) for n in [24,60,60]]
Tips
- タートルグラフィクス
- 色表
- 比較演算
a < b aはb未満 a <= b aはb以下 a == b aとbは等しい(注意: '='は代入) a != b aとbは等しくない a >= b aはb以上 a > b aはbより大きい - 論理演算
条件1 and 条件2 条件1かつ条件2 条件1 or 条件2 条件1または条件2 not 条件 条件が成立しない - 四則演算に関する注意
- 乗算: 演算子は「*」です.数学のように記号を省略することはできません.
- 除算: 演算子は「/」です.
- 剰余算
「a % b」でaをbで割ったときの余りを計算できます. - 演算の優先順位
数学と同じです.括弧で優先順位を明示できます. 計算式での括弧には常に( )を使います. { }や[ ]は使いません. - for文の変数
for文では繰り返しの実行中にこれまでに繰り返しを何回終了したか(0,1,2...)を表す情報を利用できます. 具体的にはforの直後に置いた変数の値を利用します. 変数の値は最初0に設定されます. あとは繰り返しを1回終了するたびに,その変数の値が1ずつ自動的に増えていきます.
for i in range(3): # i = 0,1,2 d = (i+1)*20 # d = 20,40,60 forward(d) turn(30)
この場合,次のような処理が実行されることになります.forward(20)→turn(30)→forward(40)→turn(30)→forward(60)→turn(30)
- markとback(タートルグラフィクスの機能)
markすると亀が現在位置と向きを記憶します. その後backすると亀がmarkした状態に戻ります. backするとそのmarkに関する記憶はなくなります.len = 100 mark() # 現在の位置と向きを記憶する forward(len) turn(120) forward(len) back() # 記憶した場所まで(線を描いて)戻る.向きも記憶したときの状態に戻る. mark() # 現在の位置と向きを記憶する(上のbackで最初のmarkは忘れられている) forward(len) turn(-120) forward(len) # 記憶した場所まで線を描かずに戻る.向きも記憶したときの状態に戻る back(hover=True)
2つ以上(backしないまま)続けてmarkすることもできます. markは全て順番に記憶されます. そのときbackすると最後にmarkした状態に戻ります. この場合もそのmarkに関する記憶はなくなります(markが一つ減ります). backするたびにmarkしたときと逆順に新しいmarkから順に古いmarkに戻っていくことになります. なおmarkがないときにbackしても何も起きません.
サンプルプログラム
次のページに繰り返しや条件分岐に関するサンプルプログラムがあります. 必要に応じて「ダウンロード」して参考にしてみてください(注意::画面で開くと文字化けすることが予想されます).
注意
以下のことに注意してください.
- プログラムを変更した場合は,必ずファイルを保存して,その後プログラムを実行してください.
- ファイルを保存する.
- (再度)プログラムを実行する
- プログラムを実行してエラーがでたら「よくある質問」を参照してみてください. もちろん分からないことがある場合には演習中に質問してください.
- プログラムを提出する際には「課題提出に関する注意」を必ず守るようにしてください.