対象は中学や高校、大学などで取り敢えず一旦体験的に学ぶだけで本気じゃないよという人や本を参照したり授業で聞いたりしてもついていけないよといった人たちです。

そのような方々に向けた非常に砕いた解説です。

プログラマになるわけではない

学校でプログラミングを学ぶということは、プログラマを養成するわけではありません。どのような考え方をしているのか、どのような仕組みになっているのかを知り、日常生活に一部を活かせる かもしれない 程度になることが目標です。学校で学ぶ際にはもっと深い目標があると思いますが、まずは プログラミングした結果できるソフトウェアってこんなふうになっているんだ、すごいな!って思えたらまずは十分です。

音楽の授業でピアノやリコーダーを体験しただけでプロの演奏者になるわけではありません。こんなものもあるんだと思えることが重要です。

あれ動かないぞ、動かすためにはどうする?

プログラミングでは何かを作るわけですが、常に何かしらちゃんと動くわけではありません。基本的には「あれ動かないぞ」となりますし、そういった場面によく遭遇します。その状態からどのように試行錯誤して動くようにするかというところを一人でできるようになることは一つの目標です。

なんで動かないのか、どのようにしたらここから動くようになるのか。この試行錯誤が大切ですので、ただ単に写すだけでは何もなりません。試行錯誤を積み重ねていきましょう。

エディタを開く

Pictogrammingを使います。本当はこのような使い方ではなく、もっと楽しい使い方があります。それは ここ で見られますのでそちらでぜひ楽しく使ってください。

