太子プログラミングクラブ4回目!~Turtleでフラクタル~
2024年10月25日は、太子プログラミングクラブ「初級コース」の4回目を実施しました。隔週で全6回のコースの4回目ですが、日程の都合で先週に引き続き連続で実施しました。
4回目は、Pythonを使って、多角形を描くプログラムを発展させてフラクタルを描きます。使うツールはTurtle.pyです。細かいことはおいといて、多角形を描くプログラムを発展させてここまでできることを実感してもらいます。
第4回のタイムスケジュールは、以下のとおりです。
- 19時00分~19時15分 タイピング練習
- 19時15分~19時30分 マウス練習
- 19時30分~19時40分 休憩
- 19時40分~20時10分 Pythonで多角形を描くプログラム(発展編2)
- 20時10分~20時20分 休憩
- 20時20分~20時45分 Pythonでフラクタル描くプログラム(写経編)
- 20時45分~21時00分 あとかたづけ
Contents
タイピング練習・マウス練習
タイピングの練習は、無料タイピングで英語入力です。。マウスの練習は、マインスイーパーを使いました。
- 無料タイピング
https://manabi.benesse.ne.jp/gakushu/typing/ - マインスイーパー(Google検索のWebアプリ)
https://www.google.com/search?channel=fs&client=ubuntu-sn&q=%E3%83%9E%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%A4%E3%83%BC%E3%83%91%E3%83%BC
英語入力が、ローマ字入力と大きく違う点は、2つあります。「ローマ字で使わないキーが複数あること」「単語の区切りが必ずスペースであること」です。プログラミングにより近いのは英語入力です。
そして、手ぬぐいで手元を隠してタイピングします。もうすでにかなりのレベルでタッチタイピングできているのが恐ろしい。
なお、タッチタイピングを効率よく習得しようと思うなら、1日5分でも10分でもいいので毎日続けることです。1カ月もすればかなり上達します。ちなみに、大人のメンバーは2ヶ月程度でスコアが倍以上になりました。(喜びの報告をいただきました!)
マウスの練習は、マインスイーパーです。
マウス操作自体は、特に問題のあるメンバーはありません。ただ、マインスイーパーのパズル要素のほうに苦心している様子です。
マインスイーパーには、運の要素もありますが、論理的に考えれば爆弾の位置を正確に推定できることがほとんどです。場合分けをしながら、論理的に考えていきます。
実は、このプロセスはプログラミングと同じです。「論理的(ロジカル)に考える」訓練にも、マインスイーパーは効果的です。
よく使うショートカットキーを知る
キーボード操作にも慣れてきたようなので、よく使うショートカットキーを覚えてもらいました。説明したのは以下の4つです。
操作 | キー入力 |
---|---|
コピー | Ctrl + c |
切り取り | Ctrl +x |
貼り付け | Ctrl + v |
もとに戻す | Ctrl + z |
ショートカットキーを、大人の方で仕事で多用している人も多いことでしょう。おそらく、最初に覚えたショートカットキーは上に示したもののうちどれかではないでしょうか。
バカ正直にすべて手入力するのではなく、抜ける手は徹底的に抜くのがコンピューターの正しい使い方です。似たようなコードがでてきたら、コピーして使いましょう。
Pythonで多角形を描く(発展編2)
さて、Pythonプログラミングの本編は、引き続き多角形を描くプログラムに取り組みます。前回「星の色を途中で変えられないのか?」とう質問が出てきたので、これを解決しましょう。下は、画面にランダムに星を表示するプログラムを再掲します。
from turtle import *
import random as rd
speed(0)
pencolor('blue')
for _ in range(40):
penup()
goto(rd.randint(-200, 200), rd.randint(-200, 200))
pendown()
for i in range(5):
forward(30)
right(144)
done()
このプログラムのどこかに、下のコードを挿入します。挿入する箇所は、それぞれに考えてもらいます。
pencolor((rd.random(), rd.random(), rd.random))
これだけのヒントでプログラムを改造してもらうと、プログラムを実行するたびに星の色が変わるプログラムを書いたメンバーがほとんどでした。5行目にpencolorがあるので、単純に置き換えただけですね。これは面白くないのです。
どうせなら、プログラム実行中に色が変わるほうが、目に見えて変化があって面白いプログラムになります。何人かは自力で答えにたどり着いた様子です。ヒントをあげながら行き着いたコードは以下です。
from turtle import *
import random as rd
speed(0)
pencolor('blue')
for _ in range(40):
pencolor((rd.random(), rd.random(), rd.random))
penup()
goto(rd.randint(-200, 200), rd.randint(-200, 200))
pendown()
for i in range(5):
forward(30)
right(144)
done()
8行目に挿入すると、画面に描かれる星の色がすべて違う色になります。規則性はなく、ランダムに色が変化します。
ちなみに、5個ずつ色を変えるにはどのようにコードを書くかというと、以下のように書きます。
from turtle import *
import random as rd
speed(0)
pencolor('blue')
for i in range(40):
if i % 5 == 0:
pencolor((rd.random(), rd.random(), rd.random))
penup()
goto(rd.randint(-200, 200), rd.randint(-200, 200))
pendown()
for _ in range(5):
forward(30)
right(144)
done()
ハイライト箇所に変更があります。少しはなれた場所も変更しているので、注意してください。
コンピューターで色を表現するしくみ
pencolorで色設定が出てきたので、コンピュータープログラムで色を設定する仕組みについて学びましょう。
プログラムで色を設定する場合は、まず「光の三原色」を使って設定する方法を学びます。精密な色を求める印刷を求めない限り、この方法を知っておけば十分です。
光の三原色は、Red、Green、Blueの3つです。この三色の光の比率を変えることであらゆる色を表現します。使い方は、下のようにします。
#pencolor((Redの比率を0~1で示す, Greenの比率を0~1で示す, Blueの比率を0~1で示す))
#navy blue
pencolor((0, 0, 0.5))
#aquamarine
pencolor((0.496, 1, 0.828))
#VioletRed
pencolor((0.8125, 0.125, 0.5625))
小数点以下の数字が多少違いますが、おおむねこんな感じ。厳密に定義する方法は、別の機会に。
Pythonでフラクタル描くプログラム(写経編)
なんとなくPythonプログラムの方法がわかってきたところで、もっと引き出しを増やす特訓をします。写経です。
10~15行くらいのコードで、星型だけでなく、さまざまな絵を描けることを実感してもらいます。その中にはフラクタルもあります。
前で示したのは、ツリー状のフラクタル。それぞれエラーなく実行できたら、色を変えてみたり、パラメーターを変えてみたりしてもらいました。今はまだ細かい説明をしません。
ところで、エラーが出たときの対処方法について、特に説明していないのに自分で読んでコードを書き換えているメンバーに驚きました。将来のビル・ゲイツかスティーブ・ジョブズは、このメンバーの中にいるかも知れませんね。
次回予告 次は生成AIをつかってみるよ
次回は、今回自分たちで入力したプログラムを、生成AIを使って改造します。もっと言えば、0から作らせます。
学校では、まず教えない、というか先生が教えられないコンピューターの使い方を学びます。