Python会〜タートルグラフィックスで幾何学模様を作ったよ。

はじめに

前回の内容はこちら:Python〜ev3とVSCodeで音楽作り

Pythonのタートルグラフィックスで幾何学模様を作ってみました。タートルグラフィックスは画面上に表示される亀を移動させることで、亀の動いた跡が線として描かれます。1967年にLOGO言語とともに登場し、プログラムの結果をすぐに目で見て確認できるため、理解しやすく、プログラミング教育でもよく使われています。
今回は、このタートルグラフィックスにフィボナッチ数列を使うことで、幾何学模様を簡単に作る方法を紹介します。

今回、参加した子達が作った幾何学模様

目次

1.タートルグラフィックスを使った基本的な図形の書き方
2.フィボナッチ数列について
3.フィボナッチ数列を使った幾何学模様の書き方

1.タートルグラフィックスを使った基本的な図形の書き方

エディターはVsCodeを使用しています。まずは、タートルグラフィックスで基本的な図形の書き方として、円を描いてみましょう。コメントアウトで説明しています。

from turtle import * #タートルグラフィックスを使えるようにする
color('red') #ペンの色
pensize(2) #ペンの太さ
speed(0) #描くスピード 0が一番速い

#円の描き方
begin_fill() #塗りつぶしスタート
circle(50) #半径50の円を描く
end_fill() #塗りつぶし終わり
done() #処理が終わっても表示させる

circle()内の数字を変えることで円の大きさが変わります。また、塗りつぶしをしない場合は、begin_fill()とend_fill()をコメントアウトするか削除してください。
三角形の場合は、亀が100前に進み、進行方向から120度左に向きを変えるという動作を3回繰り返すことで描くことが出来ます。

#三角形の描き方
color('pink')
begin_fill()
for i in range(3): #3回繰り返す
    forward(100) #前に100進む
    left(120) #左に120度曲がる 
end_fill()
done()

三角形と同じ要領で、他の多角形も描いてみましょう。四角形なら、下のコードのXを4に置き換えます。

#多角形の描き方
color('pink')
begin_fill()
for i in range(X): #xに描きたい辺の数を入力
    forward(100) #前に100進む
    right(360/X) 
end_fill()
done()

Xに9を入れた場合は、9角形が出来ます。

多角形が作れたら、
right(360/X)の行を、right(360/X*n)にして、nに整数を入れてみると、どんな図形になるか色々実行してみよう。例えば、X=5,n=2にすると、下のような星の形になります。

2.フィボナッチ数列について

フィボナッチ数列は、1,1,2,3,5,8,13,21,34,55,89,144,233,……といったように、最初の二つの1をのぞいて、三つ目以降は、前の二つの数を足した数で出来た数列です。このフィボナッチ数列は不思議と自然界に深く関係しています。例えば、ひまわりのタネの並び方や、オウムガイやDNAの螺旋構造、木の枝の別れ方などにもフィボナッチ数列やフィボナッチ数が出現します。また、私たちが美しいと感じる黄金比にも関係しているという神秘的な数列です。

まず、フィボナッチ数列のリストを作ってみます。フィボナッチ数は前の二つの数字の和になるという特徴を利用します。ここでは、6回繰り返しているので、1,1,2,3,5,8,13,21,34,55,89,144,233,377の数列が完成します。

a=1
b=1
fibonacci=[1,1] #fibonacciという名前のリストに1と1が入っている
for i in range(6):#6回繰り返す
a +b = a #aの値にbの値を足してaの値を更新
b +a = b #bの値にaの値を足してbの値を更新
fibonacci.append(a) #aの値をfibonacciリストに追加
fibonacci.append(b) #bの値をfibonacciリストに追加

3.フィボナッチ数列を使った幾何学模様の書き方

先ほど作ったfibonacciリストを使って幾何学模様を描いてみましょう。fibonacci数列のリストを作った後に、fibo_circleという関数を作り、パラメーターを設定します。

from turtle import*
a=1
b=1
fibonacci=[1,1]

for i in range(6):
  a = a+b
  b = b+a
  fibonacci.append(a)
  fibonacci.append(b)

def fibo_circle(iro,muki,okisa,kakudo,hane,hen):#fibo_circleという名前の関数を作る。
  for i in range(hane):#羽の数だけ繰り返す
    for j in fibonacci:#fibonacciに入っている数で繰り返す
      pencolor(iro)#ペンの色
      pensize(2)#ペンの太さ
      circle(j/okisa,kakudo*muki,hen)
    speed(0)
    penup()#ペンを上にあげる
    home()#ペンの位置をホームに戻す
    pendown()#ペンを下に下げる
    rt(360/hane*(i+1))