ピクトグラミング(https://pictogramming.org)にアクセスします。

そこから Picthonを選択してください。

print

下のほうにブロック群があります。そこから

ここに左上に表示する文字

print("output string")

をクリックしてみましょう。すると上のエリアに

print(“output string”)

と表示されます。その後 実行ボタン を押下します。すると左側に表示されている人型が動いて

output string

と表示されます。

右側の方に書いてある

print(“output string”)

の output string を ほげ〜 とか ほへぃ とか何か入力して再度実行してみましょう。

画面の見方

左側に表示されているものをピクトグラム表示領域と呼び、そこに描いてある人型をここではピクさんと呼びます。今回はピクさんと遊ぶことはあまりありませんが、ぜひ仲良くなりましょう。

右側の文字を入力できるエリアをプログラムコード入力領域と呼びます。

ここではプログラムコード入力領域に命令を書いていきます。

なおここでは、プログラムコード入力領域に書いた内容をピクさんが解釈して、書かれた内容どおりに動きます。

printの解説

とした時、この空白の部分に入力された内容が実行時に出力されます。これがprintにおける命令の様式になります。

ですが、この命令文をカッコも含めて全部覚えるのは大変かと思います。なので、下にあるブロック群を見て使いたいものをいつでも引っ張り出して改造できることを覚えるのが第1ステップとなります。

printの失敗

print(ほげぇ)

と入力したとします。

“”(ダブルクォーテーション) が足りていないことが分かると思いますが、これを実行するとどうなるでしょうか?ぜひ実際にPicthonを使って試してみてください。

モヤモヤの吹き出しと一緒にエラー文がピクさんの近くに現れたかと思います。今回の場合は “” が抜けていることが原因なので、ほげぇ の両サイドに ” を一つずつ書き足せば解決します。

“” が無くても実行できることも?

print(5)と半角数字だけを()の中に入力して実行すると、エラー文は出ずに実行できてしまいます。数字が10でも20でも、同じように実行できます。

print(“5”)と書いても、もちろん実行できます。

では、print(5)とprint(“5”)の違いとは何なのでしょうか?

数値と文字の違い

「5」を見たときに、人間であれば「数字だな~」「ピクさんが5人いるんだな~」「直線と曲線の組み合わさったものだな~」と色々な解釈をします。

ですがコンピュータの場合は、量的な意味と文字とで全く別のものとして解釈します

print(5)
print("5")

実行結果だけを見ると2つのprintは同じ出力をしているように見えますが、コンピュータからすると全く違うものとして出力しています。この違いを理解するため、

print(5+5)
print("5+5")

この二つのprintを実行してみるとどのような結果になるでしょうか?

10 と 5+5 という結果が出力されたかと思います。

量としての意味を持つ(数値)のか持たない(文字)のかをコンピュータが別のものとして解釈していることが理由です。

print(5+5)

では、2つの5という数値(量)を足し合わせる(+)という意味としてコンピュータは解釈しました。これをprintで出力せよと命ぜられたので 10 という数値として出力されました。

print(“5+5”)

では、5という形をした文字(記号)が2つとその間に+という記号があるなとコンピュータは解釈しました。これをprintで出力せよと命ぜられたので 5+5 という文字として出力されました。

“” があるか無いか、というだけでコンピュータにとっては数値なのか文字なのか、計算して出力するのかそのまま書き出すのか、という大きな違いになるということが分かっていただけたかと思います。

プログラミングで計算してみよう

ここまで少し難しいことも説明してきましたが、思ったより気楽にPicthonを使って計算ができる!ということが分かったかと思います。

三角形の面積を求めてみよう

底辺5、高さ6の三角形の面積をプログラミングで計算してみましょう。

三角形の面積を求める式は 底辺 × 高さ ÷ 2 でしたね。これをプログラミングで求めるにはどのように書けばよいでしょうか?

print(5*6/2)

*(アスタリスク)は掛け算を、/(スラッシュ)は割り算をプログラミングで行う時に使用する記号です。ほとんどのプログラミング言語で四則演算に活用する記号は共通のものを扱うので、覚えておくと便利です。

*や/ってどうやって入力するの?と思った方はぜひ動画の14:30あたりからご覧ください。

さて、実行するとどのような結果になったでしょうか?

15.0

と表示されたかと思います。

もしエラー文が出てしまったら、プログラムをよく観察してみましょう。”が一つだけ残っていたり、カッコがちゃんと閉じていなかったり、もしかしたら数字やprintが全角で入力されているかもしれません。

問題なく計算できたよ!という人は底辺と高さの値を色々変えて計算してみましょう。

変数を使ってみよう

三角形の面積を求める式というのは当然、毎回同じものを扱いますよね。でも計算を行うためには毎回数値と式を全部書かなきゃいけない、となると少し面倒くさい……。

じゃあ式を簡単に呼び出せるようあらかじめプログラムしておこう、という時に登場するのが変数です。

変数ってなんだ?と疑問符が浮かんだかと思いますが、その説明の前にとりあえずさらっと触れてみましょう。

先ほど使用した、三角形の面積を求める式 底辺 × 高さ ÷ 2 の底辺と高さを変数に置き換えてみます。

b = 5
h = 6
print(b*h/2)

これをPicthonで実行すると、

15.0

と出てくると思います。print(5*6/2)で計算した時と同じ結果になりましたね。

ここで扱っている変数はbとhの二つです。

bは底辺(baseのb)hは高さ(hightのh)を意味しています。というより、今ここでそういう意味で私が宣言しました。

これは変数名と言って、自由な命名をすることができます。今回はbとhという変数名にしましたが、teihen、takasaというそのままローマ字にした変数名でも問題なく動きます。ただし、日本語でそのまま変数名を付けることはできないのでそこだけ注意してください。

では改めて変数について説明します。

プログラミングにおける変数というのは、箱や入れ物のようなイメージで説明されることの多い、値や文字の保管場所のようなものです。

ここに先ほど命名したbという変数とhという変数があります。

bには5を、hには6という数字をそれぞれの変数に格納しました。

そしてprintを処理する時に、2つの変数それぞれから格納された数値を取り出してから実行しました。それが、

b = 5
h = 6
print(b*h/2)

この3行のプログラムの流れになります。

ではb = 5 の次の行に b = 7 と追加してみたら結果はどうなるでしょうか?おそらく21.0という結果が返ってきたと思います。

これは変数bに格納された数値が5から7に上書きされたことを意味します。

これが変数の特徴です。変わる数、という熟語ですからまさしく今の状況を示していますね。

b = 7

と書いた場合、bという変数に7という数字を代入するという意味になります。= が代入?等しいという意味じゃなくて?と思った方もいるかと思います。

多くのプログラミング言語で、 = は左右が等しいという意味ではなく、左に右を代入するという意味として扱います。

変数の特徴について説明したところでもう一つ追加してみましょう。

b = 7
h = 6
s = b*h/2
print(s)

sという変数に三角形の面積を求める式をまとめて代入してみました。これで、この変数sをprintするだけで計算結果を表示することができるようになりました。

こうしておけば、毎回式を全部書かずとも変数sを呼び出すだけで三角形の面積を求めることができますね。

代入とTrue or False

変数の説明において、= は代入を意味すると説明しました。では右辺と左辺が同じ値である、というプログラムを書くことはできないのでしょうか?

実は、= を二つ書けば左辺と右辺が等しいかどうか比較することができるんです。

print(7==7)
print(7==8)

試しにこの二つのprintを実行してみましょう。

True
False

と出てきたかと思います。

まずprint(7==7)ですが、これは左辺の7は右辺の7と等しい、という意味になります。これは誰がどう見ても正しいですよね。

そしてprint(7==8)でも、左辺の7は右辺の8と等しい、という意味になります。

そんなわけないじゃん!と思った方、正解です。実行した結果を見てください。ちゃんとFalseと返ってきてますよね。

この左右を比較するプログラムの特徴は、左と右が同じです!と言い切るように書くことにあります。そうして言い切って書かれたプログラムをコンピュータにTrue(真)かFalse(偽)の2択で判断してもらうのです。

if

True or Falseを使ったプログラムを実際に書いてみましょう。

s = 10
print(s)

if s == 10 :
    print("sは10と等しい")

ifとは、もし~ならばという意味で使われる言葉ですが、プログラミングではTrue or Falseを判定する時に使います。

先ほどのプログラムを実行すると、まず2行目のprint(s)が表示されてから sは10と等しい と表示されたかと思います。では、1行目でsに代入する値を10以外の数字に変えたらどうなるでしょうか?ぜひ試してみてください。

ifで使える左右を比較する命令(比較演算子)は == だけではありません。基本的なものを一通り見てみましょう。

10 == 10 ……左は右と等しい
10 > 10 ……左は右より大きい
10 < 10 ……左は右より小さい
10 >= 10 ……左は右以上
10 <= 10 ……左は右以下
10 != 10 ……左は右以外

条件式の部分に上に示した 10 == 10 から 10 != 10 のような命令を書いていきます。ifの結果がTrueだった場合、ifの中を実行し、Falseだった場合は中を飛ばします。

s = 5
print(s)

if s > 10 :
    print("sは10より大きい")

print("ここでおしまい")

Python言語特有のルールなのですが、ifの中にプログラムを書きたい場合、改行してからスペースを4文字分あける必要があります。

Picthonでプログラムしている人は、:(コロン)の後に改行すると自動的に4マス空くと思うので、そのままifの中に記述してください。

せっかくifの中を書いてもらいましたが、先ほどのプログラムを実行すると書いた中身が飛ばされてしまったかと思います。それはそうですよね。5は10より大きい、と言い切ってプログラムを書きましたがそれはFalseなんですから。

ifを書いた次以降の行でスペースを4文字分あけずに左詰めにして書かれたプログラムは、ifの外という扱いになるので、先ほどのプログラムの結果は

5
ここでおしまい

となりました。

ifがFalseだった場合にのみ実行して欲しい命令があれば以下のように書きます。

s = 5
print(s)

if s > 10 :
    print("sは10より大きい")
else :
    print("sは10より小さい")

print("ここでおしまい")

elseとはそれ以外という意味の言葉です。ifにおいてはTrue以外、つまりFalseだった場合に実行して欲しいプログラムを記述する時に登場します。

これを実行すると、sに代入した5は10より大きくはないので、ifの中を飛ばしてelseの中に記述したprintが表示されました。

while

プログラムは同じことを繰り返したい時によく使われます。身近な例だと目覚ましタイマーのスヌーズなどが分かりやすいでしょうか。

繰り返し処理をやる前に、まず代入について少しおさらいしてみましょう。

i = 1
print(i)

i = i+1
print(i)

これを実行すると

1
2

と表示されますね。

1行目でiに1を代入した、ということはお分かりかと思います。

4行目の i = i+1 では、1を持っているiに1を足して代入する、という処理をしています。つまり、1+1の答えをiに代入したということですね。なので2という結果になりました。

では、もう一つ追加してみるとどんな結果になるでしょう?

i = 1
print(i)

i = i+1
print(i)

i = i+1
print(i)

もうお分かりかと思いますが、結果は

1
2
3

というように表示されます。

i = i+1

を増やせば増やすほどiに代入される値が1ずつ増えていきますが、毎回これを記述するのは大変ですよね。

そこでwhileの登場です。

i = 1

while i <= 10 :
    print(i)
    i = i+1

whileに続いて記述されている <= はifの説明でも出てきたTrue or Falseを判定する比較演算子です。今回の場合は、iの値が10以下の時はTrue、10よりも大きい時はFalseという意味になります。

whileとは、~の間ずっとという意味の言葉なので、iの値が10以下の間ずっと繰り返すということになります。ちなみにwhileでもifと同様に、whileの中の処理を書くときはスペースを4文字分あけるようにしてください。

では繰り返し処理の流れを見ていきましょう。

i = 1

iに1を代入し

while i <= 10 :

iが10以下かどうかを比較します。iには1が代入されているのでTrueとなりwhileの中を実行します。

print(i)
i = i+1

iをprintし、iに1を足した結果をiに代入します。whileの中の最後の処理が終了したら再びwhileの先頭まで戻ります。

while i <= 10 :

iが10以下かどうかを再び比較します。1回目の処理でiに2が代入されていますが、まだ10以下なのでTrueとなりwhileの中に入ります。

print(i)
i = i+1

iをprintし、iに1を足した結果をiに代入します。この時点でiには3が代入されていますね。そして再びwhileの先頭に戻ります。

このような処理を繰り返し続けると、iの値が11になった段階で10との比較がFalseになるのでwhileの外に抜け出すことができます。

ちなみに、whileの中に書かれたiの値を1ずつ増やす処理がもし無かったら、繰り返し処理を終了することができなくなってしまうので注意してください(無限ループ)。

まとめ

今回はプログラミングにおける基本的な処理である順次・分岐・反復を紹介しました。

プログラムは基本的に上から実行されるよ、というのが順次処理、〇〇だったら実行するよ、そうじゃなかったら処理を飛ばすよ、というのが分岐処理(if)、〇〇の間はずっと実行するよ、というのが反復処理(while)です。

一つ一つの内容は単純なものが多く、意外と簡単だったのではないでしょうか。ですがこれらをいくつも組み合わせて、より複雑な目的を持ったプログラムを書こうとするとなかなか難しいという感覚も見えてきたのではないでしょうか。

また、プログラミングを行う環境を整えるのは結構大変で、その時点で敬遠されてしまう方も多いかと思います。

今回皆さんに使ってもらったPictogrammingでは事前の準備などはほとんど必要なく、ブラウザにアクセスできる環境さえあればいつでもプログラミングを実践できるのでとても便利です。

また、PictogrammingではPython以外にもJavaScriptや、プログラミングの文法を学ばなくとも直感的にブロックをつなぎ合わせるだけでプログラムができるBlock Pictogrammingという環境も用意されているので、学びたい内容に合わせてぜひ活用してみてください。

https://youtu.be/YyBDXaOfWGI