見出し画像

【高校情報1】プログラムの基本/Pythonプログラミング基本編とプログラム設計/教員研修用教材 学習13


はじめに

情報1教員研修用教材の13章に完全準拠した形で解説しました。
Pythonプログラミングの基本編とフローチャートを用いた設計がメインとなります。

第3章 コンピュータとプログラミング
学習13 プログラムの基本(Python)

https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm

別動画でアップしているPython超入門講座は一通り理解している前提で進めています。

基本的には、教員研修用教材に完全に準拠した形で解説していますが、
以下は一部変更しています。(P117)

画像1

上記、0始まりはいいのですが、対応するPythonプログラムは1始まりとなっていて、

画像3

画像2

1始まり・・う~ん、置換えていないような・・・

後の問題で、変数i の値を回数として表示する演習があるから、
問題を作る中で、プログラムの初期値を変更してフローを変えなかったのカモと想像しています。(誤植と思われる)

演習問題とつじつまあわせるために、1始まりとして動画でフロー修正しています。

◆◆動画解説◆◆

◆◆文字おこし◆◆


今日は、Pythonプログラミングについて今までの復習をしながら、プログラム設計もしていこう。
Python超入門講座の内容は理解していることが前提で進めるから、Pythonの基礎を身につけてない人は、概要欄にリンクを貼っているPython超入門講座の内容を理解してみてね。

コンピュータとプログラミング 基本的プログラム

画像4


まず、アルゴリズムとプログラミングの関係について話すね。
問題を解決するための方法や手順をアルゴリズムといい,
アルゴリズムをコンピュータが実行できる形式であらわしたものをプログラムという。

アルゴリズムは、以前のマイクロビットのプログラミングの時に説明した、流れ図(フローチャート)などを用いて図式化するとわかりやすよ。
アルゴリズムはプログラミング言語を用いてプログラムにすることで,コンピュータに実行させることができるんだ。

画像5

どんなアルゴリズムでも,処理の流れは,順次,分岐,反復の3つの構造の組み合わせで構成されている。このような処理の流れを制御構造という。

具体的にみていこう。

・順次は 1 つ1 つの処理を順番に行うこと
流れ図で表すと、上から下へ記述された順に処理を実行する。
この図では、処理1 を実行した後に処理2 を実行する。

・分岐は ある条件に応じて異なる処理を実行すること
流れ図で表すと、条件により処理を選択する。条件が真のときは処理1 を実行し,偽のときは処理2 を実行する。

・反復は、ある条件が満たされている間はその処理を繰り返し実行する
流れ図で表すと、条件が真の間,処理を繰り返し実行し,偽になるとループ終端の下にある
処理を実行する。


順次、分岐、反復を組み合わせて、歩行の流れ図を作っていこう

画像6

処理のはじめの記号を記述して、
ループ条件は 目的地に着くまで繰り返す。
次の処理は、歩く 歩いていると疲れるから
疲れたら休憩する、疲れていなければ休憩をスキップする。
目的地についたら、ループを抜けて、処理を終了する。


 「ペットボトルのふたを開ける」という動作を ①順次 ②分岐 ③反復 の3つの構造を使ってアルゴリズムとして表現しましょう。また,表現したアルゴリズムで流れ図を使って図式化しよう。

まず、キャップは反時計回りに回す。
そして空くまで繰り返す

これを流れ図で表してみよう。

まず、反復処理はキャップを反時計周りに回すことを繰り返す。
そして分岐条件でキャップが開いていない場合は回すのを繰り返す。
キャップが開いた場合はループの処理を抜ける。

流れ図だと日本語の文書記述より分かりやすいね

アルゴリズムを表現する方法はいろいろある。
今度は給湯ポットの処理を状態遷移図と状態遷移表で表していこう。

画像7

給湯ポットにはロック解除ボタンと給湯ボタンがあるよね。
状態としては
ロック状態、ロック解除状態、給湯状態がある。
ロック解除状態から再度ロック状態にするには、ロック解除ボタンをもう一度押すか、ロック解除から1分後に自動でロック状態になるものとする。

はじめの状態を、ロック状態として考えてみよう。
まず、ロック解除ボタンを押すと、ロック解除状態となる。