fibo_circle('skyblue',1,4,270,8,12) #パラメータに好きな値を入力する。この場合は、色=skyblue, muki=反時計回り,okisa=4,kakudo=270度,hane = 8,hen = 12となっている

fibo_circle(iro,muki,okisa,kakudo,hane,hen)のパラメーターの解説

iro ペンの色
muki -1 = 時計回りに動く、 1 =反時計回りに動く
okisa 小さくすると描かれる図形が大きくなります
kakudo 描く円弧の大きさ

↑kakudo による図形の違い

hane 何回、同じパターンを繰り返すか

↑hane の数による図形の違い

hen 多角形の形。henのパラメーターを入れない場合は、円形になる。その場合は、def fibo_circle(iro,muki,okisa,kakudo,hane,hen):の行から、henを削除する。

↑hen の数による図形の違い

あとは、fibo_circle()の中の各パラメータに好きな値を設定するだけで、様々な模様が描けます。

pythonする会

Python〜ev3とVSCodeで音楽作り

小学6年生と中学生を対象にlegoのマインドストームev3とPythonを使って遊ぶ会<Pythonする会>を開催しました。

第一回目は、<音楽>がテーマ!

みんなで、それぞれ、メロディを作って、それを繋げ合わせて、一つの大きな曲を作ろう、というもの。小学校でも音楽の時間にやる節づくりのアレンジです。

みんな揃ったところで、名前と学年、参加した理由を一言ずつ自己紹介。

自己紹介からスタート

Pythonが全く初めての子から、Pythonに興味があって触ってみたいと思っていたという子も。


<Python会について>
Pythonする会は、実社会の様々なサービスで使われているPythonを、子供たちと色々なアプローチで使ってみよう、と企画しています。

こんな事がプログラミングで出来るんだ!を、実際に体験する事で、じゃぁ、こんな事も実現できるのでは?というアイデアや、こんな事をやりたい!といった気持ちの芽みたいなものが、うまれてくれるといいなぁ、と。

みんなの関心も様々。得意な事をお互いに教え合ったり、興味あることに出会ったら、もっと深掘りしていく、そんな場になればいいなと思っています。

まずは3回の予定で実験的に行い、より良い形を探していこうと思っています。

<プログラミグ言語Pythonについて>

曲作りに入る前に、プログラミング言語とは、そもそも何?Pythonとは?という話から始めました。簡単にいうと、プログラミング言語は、人間もコンピューターも理解できる言葉のこと。

私たちは、普段、人に何かを伝えたり、また、表現したりといったコミュニケーションを<言葉>を使ってしますよね。その言葉は、日本語であったり、英語であってり、中国語であったり、住んでいる国や相手によって、様々な言語があり、お互いに意思疎通が成り立つ言語を使って、コミュニケーションをおこなっています。

一方、機械であるコンピューターは、情報をスイッチのON/OFFの二通りでのみ受け取ります。そのため、コンピューターが理解するには、伝えたい情報を2進法で表す必要があります。

コンピューターが2進法しか理解できないから、といって、私たちは、2進法でコンピューターとコミュニケーションは出来ません。いや、やろうと思ったら、出来ないことはないけど、、

Helloというのを2進法で伝える?

01001000 01100101 01101100 01101100 01101111

いやいや、考えるだけで、きっと気が遠くなっちゃうよね。

なので、人もコンピューターもお互いに理解できるプログラミング言語を使ってコミュニケーションしようということ。

人が使う言語もたくさんの種類があるのと同じで、プログラミング言語も様々な種類や特徴があって、Pythonはその一つ。

Pythonの特徴は、比較的、読みやすく、わかりやすい文法。

豊富なライブラリーがあり、機械学習やAIの開発がしやすい。

YoutubeやInstagramに使われているように、Webアプリケーションの開発も可能。

プログラミング言語とPythonの特徴をかなりざっくりと理解してもらったところで、テーマの音楽づくりに入っていきます。

<音楽のルールを知ろう>

今回は、最終的には、みんなのメロディを繋げて、一つの曲にしたいので、ある程度のルールを決めて、音楽づくりを行います。

決めたルールは次の三つだけ。

①レとソを使わない<ヨナ抜き短音階>で曲を作る。

この音階は、サクラサクラやなど、日本の童謡などでよく使われる音階です。曲に使う音階を統一すると、繋げた時に全体のまとまり感が出る。

②次の音を置くとき、その場に留まるか、隣の音に移動する。

ドの隣の音は、シかミになる。飛び飛びの音は使わない。

③4分の4拍子は変えない。

4分音符を8分音符二つに置き換えたり、16分音符四つに置き換えたりしてもいいけど、4分の4拍子は必ず維持!

