- 0928学習指導案 1 -- 0928学習指導案 2 -宮崎県立妻高等学校

１．日時

令和 4 年９月２８日（水）２限目

２．場所

図書館棟１階コンピュータ室

３．対象クラス

1年3組

情報科（科目：情報Ⅰ）

指導教諭

河野正臣

２６名

４．小単元及び本時の位置
第３章 情報デザイン(計４時間)
27 情報を表現する方法(0.5 時間）
28 効果的な情報デザイン(0.5 時間）
実習(本時１/３時間）
５．本時の目標
コミュニ ケーシ ョン の目的 や受 け手 の状 況に 応じて ，情 報を どのよ う に活用・表 現す ればよ いか考え ，そ の結 果を 適切 に表現 して いる 。

６．展開
段
階

具体的な内容・活動

指導上の留意・配慮事項

評価内容・評価方法

１

タイピング練習を行う。

導
入
８
分

２

前時の復習

展
開
３
２
分

３ 本時の内容
・特別教室などの特徴ある施 ・世の中にあるピクトグラム
設のピクトグラムを作成を紹介し，制作物のイメーする。
ジを持たせる。
・評価の観点についても確認する。
・アプリの使い方を簡単に指導する。
・周りと相談することを推奨 ・机間指導にて，評価ルーブする。
リックがＣ評価となりそうな生徒へアドバイスを
行う。

ま
と
め
５
分

・タイピングの状況を目視で確認する。
・前時のポイントを踏まえた実習を行うことを伝える。

４ 本時のまとめ･振り返 りシート への記入 す･本時のまと めとして「振 りることで，本時の学習内容
返りシート」への記入をすを確認させる。
る。
・(再)提出ボタンを忘れずにクリックさせる。
５

次時の予告

・次時の予告を聞く。

- 0928学習指導案 3 -2022/9/27- 0928学習指導案 4 -1

2022/9/27

実習- 0928学習指導案 5 -2

2022/9/27

実習・その教室や施設の特徴や目的，伝えたい情報の本質を確認する。
・それ以外の情報を単純化する。

・Google classroomにて配布している課題「ピクトグラム」を開く。
・簡単に使い方を説明するので参考に。
・となり近所と相談，大いに結構！！
友達の意見も参考にしよう！

- 0928学習指導案 6 -3

- 0928学習指導案 7 -- 0928学習指導案 8 -- 1111学習指導案 1 -- 1111学習指導案 2 -- 1111学習指導案 3 -- 1111学習指導案 4 -- 1111学習指導案 5 -- 1111学習指導案 6 -- 1111学習指導案 7 -- 1111学習指導案 8 -- 1111学習指導案_プログラミング教材 1 -はじめに

hun_1day = 60 * 24
print(hun_1day)# 24時間を分に換算する。

クリプトが記述されています。

たとえば次のコードセルには、値を計算して変数に保存し、結果を出⼒する短い Python ス

このドキュメントは、Colab ノートブックという、コードを記述して実⾏できるものです。

２

Colab（コラボ）とも呼ばれます。

簡単に共有

GPUに料⾦なしでアクセス環境構築が不要

ブラウザ上でPythonを記述，実⾏できる。

Googleが機械学習の教育及び研究⽤に提供しているサービスの１つとは?

１ Google Colaboratory（グーグル・コラボレイトリー）

河野 正⾂

宮崎県⽴妻⾼等学校

2022.11.09 更新

Pythonの実習

Google Colaboratoryを利⽤した

上記のセルのコードを実⾏するには、セルをクリックして選択し、コードの左側にある実⾏# 24時間を秒に換算する。

４

ファイルの新規作成

し，出てきたColaboraytoryをクリックする（インストール）。

出てきた画⾯の上側にある検索窓「apps内を検索」にColaboratoryと⼊⼒して検索

⼀番下にある「その他」→⼀番下にある「＋アプリを追加」をクリックします。

2.

3.

Google Driveの左上にある「＋新規」のボタンをクリックします。

準備

1.

３

ちなみに作成したノートブックは、⾃動的にGoogle Driveに保存されます。

byou_1day = hun_1day * 60
print(byou_1day)

1つのセルで定義した変数は、あとで他のセルで使⽤できます。

コードはセルをクリックしてそのまま編集できます。

します。実⾏して少し待つと結果が表⽰されます。

ボタン（⿊丸に三⾓）をクリックするか、キーボード ショートカット「 Shift + Enter 」を使⽤

- 1111学習指導案_プログラミング教材 2 -ファイル（ノートブック）を開く「Untitled0」の部分に新しい名前を付けます。

作成したら，ファイルに名前を付けてください。左上にある「Untitled0.ipynb」の新しいノートブックが作成されます。

⼀番下にある「その他」→ 中程にある「Google Colaboraytory」をクリックすると，

Google Driveの左上にある「＋新規」のボタンをクリックします。

ください）。

（アプリを登録してすぐは作成されていないかもしれません。そのときは，2から進めて

Google Driveの中にある「マイドライブ」→「Colab Notebooks」をクリックしますています。ダブルクリックして開きます。

ファイルは，Google Driveの中にある「マイドライブ」→「Colab Notebooks」内に保存され

５

4.

3.

2.

1.

⼀般的には，読みやすさを優先して，半⾓スペースを⼊れて記述します。なお，半⾓

実は，実⾏結果に違いはありません。

print(5 + 3)

print(5+3)

では，次の2つのコードを実⾏すると，結果はどうなるでしょう?

ークで囲みません。

ます。「数値」として計算させ，結果を表⽰させたいとき，引数はクォーテンションマ

上のコードは「⽂字」として，下のコードは「数値」として，それぞれ認識されていprint(5 + 3)

print("5 + 3")

次の2つのコードを実⾏すると，どのようになるでしょう?

プログラミングの世界では，数字と⽂字列を区別して扱います。

近くの⼈と，画⾯に表⽰させて会話をしてみましょう。

2.

「 こんにちは 」と表⽰させてください。

■練習02

print('Hello')

print("おはよう")

み、全⾓を使うことができます。

なお，コードは半⾓英数で⼊⼒します。クォーテンションマークで囲まれた部分の(例)「おはよう」と挨拶した。

ず対にします。作⽂を書くときに会話⽂を「 」で囲むのに近いイメージです。

ーテンションマークで囲みます。ダブル(")でもシングル(')でもどちらでもよいですが，必「 print() 」の部分を関数，「 表⽰するもの 」の部分を引数といいます。 引数はクォ

print(表示するもの)

次の関数（命令）で表⽰することができます。

⽂字を表⽰する

■練習01

1.

６

（Safariなど）から開きましょう。

しかし，iPad等の「ドライブ」アプリからは開くことができません。この場合は，ブラウザ

- 1111学習指導案_プログラミング教材 3 -

割り算の商べき乗（指数）

アスタリスク アスタリスク**

練習03で使⽤していない算術演算⼦を使って数式を書いて「 13 」と表⽰させてく

■練習04

1.

「 hako 」と「 たからもの 」が等しいという意味ではありません。プログラミ

ングの世界では，「 hako 」（左辺）に「 たからもの 」（右辺）を⼊れると考えます。

[１⾏⽬]

このコードは，次のようになっています。

print(hako)

hako = "たからもの"

次のコードを実⾏したら，どうなるでしょう?

変数を使う

print("おは よ う ご ざ いま す 。" + "今 日も い い 天 気 です ね 。")

なお「 + 」は，⽂字と⽂字をくっつける場合にも使⽤されます。

ださい。

コードには数式を書いて「 13 」と表⽰させてください。

print(5 ** 2)print(5 // 2)

1.

８

[2⾏⽬]

す。

[1⾏⽬]

data の部分に，[1⾏⽬]で⼊⼒した⽂字を⼊れた状態で表⽰します。

input() 関数で，ユーザーに⼊⼒を求めます。⼊⼒された⽂字を data に⼊れま

このコードは，次のようになっています。

print("こんにちは，" + data + "さん。Pythonがんばっていきましょうね。")

data = input("あなたの名前を入力してください。")

ユーザーに⽂字を⼊⼒させ，表⽰させることもできます。

←小 数 とし た い 場 合data = float(input("小 数を 入 力 し て くだ さ い。 "))print("こんにちは")print("こんにちは")

例えば，「 こんにちは 」を4回繰り返したいときは，次のようにすればいいですね。

同じことを繰り返したいときは，どうするのでしょう?

指定回数の繰り返し（反復処理）←整 数 とし た い 場 合data = int(input("整 数 を入 力 し て く ださ い 。"))

もし，ユーザーに数として⼊⼒させたい場合は，[1⾏⽬]を次のようにします。

3.

box_2 」を表⽰してください。

print(5 / 2)

print(5 % 2)

■練習06

print(5 * 2)「 box_2 」という変数を作成し，その変数に何か数式で表したものを⼊れ，「てください。

「 box_1 」という変数を作成し，その変数に何か⾔葉を⼊れ，「 box_1 」を表⽰し

■練習05

■練習03

７

「 keisan 」を表⽰しますが，「 keisan 」にはクォーテンションマークがない[２⾏⽬]ので，「 keisan 」の中⾝である「 13 」が表⽰されます。

「 keisan 」には「 6+7 の計算結果 」つまり「 13 」が⼊っています。

[１⾏⽬]

このコードは，次のようになっています。

print(keisan)keisan = 6 + 7

次のコードを実⾏したら，どうなるでしょう?

print(5 - 2)2.

「 hako 」を表⽰しますが，「 hako 」にはクォーテンションマークがないので，「 hako 」の中⾝である「 たからもの 」が表⽰されます。

[２⾏⽬]

print(5 + 2)

次のコードを実⾏すると，どのように表⽰されるでしょう?

割り算の余り

パーセント

割り算

スラッシュ

/

スラッシュ スラッシュ

かけ算

*

//

引き算

アスタリスク

-

%

⾜し算

プラス

マイナス

+

計算

読み

演算⼦

「 + 」のような計算に必要な記号のことを算術演算⼦といいます。

スペースを必ず⼊れなければならない場所もあります（後述）。

- 1111学習指導案_プログラミング教材 4 -す。

1. 条件によって，処理を変えたいときもありますよね。そのときに使える構⽂になりまもし〜ならば（条件分岐）▯▯▯▯print( x )for x in range( 2 , 10 , 2):

次のコードを実⾏すると，どのように表⽰されるでしょう?

▯▯▯▯繰り返したい処理

for 変数 in range( 値1 , 値2 , 増減量 ):させながら繰り返すことができます。

次のようにコードを書くと，変数の値を「 値1 」から「 値2 」の1つ前まで増減量で変化

2. for 構⽂について，実は，もう少し細かく繰り返しを指⽰できます。

for 構⽂を⽤いて「 おはよう 」を5回繰り返し表⽰させてください。

▯▯▯▯print( "こんにちは" )for x in range( 50 ):

■練習07

９

※ 半⾓スペースが先ほどの「 こんにちは 」を50回繰り返し表⽰させるには，次のようにします。

分かるように[]を使って表⽰しています。

半⾓スペースを4つ以外のことをすると，正しく実⾏されません。

[2⾏⽬]の先頭にある[][][][]（半⾓スペースを4つ）⼊れることです。

[1⾏⽬]の⼀番最後にある「 : 」（コロン）を忘れないことです。

ここで注意しなければならない点が2つあります。

おり「 真＝正しい 」「 偽＝正しいとはいえない 」のことです。⼀番最後にある「 : 」▯▯▯▯繰り返したい処理

else と出てきますが，これより前の⾏までが，真の場合の処理となります。そ

左辺と右辺が等しくない
左辺が右辺よりも⼩さい
左辺が右辺以下
左辺が右辺よりも⼤きい
左辺が右辺以上

!=
<
<=
>
>=

年齢を⼊⼒させ，次の条件で表⽰させてください。

if data >= 8:data = int(input("小テストの点数(10点満点)を入力してください。"))

2. if 構⽂を⼊れ⼦式で組み合わせることで3段階に分岐させることもできます。

・18才以上であれば「 あなたは⼤⼈です 」と表⽰させる。

・18才未満であれば「 あなたは未成年です 」と表⽰させる。

■練習08▯▯▯▯print("あ なた は 不 合 格 です 。 ")else:▯▯▯▯print("あ なた は 合 格 で す。 ")if data >= 8:data = int(input("小 テ スト の 点 数 (10点 満点 )を 入 力し て く だ さ い。 "))次のコードを実⾏すると，どのように表⽰されるでしょう?

左辺と右辺が等しい

意味

==

演算⼦

は，次のような⽐較演算⼦を使って書きます。

式や関数などの真/偽で答えられる条件とは，どのように書けばよいのでしょう。ここでスが分かるように[]を使って表⽰しています。

※ 半⾓スペー

先頭にある[][][][]（半⾓スペースを4つ）⼊れることを忘れないでください。半⾓スペースを4つ以外のことをすると，正しく実⾏されません。

[2⾏⽬][4⾏⽬]

して，これより後の⾏が，偽の場合の処理となります。

[3⾏⽬]（コロン）を忘れないでください。

[1⾏⽬]

if は，英語で学んだとおり「 もし〜 」のことです。真/偽は，数学で学んだとこのコードは，次のようになっています。

▯▯▯▯(偽である場合の)処理②

else:▯▯▯▯(真である場合の)処理①

if 式や関数などの真/偽で答えられる条件:

for 変数 in range( 回数 ):そこで，次のような便利な構⽂（ for 構⽂）があります!

るのですが，⼤変です。

でも，1万回繰り返したいとなったらどうしましょう?1万回コピペを繰り返せばできprint("こんにちは")print("こんにちは")- 1111学習指導案_プログラミング教材 5 -条件（8点以上）を満たせば[3⾏⽬]に進みます。条件を満たさない場合は，[4⾏

条件（8点未満であり，6点以上）を満たせば[6⾏⽬]に進みます。条件を満たさ年齢を⼊⼒させ，次の条件で表⽰させてください。

while は，英語で学んだとおり「 〜の間 」のことです。⼀番後ろに:（コロ

とても重要な⾏です。[1⾏⽬]の変数を変化させる処理を必ず⾏います。そうで▯▯▯▯print("あなたは不合格です。しっかり復習しよう。")

else:←変数に文字を入れる場合←変数に数を入れる場合

ュータは0番⽬から始まることに注意してください。

表⽰させる場合には，前から何番⽬を表⽰させるかを指定してします。なお，コンピ

変数 = [ "文字1" , "文字2" , "文字3" , ･･･ ]▯▯▯▯print("おしい。あと少しで合格です。")

変数 = [ 値1 , 値2 , 値3 , ･･･ ]次のようにすると，1つの変数の中に複数のデータを⼊れることができます。

リスト（配列）while 構⽂を⽤いて，10以上50以下にある偶数を表⽰してください。

elif data >= 6:

1.

11

■練習10

す。

▯▯▯▯print("おめでとう。合格です！")

if data >= 8:data = int(input("小テストの点数(10点満点)を入力してください。"))のようになります。

先ほど，⼩テストの点数を3つに分けましたが，この構⽂を使って書き直してみると，次▯▯▯▯(偽である場合の)処理③

else:▯▯▯▯(真である場合の)処理②[4⾏⽬]を⾒てください。これは，「 suu 」に「 2 」を加えるという意味の式になりま▯▯▯▯suu += 2

elif 式や関数などの真/偽で答えられる条件②:▯▯▯▯print(suu)▯▯▯▯(真である場合の)処理①

while suu <10:

suu = 1

次のコードを実⾏すると，1桁の奇数が表⽰されます。

ないと，永遠に繰り返し終了しません。

[3⾏⽬]ン）を忘れないでください。

[1⾏⽬]

このコードは，次のようになっています。

▯▯▯▯変数を変化させる処理▯▯▯▯(真である場合の)処理

while 変数を用いた真/偽で答えられる条件:

1. 条件が正しいときに繰り返すという反復処理として， while 構⽂というのがあります。

条件が正しいときに繰り返し（反復処理2）

if 式や関数などの真/偽で答えられる条件①:

3. （おまけ）3段階以上に分岐させる場合の別の⽅法もあります。

さらに組み合わせれば，4段階以上に分けることも可能です。

・20才以上であれば「 お酒も飲める⼤⼈です 」と表⽰させる。

る。

・18才以上20才未満であれば「 あなたは⼤⼈ですが，お酒は飲めません 」と表⽰させ

・18才未満であれば「 あなたは未成年です 」と表⽰させる。

■練習09

まとめると，①8点以上，②6点以上，③6点未満の3つに分けられたことになります。

ない場合は，[7⾏⽬]以降に進みます。

[5⾏⽬]⽬]以降に進みます。

[2⾏⽬]

このコードは，次のように考えることができます。

▯▯▯▯▯▯▯▯print("あなたは不合格です。しっかり復習しよう。")▯▯▯▯else:▯▯▯▯▯▯▯▯print("おしい。あと少しで合格です。")

10

す。

else:

▯▯▯▯if data >= 6:

4段階以上に分けたいときは，「 elif 」とその次の⾏をセットで増やしていけばよいで▯▯▯▯print("おめでとう。合格です！")

- 1111学習指導案_プログラミング教材 6 -上のコードを実⾏して「 こんにちは 」を表⽰させたい場合， aisatsu[0] の部分をど

１⽉，２⽉，･･･，１２⽉のリストをつくり，順に表⽰させてください。

pythonでは，よく使われるコードについてパッケージ化がされており「 モジュ←文字ではなく，数でも可次のようにモジュール（関連性のある「プログラム部品」を1つのファイルにまとめたす。

ここでは，図を描くために，モジュール名のところには「 ColabTurtle 」を⼊⼒しま!pip3 install （モジュール名）もの）を使うことで図を描くことができます。

print( random.choice( omikuji ) )omikuji = [ "大吉" , "中吉" , "小吉" , "吉" , "末吉" , "凶" , "大凶" ]import random

モジュール「 ColabTurtle 」の中の「 ColabTurtle.Turtle 」からすべての機能を使うことが⽰されています。

[1⾏⽬]

このコードは，次のようになっています。最後の3⾏が特に⼤事です。

▯▯▯▯left(120)▯▯▯▯forward(200)for i in range(3):さい。

width(1)bgcolor('white')color('orange')

initializeTurtle(initial_speed = 2)

from ColabTurtle.Turtle import *

次のようにすると，正三⾓形を描くことができます。

2. モジュール「 ColabTurtle 」では，カメを指⽰どおりに動かしながら，図形を描きます。

1.

1〜100の中からランダムに整数を表⽰させてください。

応⽤実習Ⅰ（図形描画）

■練習14

12

「 random 」というモジュールの中にある「 randint 」という関数（1〜6の中からランダムに整数を1つ選ぶ）で選ばれたものを表⽰します。

[2⾏⽬]

このコードは，次のようになっています。

print( random.randint( 1 , 6 ) )import random

ることができます。

例えば，次のコードを実⾏すると，おみくじの結果が表⽰されます。実⾏してみてくだ「 random 」というモジュールの中にある「 choice 」という関数（ランダムに

グー，チョキ，パーのリストをつくり，ランダムに表⽰させてください。

4. （おまけ）次のようにすると，サイコロのように1〜6の中から，ランダムに1つ表⽰させ■練習13

いかがだったでしょうか。おみくじがランダムに表⽰されてきます。

リストの中から選ぶ）で選ばれたものを表⽰します。

[3⾏⽬]

ます。

ール 」と呼ばれています。今回は「 random 」という乱数に関するモジュールを利⽤し[1⾏⽬]

このコードは，次のようになっています。

print( random.choice( 変数 ) )変数 = [ "文字1" , "文字2" , "文字3" , ･･･ ]import random

3. リストの中からランダムに使いたい場合には，次のようにするとできます。

■練習12▯▯▯▯print( x )for x in youbi:

youbi = [ "日曜日" , "月曜日" , "火曜日" , "水曜日" , "木曜日" , "金曜日" , "土曜日" ]例えば，次のコードを実⾏すると，⽇曜⽇から順に⼟曜⽇まで表⽰されます。

▯▯▯▯繰り返したい処理

for 変数 in リスト:

2. リストを順番に使いたい場合には， for 構⽂と組み合わせることでできます。

のようにすればよいでしょう。

■練習11

上のコードを実⾏すると「 おはよう 」が表⽰されますね。

print( aisatsu[0] )aisatsu = [ "おはよう" , "こんにちは" , "こんばんは" ]- 1111学習指導案_プログラミング教材 7 -カメの描く線の幅を⽰しています。

[5⾏⽬]「 forward(200) 」とは，カメの進⾏⽅向に向かって，まっすぐに200ピクセル「 left(120) 」カメの進⾏⽅向に向かって，左に120度⽅向を変えることを⽰し

1辺が200ピクセルの正五⾓形を描いてください。

1筆書きの星（5辺）を描いてください。ただし，辺の⻑さはいくらでもかまいませ

■練習16

■練習17

ここは反復処理ですね。「８ 指定回数の繰り返し（反復処理）」の2を参照

隣り合う a[j] と a[j + 1] を⽐較します。

隣の⼈とは異なる図形を想像して1つ描いてください。

2. このアルゴリズムをコードで表現すると，次のようになります。

ムです。この動画をみて，アルゴリズムを理解しましょう。

1. バブルソートとは，隣り合う要素の⼤⼩を⽐較しながら並べ替えを実現するアルゴリズ

バブルソートなソートの仕⽅があります。ここでは，３つやってみましょう。

リストなどの中を昇順(a,b,c,…,z)，降順(z,y,x,…,a)に並べ替えることをソートといい，いろいろ

応⽤実習Ⅱ（ソート）■練習19

tomato 」で描いてください。ただし，辺の⻑さはいくらでもかまいません。

1筆書きの星（5辺）の各辺を「 orange 」「 limegreen 」「 gold 」「 plum 」「次のコードを実⾏したら，「 ●回 」と表⽰されます。何の回数が表⽰されている▯▯▯▯▯▯▯▯for j in range(0, len(a) - i - 1 , 1):▯▯▯▯for i in range(0, len(a), 1):▯▯▯▯c = 0

def bubble_sort(a):らすと分かりやすくなります。）

か，考えましょう。また，実⾏してそれを確認しましょう。（ヒント:数字のリストの数を減

数字のリストを変更して，正しくソートされるかを確認してください。
■練習21

定義した関数「 bubble_sort 」に代⼊し，ソートの処理を⾏います。
■練習20

[3⾏⽬]

ソート前，ソート後のリストを表⽰させます。

並び替えたい数字のリストを変数 a としています。
[2・4⾏⽬][1⾏⽬]

なお，このコードは，次のようになっています。

print("ソー ト 後 → ", a)bubble_sort(a)print("ソー ト 前 → ", a)▯▯▯▯left(90)のコードを加えて実⾏してください。

では，実際にこのアルゴリズムでソートしてみましょう。上のコードの後に，次の４⾏分し，[7⾏⽬]で temp の中⾝を a[j + 1] に移します。

で a[j] の中⾝を temp という変数に⼀時的に移し，[6⾏⽬]で a[j + 1] の中⾝を a[j] に移もし a[j + 1] が a[j] よりも⼩さいならば， a[j] と a[j + 1] を⼊れ替えるために，[5⾏⽬]

[4⾏⽬]

表します。

しましょう。なお，「 len(a) 」は，変数 a （実際にはリストになります）の数値の数を[2・3⾏⽬]a = [7, 22, 22, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

■練習18

13

処理するための関数を「 bubble_sort 」（変数は a ）という名前で定義する，と⾔っています。

[1⾏⽬]

このコードは，次のようになっています。

▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯a[j + 1] = temp▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯a[j] = a[j + 1]▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯temp = a[j]▯▯▯▯▯▯▯▯▯▯▯▯if a[j] > a[j + 1]:▯▯▯▯▯▯▯▯for j in range(0, len(a) - i - 1, 1):▯▯▯▯for i in range(0, len(a), 1):

def bubble_sort(a):▯▯▯▯forward(200)▯▯▯▯color( col[ i ] )for i in range(4):width(1)bgcolor('white')col = [ "orange", "limegreen" , "gold" , "plum" , "tomato" ]initializeTurtle(initial_speed= 6)

2. 次のようにリスト（配列）を利⽤すると，描く辺の⾊を変えることができます。

ん。

1辺が300ピクセルの正⽅形を描いてください。

■練習15

ています。

[8⾏⽬]

進むことを⽰しています。

[7⾏⽬]

セクション7で学んだ「 繰り返し 」を⾏う for 構⽂です。

背景の⾊を⽰しています。

[4⾏⽬][6〜8⾏⽬]カメが描く線の⾊を⽰しています。

「 initial_speed 」とは，図を描くカメの表⽰スピード（1〜10）を表していま

[3⾏⽬]

す。

[2⾏⽬]

- 1111学習指導案_プログラミング教材 8 -処理するための関数を「 selectin_sort 」（変数は a ）という名前で定義する，

ここは反復処理ですね。「８ 指定回数の繰り返し（反復処理）」の2を参照

a[i] が最⼩値の候補です。

のコードを加えて実⾏してください。

では，実際にこのアルゴリズムでソートしてみましょう。上のコードの後に，次の４⾏分

temp の中⾝を a[j] に移します。

中⾝を temp という変数に⼀時的に移し，[6⾏⽬]で a[j] の中⾝を a[i] に移し，[7⾏⽬]でもし a[j] が a[i] よりも⼩さいならば， a[i] と a[j] を⼊れ替えるために，[5⾏⽬]で a[i] の

[4⾏⽬]

表します。

しましょう。なお，「 len(a) 」は，変数 a （実際にはリストになります）の数値の数を[2・3⾏⽬]と⾔っています。

[1⾏⽬]

このコードは，次のようになっています。

▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯a[j] = temp▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯a[i] = a[j]▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯temp = a[i]▯▯▯▯▯▯▯▯▯▯▯▯if a[j] < a[i]:▯▯▯▯▯▯▯▯for j in range(i+1, len(a), 1):▯▯▯▯for i in range(0, len(a), 1):

def selection_sort(a):2. このアルゴリズムをコードで表現すると，次のようになります。

ょう。

で並べ替えを実現するアルゴリズムです。この動画をみて，アルゴリズムを理解しまし1. 選択ソートとは，リスト内のデータから最⼩値を探索し，最⼩値から順に取り出すこと

選択ソート

print("ソー ト 後 → ", a)

ソート前，ソート後のリストを表⽰させます。

選択ソートのコードを修正して，⼊れ替えを⾏った回数が表⽰されるようにしてく■練習23▯▯▯▯▯▯▯▯j = j - 1▯▯▯▯▯▯▯▯i = i + 1▯▯▯▯▯▯▯▯▯▯▯▯m = i▯▯▯▯▯▯▯▯elif j == m:▯▯▯▯▯▯▯▯▯▯▯▯m = j▯▯▯▯▯▯▯▯if i == m:▯▯▯▯▯▯▯▯a[j] = temp▯▯▯▯▯▯▯▯a[i] = a[j]▯▯▯▯▯▯▯▯temp = a[i]▯▯▯▯▯▯▯▯▯▯▯▯break▯▯▯▯▯▯▯▯if i >= j:▯▯▯▯▯▯▯▯▯▯▯▯j = j - 1▯▯▯▯▯▯▯▯while a[j] > a[m]:▯▯▯▯▯▯▯▯▯▯▯▯i = i + 1▯▯▯▯▯▯▯▯while a[i] < a[m]:▯▯▯▯while(i < j):▯▯▯▯j = owari▯▯▯▯i = hajime▯▯▯▯m = int((hajime + owari) / 2 )def quick_sort(a, hajime, owari):

2. このアルゴリズムをコードで表現すると，次のようになります。

す。この動画をみて，アルゴリズムを理解しましょう。

したデータに対して同じ処理を再度⾏うことにより並べ替えを実現するアルゴリズムで

1. クイックソートとは，リスト内の1つのデータを軸として，⼤⼩2つに分割した後，分割

クイックソート

ださい。（ヒント:バブルソートでやったような…）

数字のリストを変更して，正しくソートされるかを確認してください。

定義した関数「 selectin_sort 」に代⼊し，ソートの処理を⾏います。

■練習22

[3⾏⽬]

[2・4⾏⽬]

bubble_sort(a)[1⾏⽬]

print("ソー ト 前 → ", a)

並び替えたい数字のリストを変数 a としています。

なお，このコードは，次のようになっています。

print("ソー ト 後 → ", a)selection_sort(a)print("ソー ト 前 → ", a)a = [7, 22, 22, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

a = [7, 22, 22, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]▯▯▯▯print(c, "回 ")▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯a[j + 1] = temp▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯a[j] = a[j + 1]▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯temp = a[j]▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯▯c = c + 1▯▯▯▯▯▯▯▯▯▯▯▯if a[j] > a[j + 1]:

- 1111学習指導案_プログラミング教材 9 -ルールが不明確で複雑な問題を解けないと分かると、次第に下⽕になっていきました。
このとき⼈⼯知能が解くことのできた問題は、「おもちゃの問題（トイ・プロブレ▯▯▯▯if owari > j + 1:▯▯▯▯▯▯▯▯quick_sort(a, m+1, owari)

処理するための関数を「 quick_sort 」（変数は a ， hajime ， owari の3つ）とい

ここは反復処理ですね。「１０

条件が正しいときに繰り返し（反復処理m を基準に分けた⼩さい⽅の集まりにおいて，「 quick_sort 」を実⾏しま

m を基準に分けた⼤きい⽅の集まりにおいて，「 quick_sort 」を実⾏しま

1.

14

数字のリストを変更して，正しくソートされるかを確認してください。

定義した関数「 selectin_sort 」に代⼊し，ソートの処理を⾏います。

最初のAIブームは1960年代に興りました。第1次AIブームで研究されたのは、コンピュ

https://www.tryeting.jp/column/1192/)

まず，⼈⼯知能(AI)の歴史について，学んでおきましょう。(出典:

発展実習（⼈⼯知能(AI)）

■練習24

[3⾏⽬]

ソート前，ソート後のリストを表⽰させます。

並び替えたい数字のリストを変数 a としています。

[2・4⾏⽬][1⾏⽬]

なお，このコードは，次のようになっています。

print("ソー ト 後 → ", a)2.

print("データの個数＝", len(digits.images))

digits = sklearn.datasets.load_digits()

import sklearn.datasets

まずは，sklearnにどんなデータが⽤意されているかを確かめることから始めます。

字か(target)」がペアでたくさん⼊っています。

タを読み込みます。この中には，「⼿書きの数字画像(data，images)」と「それが何の数

ここでは，「 sklearn 」というモジュールを利⽤します。 datasets.load_digits() でデー習させ，「⼿書きの数字」が何の数字なのかを判定させます。

⼤量の「数字の画像」と「それが何の数字か」のペアを与えて，「数字の特徴」を学

それでは，画像を認識・表⽰するための準備をします。

きます。

このセクションでは，「⼿書きの数字を認識するプログラム」を作成する実習をしてい分け⽅の精度は⼤きく変わります。

selection_sort(a)出して、分けるか」に関して、⼈間の⼒が必要でした。特微量に何を選ぶかによって、print("ソー ト 前 → ", a)

けることができる技術です。上記の機械学習は、「どの特微量に注⽬して、情報を取りディープラーニングは機械学習の⼀⼿法で、分けるための判断軸（特徴量）をAIで⾒つした。

が、そのころはコンピュータの計算速度や容量が追いついておらず、実現できませんで⾃動的に習得する技術です。機械学習のコンセプト⾃体は第2次ブームにもありました

機械学習とは、⼈間の学習能⼒を模倣し、⼤量のデータを処理しながら「分け⽅」をした。

れ以前では、⼈間がルールを定義し、AIが問題を解決したり知識を取り出す⼿法が主流でタの普及などです。第3次ブームの注⽬点は、AIが⾃ら学習し推測する点にあります。そ背景として挙げられるのが、機械学習の登場、ディープラーニングの登場、ビッグデー

2006年から現在に⾄るまで、第3次ブームの真っ只中にいます。第3次ブームが興ったらないこと。2つ⽬の問題点は、例外処理、⽭盾したルールに対応できないことでした。

つありました。1つは、⼈間の持つ「⼀般常識」レベルの膨⼤な知識を記述しなければな

えたエキスパートシステムですが、再び限界の壁にぶつかることになります。問題点は2

答えを条件反射で答えるプログラムです。ビジネスでの導⼊例も出現するなど好調に⾒テムとは、専⾨家の判断を代⾏するシステム。ルールに基づいたデータを⼊⼒し、そのa = [7, 22, 22, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]のコードを加えて実⾏してください。

では，実際にこのアルゴリズムでソートしてみましょう。上のコードの後に，次の４⾏分

す（[1⾏⽬]に戻り，再び処理が始まります）。

[23・24⾏⽬]

す（[1⾏⽬]に戻り，再び処理が始まります）。

[21・22⾏⽬][21⾏⽬]の処理をします。

break 」します（[5〜20⾏⽬]の反復処理から抜けます）。つまり[20⾏⽬]までを⾶ばし[11⾏⽬] ここは[10⾏⽬]の条件「 i >= j 」において「 正しい（真） 」の場合，「2）」を参照しましょう。

[5〜20⾏⽬]

⽐較する対象 i ， j の初めの値を決めました。

⽐較するための基準（ここでは中央値）を m とします。

[3・4⾏⽬][2⾏⽬]

う名前で定義する，と⾔っています。

[1⾏⽬]

を起こす引き⾦になったのが「エキスパートシステム」の実現です。エキスパートシス

⼀度冬の時代に⼊ったAIですが、1980年代で再び勢いを取り戻します。第2次AIブームム）」と呼ばれることになります。

の問題をコンピューターが次々の解く姿に世間を驚かせていました。第1次AIブームは、▯▯▯▯▯▯▯▯quick_sort(a, hajime, m-1)

このコードは，次のようになっています。

ーターを使って推論・探索をすること。パズルや明確なルールがあるゲームなど、特定▯▯▯▯if hajime < i - 1:

- 1111学習指導案_プログラミング教材 10 -読み込んだデータをグレースケールの濃淡画像にしています。
グレースケールの濃淡画像になったデータを表⽰します。

[5⾏⽬]
[6⾏⽬]

「 datasets 」の中に⽤意されているデータを読み込みます。

「 datasets 」の中に⽤意されているデータの総数を数えています。

読み込んだデータ(8x8の数値)を表⽰します。濃淡を数値で表しており，0が1番

[2⾏⽬]

[3⾏⽬]

[4⾏⽬]

上のコードを実際に実⾏してみてください。

読み込んだデータが何の数字であるかを⽰しています。

def predictDigits(data):▯▯▯▯digits = sklearn.datasets.load_digits()

plt.show()モジュール「 matplotlib 」の中の関数「 pyplot 」を追加で読み込みます。ここグレースケールの濃淡画像になったデータを表⽰します。

[4⾏⽬]「 predictDigits 」という関数を定義しています。

[1⾏⽬]

for 構⽂により30回繰り返します。

このコードは，次のようになっています。

[7⾏⽬]

plt.show()与えられた画像を8x8のグレースケール画像に変換します。

255(⽩)〜0(⿊)の濃淡データを0(⽩)〜16(⿊)になるように変換します。
0(⽩)〜16(⿊)になった濃淡データを数値リストに変換します。

[8⾏⽬]
[9⾏⽬]

0(⿊)となっている。

8x8のグレースケール画像を数値リストに変換します。濃淡データは255(⽩)〜[5〜6⾏⽬]▯▯▯▯plt.imshow(digits.images[i], cmap="Greys")「 imageToData 」という関数を定義している部分についてです。

まず，[4〜10⾏⽬]▯▯▯▯plt.title(digits.target[i])もう少し詳しく⾒ていきましょう。

▯▯▯▯plt.axis("off")[18⾏⽬] 関数「 predictDigits 」で「 what.png 」を処理し，判定します。

dataという変数で読み込みます。

[17⾏⽬] プログラムに判定させたい⼿書きの数字(「 what.png 」というファイル名)を「 imageToData 」という関数を定義しています。
[11〜16⾏⽬]

3つのモジュールや関数を追加で使います。
[4〜10⾏⽬][1〜3⾏⽬]

このコードは，次のようになっています。

predictDigits(data)

data = imageToData("what.png")▯▯▯▯print("こ の 画 像 は "+str(n)+" で す ！")▯▯▯▯n = clf.predict([data])▯▯▯▯clf.fit(digits.data, digits.target)▯▯▯▯plt.subplot(3, 10, i + 1)

for i in range(30):ましょう。

か。セクション7で学んだ「 繰り返し 」を⾏う for 構⽂を使って，まとめて30個表⽰させてみ

今は1つのデータだけを確認しましたが，もっと他のデータはどうなっているのでしょう

上のコードを実際に実⾏して画像を表⽰させてください。

読み込んだデータをグレースケールの濃淡画像にしています。

[3⾏⽬]

■練習26

「 datasets 」の中に⽤意されているデータを読み込みます。

[2⾏⽬]

では，「 plt 」という略語で使うことにしています。

[1⾏⽬]

このコードは，次のようになっています。

▯▯▯▯return numImage

plt.imshow(digits.images[0], cmap="Greys")▯▯▯▯clf = sklearn.svm.SVC(gamma = 0.001)▯▯▯▯numImage = numImage.flatten()digits = sklearn.datasets.load_digits()▯▯▯▯numImage = numpy.floor(16 -16 *(numImage / 256))▯▯▯▯numImage = numpy.asarray(grayImage, dtype = float)▯▯▯▯grayImage = grayImage.resize((8, 8), PIL.Image.ANTIALIAS)▯▯▯▯grayImage = PIL.Image.open(filename).convert("L")

def imageToData(filename):

import numpy

import PIL.Image

import sklearn.svm

ちょっと⻑いですが，がんばって⼊⼒しましょう。

import matplotlib.pyplot as plt

像で表⽰させ体と思います。そのためには，モジュール「 matplotlib 」を使います。

[4⾏⽬]で数値データとして表⽰していますが，正直なところ分かりづらいです。そこで，画

■練習25

[5⾏⽬]

明るい⽩で，16が1番暗い⿊です。

モジュール「 sklearn 」の中の関数「 datasets 」を読み込みます。

[1⾏⽬]「⼿書きの数字を認識するプログラム」を作成します。

表⽰した数字が何であるかをタイトルとして表⽰します。

[4⾏⽬]

3.

表⽰の際に枠線を⾮表⽰にします。

[3⾏⽬]

print("何の数字か＝", digits.target[0])このコードは，次のようになっています。

3x10に順番に表⽰させます。

[2⾏⽬]

print("画像のデータ＝", digits.images[0])- 1111学習指導案_プログラミング教材 11 -4.

「 predictDigits 」という関数を定義している部分についてです。

機械学習をします。

4. 選択した写真に間違いがなければ，右上の「 アップロード 」をタップします。

3. 画⾯にある⾚丸部分(Google Drive)をタップします。

部分をタップします。

2. 撮った写真をGoogle Driveへ保存するために，写真を開いて，画⾯左上にある⾚丸ます。）

いになるように拡⼤して，パシャリと写真で撮ります。（前の教卓の上に紙はあり

1. 紙に太い字で，０から９の中から１つ書きます。それをタブレットで，画⾯いっぱ

次に，プログラムに判定させたい「⼿書きの数字」を準備します。

まずは，上のコードを⼊⼒してください。

「⼿書きの数字を認識するプログラム」を作成して，実際に判定してみましょう。

[16⾏⽬] 判定結果を表⽰します。

[15⾏⽬] 学習したデータをもとに判定をします。

[13〜14⾏⽬][12⾏⽬] 学習⽤のデータを読み込みます。

次に，[11〜16⾏⽬]

5. Colabノートの左端にあるフォルダのアイコン（ファイルと表⽰される）をクリッ

7. 途中で「このノートブックにGoogleドライブのファイルへのアクセスを許可しま

6. 表⽰されたら，⾚丸部分のgoogle Driveをクリックします（ドライブをマウントし「drive」(⾚丸内)が表⽰されればOKです。

すか?」と聞かれるので，「Googleドライブに接続」をクリックします。次の写真のように

ます）。

クします。

- 1111学習指導案_プログラミング教材 12 -9. 下の写真のようにsample_dataの下に「IMG_0310.JPG」があれば完了です。

ップします。

す。プログラムに認識させたい画像（下の写真では「IMG_0310.JPG」）を⽮印の場所へドロ

8. 「drive」の左側の▼をクリック，続けて「MyDrive」の左側の▼をクリックしま

次に，プログラムに判定させる準備をします。
な。

Colab の有料サービス - 契約解除はこちら

さあ，準備は整いました!プログラムを実⾏させてください。ちゃんと判定できるか