給湯ボタンを押すと 給湯状態となる。
給湯ボタンから手を離すとロック解除状態となる。
そして、1分経過するか ロック解除ボタンを押すとロック状態となる。

これを、状態遷移表でも表していこう

まず、ロック解除ボタンはロック状態だったら、ロック解除となり、ロック解除状態だったらロックとなる。給湯状態からの遷移はない

1分経過すると、ロック解除状態だったらロックとなる、他の状態からの遷移はない

給湯ボタンを押すと、ロック解除状態なら給湯状態となる。既に給湯状態なら給湯を継続する。ロック状態だったら、給湯ボタンを押しても何も起こらない

給湯ボタンから手を離すと 給湯中なら給湯停止となる。
他の状態からの遷移は無い。

――
じゃあ制御構造についてPythonのプログラムで表していこう。

まずは順次処理から
1:“ おはよう” と画面に表示
2:“ こんにちは” と画面に表示
3:“ おやすみ” と画面に表示

というのを流れ図で表すと

画像8

こうなる。
この形は画面に表示するという記号なんだ。

Pythonでは、今まで何度も使ってきたprint関数を使う

print("おはよう")  # 「おはよう」と画面表示する
print("こんにちは")  # 「こんにちは」と画面表示する
print("おやすみ")  # 「おやすみ」と画面表示する


ここで問題。
,「こんにちは」と「おやすみ」の間に「こんばんは」と表示されるようにするにはどうしたらいいかな?

簡単だね、print こんにちはのあとに print こんばんはと入れる。

正解

じゃあ、今度は分岐の例を見ていこう


点数をあらわす変数x が60 点以上ならば,「合格」を表示し,そうでなければ「不合格」を表示するプログラムを作成していこう。

日本語で記述すると
1:x =80 とする。
2:もし x >= 60 ならば「合格」とする。
3:それ以外の場合は「不合格」と表示する。

となる。

流れ図で確認していこう

画像9

まず 80を変数xに代入する。

そして、条件分岐のひし形に xが60以上ならばの条件文を記述し、Yesなら合格を表示する
そして、Noの場合は不合格を表示し、処理を終了する。

じゃあ、Pythonでプログラミングしていこう。

print("おはよう")    # 「おはよう」と画面表示する
print("こんにちは")  # 「こんにちは」と画面表示する
print("こんばんは")
print("おやすみ")    # 「おやすみ」と画面表示する


x = 80 でxに80を代入する。
そしてxが60以上の時の処理として if x >= 60: と記述する。
その場合の処理は、インデントして print 関数の中にダブルクォーテーションで囲んで合格と記述する。
それ以外は不合格だから else:を記述し、次の行をインデントして print関数の中に、不合格と記述する。

実行してみよう。xが80だから合格と表示されたね

では、ここで問題。
今説明したプログラムコードについて、,x の値だけを変更して「不合格」と表示されるようにプログラムを変更しよう。

これも、簡単だね不合格は60未満だから、xを40に変更すれば不合格になるね


じゃあ次の問題、
『30 点未満ならば「再試験」そうでなければ「合格」と表示される』プログラムを作成しよう。

xが30未満の判定は
if x < 30: と記述する
その場合の処理は、インデントして print(“再試験”)と記述する。
そうでなければは、else:を記述して
次の行をインデントして print(“合格”)と記述する。

xは29として 実行してみよう。
ちゃんと再試験と表示されたね。

xを30として実行してみよう
ちゃんと合格と表示されたね。

つぎは、反復の例を見ていこう
変数x に対して 10 を5 回加算をしながらその都度 x の値を表示するプログラムを作成していこう。
まずは日本語記述

画像10

じゃあ、流れ図を描いていこう

まずは、xに0を代入する
そして、 ループの記号を描き、iに1,2,3,4,5と順番に代入する旨を記述する
ループの中は xに10プラスした値を再度xに代入する処理を記述して
xを表示する処理を記述する。
そしてiが5までいったら処理を終了する。

これをpythonのプログラムで表していこう

# 変数x に対して 10 を5 回加算をしながらその都度 x の値を表示するプログラム
x = 0
print("x = ",  x)
# 1 から6 未満の間1 ずつカウントを増やしながら繰り返す
for i in range(1, 6, 1): 
   x = x + 10
   print("x = ", x)