音は、普段、親しんでいるドレミファソラシドでなく、英米式を使ってCDEFGABと表します。

<実際にプログラムを作ろう〜曲作り〜>

プログラミングの簡単な説明をして、まずは、サクラサクラの4小節分を雛形として使い、そこから、音符を置き換えていきます。

では、サンプルプログラム!

サクラサクラのはじめの4小節分です。エディターは、マイクロソフトの無料エディターVisual Studio Code (VSCode)を使用しています。

#!/usr/bin/env pybricks-micropython 
#micropythonでev3を使うための記載。
#vscodeでは自動的に記載される。
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile

# This program requires LEGO EV3 MicroPython v2.0 or higher.
# Click "Open user guide" on the EV3 extension tab for more information.

# Create your objects here. 
# この下にオブジェクトをかく。
ev3 = EV3Brick()

#タッチセンサー1を使えるようにする。
t1_sensor = TouchSensor(Port.S1) 
#タッチセンサー2を使えるようにする。
t2_sensor = TouchSensor(Port.S2)

# Write your program here. 
# 実際のプログラムはこの下にかく。
ev3.speaker.beep()


#サクラサクラのメロディー(4小節)
tempo = 100 #テンポを100にする。
ev3.speaker.play_notes(['A4/4','A4/4','B4/2'],tempo) 
#ラ・ラ・シー 書き方は'音・オクターブ/音の長さ'
ev3.speaker.play_notes(['A4/4','A4/4','B4/2'],tempo) 
#ラ・ラ・シー
ev3.speaker.play_notes(['A4/4','B4/4','C5/4','B4/4'],tempo)
#ラ・シ・ド・シ
ev3.speaker.play_notes(['A4/4','B4/8','B4/8','F4/2'],tempo)
#ラ・シ・ラ・ファー

まず、先ほどの音楽ルール①②を意識して、C(ド)→E(ミ)など、音だけを変えてみよう。
自分で、音を五線譜に書き込んでから、コードに写していってもいいし、やり方は自由です。
出来たらダウンロードして確認してみて、自分で、心地いい音の流れを見つけよう。

そこまで、出来たら、あとは、音符の長さを変えて、リズムを変えたり、自由に作曲。

<プログラムを作ろう〜音楽再生をタッチセンサーで制御〜>
次に、ロボットのタッチセンサーを押すと、曲が始まる、というプログラムにしました。こうする事で、自分の好きなタイミングで曲を演奏する事ができます。コードは下のwhile文を、先ほど作った音楽メロディのコードの上に付け加えるだけです。

while not t1_sensor.pressed(): #タッチセンサー1を押すまで無限ループ。
    pass


一人ずつ順番に作った曲を再生してみました。あらかじめダウンロードしておいて、自分の番になったらタッチセンサーを押すと再生されます。

今回は、ヨナ抜き短音階で作ったので、なんとなく和を感じる音楽になっていないでしょうか?

和を感じるには、ev3の電子音っぽいところが気になりますが。。

<音階を変えて曲をアレンジしよう>

では、音階を変えてみるとどうなるか?と実験してみました。

独特な響きを持つ琉球音楽は、主に<ニロ抜き長音階>を使って作られている事が多いです。THE BOOMの島唄などもそうですね。ニロ抜き長音階は、レとラを抜かしたド・ミ・ファ・ソ・シ・ドになります。先ほどの<ヨナ抜き短音階>のラをソに変えると<ニロ抜き長音階>になるので、琉球音楽っぽい雰囲気になります。

先ほど作ったコードのAをGに変えてみよう!

琉球アレンジ 音楽あわせ


どことなく琉球音楽っぽいメロディが。ただ、これもやっぱり、ev3の電子音が気になりますが。。

<まとめ>

今回は、ごく簡単なプログラムで、色々遊びました。音楽への関心度は様々だったと思いますが、楽器をやっている子も、特に音楽の知識がない子も、みんな集中して曲作りに取り組んでいました。
EV3が導入されている中学校も多いと思うので、音楽の時間にプログラミングを絡めたこんな授業があっても楽しそうです。

次回は、フィボナッチ数列を使って、綺麗な幾何学模様を作っていく予定です。

おしまい

ロボ団泉大津教室つうしん 9月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、9月号が出来ました。
クラスの様子や授業の内容をのせています。

泉大津教室つうしん 9月号

現在、泉大津教室では、10月より新規開講のベーシッククラスの体験を受付中!

クラスのスケジュール表をアップしました。

2019年10月~3月までのレッスンスケジュールです。
↓詳細はこちらのスケジュール表でご確認ください。
スケジュール表2019後半

