課題
注意
プログラムで描く絵は自由に決めてください. ただしこのページで示しているサンプルプログラムそのもの,あるいはそれらを少し変更した(実質的にサンプルと同じ)プログラムを提出しても,課題としては評価の対象とはしません. (自分なりの)工夫をこらして絵を描くプログラムを作ることで,プログラミングの実体験を積むことが本課題の目的です. なお自分のプログラムで描画する絵の構成要素として,サンプルプログラムで描かれる図形を採り入れることは問題ありません.
プログラムの作成にChatGPT,Gemini,CoPilotなどの生成AIは使わないでください. プログラミングスキルを身につけるためには,プログラムを自分で書いてみることが重要です.
目次
はじめに
課題に取りかかる前に,まず次を確認してください.
- タートルグラフィクス
まだであれば「タートルグラフィクス」のページをよく読んでください. このページのタートルグラフィクスによる描画に関する「Tips」も参考にしてください. - プログラムのエラー
プログラムが思ったように動作しない場合には「よくある質問」をまず参考にしてみてください. 問題が解決しない場合は,もちろん質問してください.
プログラムの作成・編集
今回の課題では,新しいファイルを作成して,プログラムを記述した上で実行します. プログラムを作成する手順については,以下を参照してください.
- 端末ツールを起動
Windows: Anaconda (Miniconda3) > Anaconda Prompt (miniconda3) Mac: アプリケーション > ユーティリティ > ターミナル - 端末ツールからIDLEを起動
- Windows: Anaconda Promptに次を入力
idle ⏎
Mac: ターミナルに次を入力
idle3 ⏎
- Windows: Anaconda Promptに次を入力
- 新しいファイルを作成する
IDLEの「Shell」のメニューを使って,新しいファイルを「Editor」で開きます.[File] > [New File]空の「Editor」の画面が開きます. - [option] 編集するファイルに行番号を表示する
IDLEのEditorのメニューから[Options]>[Show Line Numbers]を選ぶと左端に行番号が表示されます. - プログラムを記述する
新しいファイルが開かれたら,まず最初に次のように書きましょう.
from pyturtle import * def draw(): # 描画の速さ('slowest','slow','normal','fast','fastest'のいずれか) speed('normal') # ここから亀の動作等を順に記述していく(1行に1つ) # プログラムの最後の行に次を書く launch(draw)
- 最初の行(from ...)はタートルグラフィクス(pyturtle)の機能をプログラムに取り込むことを意味しています.
- defの行は亀の動作の定義の開始を意味しています. プログラムを実行すると,defの次の行から(インデントがつけられている限り)1行ずつ順に上から処理されていきます. 亀の動作を記述するにあたっては,このことを意識してください.
- speed('normal')ではタートルグラフィクスでの描画の速さを指定しています.
- 最後の行(launch ...)は,キャンバスを開いた上で,drawで定義した内容に従って描画する準備を行うことを意味します. このlaunchの行はプログラムの末尾に配置します.またこの行は行頭にインデントをつけませんので注意してください(自動的にインデントされるかと思いますが,インデントは削除してください).
- '#'から行末までにはプログラムに関するコメント(注釈)を記述しています.コメントは書かなくてもプログラムの動作には影響しません.
- 空行(何も書かない行)はプログラムの動作には影響しません.
- プログラムでの亀の動作や設定などはすべて直接入力モード(いわゆる半角モード)で記述します. 日本語を使うのはコメントの本文と画面に表示するメッセージだけにします.
上の部分が書けたら「speed('normal')」の次の行から(launchの行より前に)亀の動作等を順番に追加していきます. このとき各行にインデントをつけることを忘れないでください. インデントは自動的に付けられるはずです. 自動的にインデントが入らない場合には[TAB]キーを押してください.
- プログラムを保存する
プログラムが記述できたら最後に必ずファイルを保存します. プログラム作成の途中でもこまめにファイルを保存するとよいでしょう.[File] > [Save]最初に保存する際にはファイルを保存するフォルダとファイル名を決めることになります. 次のルールに従ってください.- ファイルを保存するフォルダ
ファイルはサンプルプログラムが置いてあるフォルダに保存するようにしてください.ExBasicInfo > Programming
タートルグラフィクスのプログラムは必ずこのフォルダに保存してください. - ファイル名の付け方
ファイル名は以下のルールに従って決めてください.- (いわゆる)半角の英数字および『.』『_』『-』で構成する
- 1文字めは英数字にする
- 「空白文字」と(いわゆる)全角の文字は使わない
- 半角のカタカナは使わない
- 末尾は必ず「.py」とする(「.py」はPythonプログラムを表す拡張子)
- 「turtle.py」「pyturtle.py」は避ける(プログラムが動作しなくなります).
- ファイルを保存するフォルダ
プログラムのコメント
プログラムの各行で#(ナンバー記号,ハッシュ記号)以降から行末まで(IDLEのEditorの画面では赤い文字の部分)はプログラムに関するコメント(注釈)として扱われます(#は英数字モードで入力します). プログラムを実行するときにはコメントは無視されます. そこでコメントは書いても書かなくてもプログラムの動作には影響しません.
それではコメントは不要なものかといえば,そうではありません. コメントには(人が読むための)プログラムの注釈(説明)を書きます. プログラミング言語を理解していれば,コメントがなくても, プログラムは理解できるはずではあります. しかしプログラミング言語は,日常で用いる言語(日本語,英語などの自然言語)とは異なっていることもあって,そのままでは理解が難しいことがあります. そのときに自然言語の(適切な)コメントがあれば,理解に役立ちます.
たとえ自分が書いたプログラムでも,コメントがなければ,(プログラムを作成した後にしばらく時間が経つと)理解できなくなることが少なくないでしょう. プログラムには適切にコメントを書くことが重要です(コメントが多すぎても邪魔になるでしょう).
[余談] #と♯ ナンバー記号(#)は,音楽のシャープ記号(♯)とは異なります.ナンバー記号(#)は水平な線2本と縦向きの斜めの線2本で構成されていて,シャープ記号(♯)は垂直な線2本と横向きの斜めの線2本で構成されています.キーボードに配置されているのはナンバー記号(#)です.
プログラムの空行
プログラム内の空行は,プログラムを実行するときには無視されます. プログラムに空行を適切に入れると,プログラムの構成がわかりやすくなります.
プログラムの実行
今回のプログラムは「IDLE]の「Editor」を介して次のように実行します.
画面が表示されたら,マウスを左クリックするか,[Enter]で描画が開始されます. 画面上の矢印(亀)が消えたら描画完了です. 描画が完了した後,マウスを左クリックするか,[Enter]で画面を閉じてプログラムを終了します.
プログラムを実行して想定通りに動作しなかった場合にはプログラムを修正することになります. 原因が分からない場合には,次の「よくある質問」を参照してみてください. 解決できない場合は演習中に質問してください. その他プログラムのエラーでなくても分からないことがあれば質問してください.
プログラムの提出
プログラムを作成,実行して,描画の結果を確認して問題がなければ, PandAの課題にPythonのファイルを添付ファイルとして提出してください.
参考資料
亀の動かし方,描画に使う色の指定方法,あるいはプログラムのエラーに関する情報を示します.
注意
以下のことに注意してください.
- プログラムを変更した場合は,必ずファイルを保存して,その後プログラムを実行してください.
- ファイルを保存する.
- (再度)プログラムを実行する
- すでに説明したように,"#"から行末までは「コメント」として扱われます.
コメント部分には適宜プログラムの説明を書きます.
コメントはプログラムの実行時には無視されるため,
Pythonの文法を気にしないで自由に書いて構いません.
- 以下の「Tips」にタートルグラフィクス,Pythonに関する情報があります.
- プログラムを提出する際には「レポート提出に関する注意」を必ず守るようにしてください.
Tips
- タートルグラフィクスでの「上描き」
タートルグラフィクスでは「上描き」ができます. つまり一度線や面を描いた後に同じ場所に再度描画できます. このとき先に描かれていた図形は後から描いた図形で(一部)隠されます.
- 四則演算に関する注意
- 乗算:演算子は「*」です.乗算の演算子を省略することはできません(数学とは異なります).
- 除算: 演算子は「/」です(計算結果が整数になる場合もデータとしては小数値になります).
(1+math.sqrt(5))/2 # ==> OK (1+√5)/2 0.5*(1+math.sqrt(5)) # ==> OK (1+√5)/2 0.5(1+math.sqrt(5)) # ==> エラー(乗算の演算子がない)
- 演算の優先順位とその制御
四則演算の優先順位は数学と同じです. また数学と同様に括弧で優先順位を明示できます. ただし計算式での括弧には常に( )を使います. { }や[ ]は使いません(別の意味に解釈されてしまいます).7 * 3 + 2 / 2 # ==> 22.0 7 * (3 + 2) / 2 # ==> 17.5 (1 + 7 * (3 + 2)) / 2 # ==> 18.0 {1 + 7 * (3 + 2)} / 2 # ==> エラー({ ... }は使えない)
- 数学関数,定数
数学で使われる関数や定数はPythonでは「math.関数名(パラメタ)」,「math.定数名」のように記述して使います(※).関数・定数 プログラムでの表記 sin x math.sin(x) cos x math.cos(x) tan x math.tan(x) √x math.sqrt(x) ex math.exp(x) log x math.log(x) π math.pi
三角関数のパラメタはラジアンで与えます.
※ [注意] Pythonで数学の関数,定数を使うには本来はプログラムの最初に「import math」と書いておく必要があります. この演習のタートルグラフィクスではそれを別途済ませてあります.
- プログラムにランダム性を採り入れる
プログラムでは(擬似的な)乱数を使うことができます. 乱数とはデタラメに決められる数です. 実行するたびに毎回異なる数が得られると期待できます. この演習のプログラムでは,次のように記述すれば乱数が得られます.# rand(n): 0,1,...,n-1のいずれかを得る(nが正の整数のとき) # rand(0): 0以上1未満の数を得る # たとえば次のようにして乱数を発生させることができます. def draw(): rand(10) # 0,1,...,9のいずれか rand(0) # 0以上1未満の値 forward(10+2*rand(100)) # 10+2sだけ前進(s=0,1,...,99)
なおこのrand()は演習用のタートルグラフィクスで独自に定義しているものです.
サンプルプログラム
参考のために,サンプルプログラムを提供します.
課題として,これらと同じプログラムあるいは実質的に同じプログラムを提出しても評価の対象にはしません. 作成するプログラムの一部にサンプルを利用することは問題ありません.