まずは x = 0 でxに0を代入する。
xの初期値をx=の形で表示させるために
print (“x = ”, x)と記述する

次はループの処理を記述しよう、5回繰り返したいから
for 文の rangeの中に(1,6,1)と記述するこれは1から6未満の数を1ずつ増やしながらiに代入して繰り返すという意味。

for文の次の行に
x = x +10 と xにプラス10した値をxに代入する処理を記載する
そして
print (“x = ”, x)と xの値を表示する処理を記述して実行してみよう。

ちゃんと0から50まで10ずつ増やしながら表示されたね。

じゃあ今のプログラムについて
『x の値を表示すると同時に繰り返している回数をその都度表示する』にはどうしたらいいかな。

# 変数x に対して 10 を5 回加算をしながらその都度 x の値を表示するプログラム
x = 0
print("x = ", x)
# 1 から6 未満の間1 ずつカウントを増やしながら繰り返す
for i in range(1, 6, 1): 
   x = x + 10
   print("x = ", x)
   print("繰り返している回数", i)

これは変数iに今の実行回数が代入されているから iの値を表示すればいいね。

単純に数字だけだと何の数字か分からないから
print文の中に”繰り返している回数”と記述して、カンマで区切って 変数 xを記述する)

実行してみよう
xの値と一緒に繰り返している回数が表示されたね。

繰り返す回数だけを変更して『x の値が100 になる』プログラムを作成するにはどうしたらいいかな

# 変数x に対して 10 を5 回加算をしながらその都度 x の値を表示するプログラム
x = 0
print("x = ", x)
# 1 から6 未満の間1 ずつカウントを増やしながら繰り返す
for i in range(1, 11, 1): 
   x = x + 10
   print("x = ", x)

ループの中を10回繰り返せばいいから、11未満ということで、for文の6だった値を11に変えればいいかな。

じゃあ実行してみよう。
ちゃんと最後にx=100と表示されたね

じゃあ最後に x= x +10 の部分だけ変更して1+2+3+4+5の値を表示するにはどうしたらいいかな。

# 変数x に対して 10 を5 回加算をしながらその都度 x の値を表示するプログラム
x = 0
print("x = ", x)
# 1 から6 未満の間1 ずつカウントを増やしながら繰り返す
for i in range(1, 6, 1): 
   x = x + i
   print("x = ", x)

変数 iに入っている値といっちするから x = x + i と変更すればいいね

じゃあ実行してみよう。正しくループ回数のiの合算値が表示されたね。


今度は、分岐と反復を組み合わせたパターンをやっていこう。

変数x に対して 10 を 5回加算をするとき、『繰り返している回数が奇数回の場合だけ』 x の値を表示する。
まずは日本語で処理を記述しよう。

画像11


これは 回数を2で割った余りが1ならばということで、つまり奇数ならばという意味になる。

フロー図はxに10をプラスするところまではさっきと同じ。
次に i%2 ==1 の値がTrueつまり奇数ならxの値を表示し、それ以外つまり偶数なら表示処理をスキップする

x = 0
print("x = ", x)
for i in range(1, 6, 1):
   x = x + 10
   if i % 2 == 1:  # i を2 で割ったときの余りが1 のとき つまり奇数の時
       print("x = ", x)

Pythonであらわすと x = x +10 の後に if i%2 ==1:と記載し
次の行をインデントして xの値を表示するprint文を記述する

実行してみよう。
ちゃんと奇数回の時のxの値が表示されたね。

じゃあ問題、奇数回ではなく偶数回の時だけ値を表示するにはどうしたらいい?

x = 0
print("x = ", x)
for i in range(1, 6, 1):
   x = x + 10
   if i % 2 == 0:  # i を2 で割ったときの余りが0 のとき つまり偶数の時
       print("x = ", x)

簡単 2で割ったあまりを1の時を真(しん)とするのではなく、
0の時を真とするように変更すればいいね。

じゃあ、実行してみよう
ちゃんと偶数回の時にxの値が表示されたね。

今回は今までの復習がメインだったけど、次回は応用的なプログラミングをしていこう



この記事が気に入ったらサポートをしてみませんか?