水曜日 16:30~18:00 starter 小学1〜3年(途中入会可能)
金曜日 16:30~18:00 Basic
土曜日 9:30〜12:30 Advance
土曜日 14:00〜17:00 pro
土曜日 14:00〜17:00 Basic 10月より新規開講(体験・入会受付中)

ロボ団泉大津教室つうしん 6月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、6月号、アップしました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.6月号

 

ロボ団泉大津教室つうしん 5月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、5月号、アップしました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.5月号

 

 

ロボ団泉大津教室つうしん 3月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、3月号が出来ました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.3月号

 

ロボ団泉大津教室つうしん 1月号アップしました。

教室で配布している泉大津教室のつうしん、1月号、アップしました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.1月号

 

ロボ団泉大津教室つうしん 12月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、12月号、アップしました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2018.12月号

 

消えゆく職業と仕事。

【メガバンクのIT化、大幅な人員削減時代へ突入】

先日、三菱UFJ銀行が店舗を集約していく旨の方針を発表しました。
2割程度の店舗を廃止して、余剰人員は配置転換していくようです。これにより約1万人程度の人員が削減されるとされています。この判断の裏側には、もちろん銀行の収益性低下に対する危機感があります。

マイナス金利という情勢下では預金がいくら集まっても運用先がない現状、下手をすると逆ザヤになりかねないからです。

大手企業の社債は、年利0.05%程度のものでも高利回りと言われるぐらい利率が付かないのです。
(当然、短期債か長期債で利回りは違いますが)

資本主義社会が成熟を通り越すと、経済成長が止まり資金需要がなくなるという事なのでしょう。

三菱UFJ銀行の決断は、収益性を確保するためにAI(人口知能)を使い、IT化を一層進めることにより、仕事の効率化を図り余剰人員を削減してコストを低下させていく事で生き残りを図っていくことにあります。

AIを導入することで、ルーティンワーク等は人海戦術に頼らなくても処理可能になりつつあるというのが、決断を下せた理由の一つなのでしょう。

三菱UFJ銀行だけでなく、同じメガバンクのみずほ銀行も、店舗の統合やIT化による業務の見直しなどを進めることにより、大幅な人員削減が予定されています。

【将来、労働人口の約半分はAIに置き換わる?】

野村総合研究所が2015年に発表したオックスフォード大学との共同研究では、10年から20年後の日本の総労働人口の約50%の仕事は、人工知能やロボットに置き換わることが可能と予測しました。今、まさにこのことが、急速に進んでいるのではないかと感じます。

実際、あるメガバンクの関連会社に勤務していた私の友人は、人員削減にともなって、一般事務系での派遣の契約更新が打ち切られました。新しい職を探そうにも、女性の場合は年齢によって一般事務での派遣契約は難しくなるのを年々感じるそうです。彼女は、たまたまプログラミングの知識があったので、別の派遣社員という形でプログラミングの仕事を得ましたが、それがなければ露頭に迷うところだったと話していました。

今後の社会では、プログラマーという職業につかなくても、幅広い職種でプログラミング的素養や基礎的な知識は必要になってくるのではないでしょうか。

先日も米国の投資銀行ゴールッドマンサックスは、AIが運用を担当する投資信託を日本国内でローンチしました。

もともと投資銀行ではロケット物理学者や数学者が運用プログラムを独自に制作し資産運用の世界で成功を収めてきました。

ゴールドマンサックスが最強の投資銀行といわれるようになった理由の一つは昔から積極的に理系科学者を登用して、リサーチ部門のみならずリスク計量モデルを開発する事で収益性の拡大を果たすことが出来たからです。

今から20年程前になりますが、私が、理系の大学院生だったころは、外資系の投資銀行が積極的に採用活動を行っていました。

国内企業に比べて、外資の投資銀行は破格の待遇でした。大半が企業や公的機関などの研究職に進む中、投資銀行に就職するというのはわりに珍しかったのですが、今になれば、外資が積極的に理系学生を採用していた理由がわかります。

今では、日系の証券会社もAIが運用するファンドを負けじと設定してきています。

どのプログラムが優れているのか、という競争で更にAIが進化してくのでしょう。

今後、金融業界が求める人材にもプログラミングの知識が必須の時代が到来しそうですし、他の業界もその流れの中から無縁とはなりえないでしょう。

ただし、いくらIT化、ロボット化が進んでも、完全に置き換わることもありえません。

高度な知識やスキルが求められる仕事や、創造性や協調性が必要な業務などは、人工知能での代替が難しく、これまで通り人が担うと予測されます。

これからの未来を担う子ども達には、プログラミング素養はもちろん、その学びを通して、人にしか担えない能力、それは、思考力や問題解決力であったり、表現力やコミュニケーション能力、また想像力や創造力であったりするのですが、そういった力を小さいころから身につけていって欲しい、思います。