「アルゴリズムとプログラム」

課題5

開発1: ⼊⼒した2個の数で四則演算

Pythonでアルゴリズム二つの数をキーボードから⼊⼒して、その足し算、引き算、掛け算、割り算をするプログラム

def Tasu(x, y):kekka = x + y
return kekka

Colaboratory版

a = 10b = 20c = Tasu(a, b)
print(c)2023版 V1.1
重要:⽇本語⼊⼒はオフにしてください。

課題1:
2個の数をキーボードから⼊⼒して、その足し算、引き算、掛け算、割り算の結果を順番に表示します。

このように表示されたら、キーボードから⼊⼒
次⾒て12

開発1: ⼊⼒した2個の数で四則演算(その1)

a + b

数値

ab

課題1:2個の数をキーボードから⼊⼒して、その 足し算、引き算、掛け算、割り算の結果を順番に表示します。

部品
01

部品
02

部品
03

a- ba* ba/

次⾒て

a=6
b=2print(a + b)
print(a - b)
print(a * b)
print(a / b)
足し算、引き算、掛け算、割り算は課題3でやっています。
課題3ではプログラムの中で数値を設定しいていますが、これを⼊⼒します。

b3

数値ab

部品03
変数Aと変数Bに⼊⼒する⽅
法は、部品カード03を⾒てください。
また課題4も数値の⼊⼒を⾏っています。

4

課題6

打ち込み3: 合格判断

打ち込み3: 合格判断

print("Tokuten?")a = int(input())
if a > 70:
print("Goukaku")
そのまま打ち込む
プログラム

部品04

部品カード04も⾒てください。

次⾒て

5
課題7

開発2: 合格不合格判断

変数aに数を⼊⼒して、もし、70より大きいなら(70は⼊らない)、Goukaku(合格)と表示します。
そうでなければ、Fugougaku(不合格)と表示します。

部品05

print("Tokuten?")

表示する(Tokuten)

a = int(input())

A = (数値⼊⼒)

if a > 70:
print("Goukaku")? A > 70:〇: 表示する(Goukaku)

重要

変数aに数値を⼊⼒して、70より大きければ(70は⼊らない)、Goukaku(合格)と表示する。

Tokuten50
Fugoukku

TPOINT

Pythonのルールでif命令の中⾝の命令は、字下げ(通常は半角の空白4文字)する。
TabキーでもOK

6

開発3: 成績A〜C

変数Aに数を⼊⼒して、もし、70より大きいなら(70は⼊らない)、
Seiseki A(成績A),50より大きいなら(50は⼊らない)、
Seiseki B(成績B),それ以外(50以下だったら)、Seiseki C(成績C),と表示します。

Tokuten100
Goukaku

開発したプログラム
100
Seiseki A
60
Seiseki B

TPOINT

ヒント: 部品05を参考にして作ってみてください。
部品の内容そのままで使えるわけではありません。
課題6のプログラムを元にして作ると簡単です。

if a > 70:----print("Goukaku")

Tab

課題8

開発した
プログラム

この教材で使っているプログラムの図式

部品
06
7

40
Seiseki C

ヒント: 課題7を流⽤して作る。
部品06を参考にして作ってみてください。
8プログラムもだんだん複雑になってきます。プログラムがどのような部品でくみあがっているか分かりやすくするため、今後ヒントで図式を示します。

Range()で1０までを指定する(11未満)

i = [1,2,3…10]
繰り返す

for i in range(11):print(i)課題10

for i in range(11):print(i)print(i)０,1,2,3,・・・,10までの数を表示します。

次⾒て

for i in range(11):10

9

打ち込み5: 0から10までの合計を表示

プログラムの図式

TPOINT「 1から10までの合計」は次のような図式になります。

s=0
for i in range(11):print(i)s=s+iprint(s)s=0s=0i = [1,2,3…10]
繰り返す表示する(i)

そのまま打ち込む
プログラム

部品
07

表示する(i)

そのまま打ち込む
プログラム

部品
07

理解

プログラムと図式

打ち込み4: 0から10までの数を表示

課題9

s=s+i

部品
07

ヒント: 課題9を流⽤して作る。

表示する(s)

1,2,3,・・・,10までの数を表示
して、最後にその合計を表示する。

次⾒て

11

for i in range(11):print(i)s=s+iprint(s)字下げしていることで、for命令の中で、この二つの命令が繰り返される。

12

開発4: 2からx未満までの偶数の合計

課題11xの値を⼊⼒して、2からx未満偶数の合計を求めるプログラムを作成してください。

実⾏例

TPOINT

例: x = 7の場合、 2+4+6x = 12の場合、 2+4+6+8+10

開発した
プログラム

重要! 下記の順番で作って!!
課題10「0から10までの合計」のプログラムを流⽤してして作る。
手順1: 次のスライド
まず、2から10未満の偶数の合計を求めるプログ
ラムを作ります。⼀か所だけ変更します。
手順2: 次の次のスライド
次に、xを⼊⼒して、x未満の合計を求めるプログ
ラムを作ると楽かもしれません。
次⾒て
13s=0
i = [1,2,3…10]
繰り返す

10と⼊⼒すると0,2,4,8と表示して最後に合計の20を表示する

次⾒て

ヒント2: 2から10未満の偶数の合計
部品08

ヒント2: 2から10未満の偶数の合計
ここの違いを考える。

10
0
2
48
20

s=0
i = [2,4,6,8]
繰り返す

部品
03

x = (⼊⼒)

表示する(i)

表示する(i)

s=0

s=0

s=s+i

s=s+i

i = [2,4,6,8]
繰り返す

i = [2,4,6,・・,x未満の偶数] 繰り返す

表示する(s)

表示する(s)1から10の合計

部品
08

2から10未満の偶数の合計

2, 4, 6,・・・となるように部品08を少し変更して使います。
次⾒て

1415

表示する(i)

表示する(i)

s=s+i

s=s+i

表示する(s)

表示する(s)2から10未満の偶数の合計

2から10未満の偶数の合計

16

たくさんの数のの処理

打ち込み6: コインガチャを作る

課題12

次からたくさんの数を処理するプログラムをつくっていきます。
今まで、数を⼊⼒するのに変数をつくっていきました。課題11では、x,s,iの3つの変数を使って合計を計算しました。
ただし、が、たくさんの数を⼊⼒するには、a,b,c,d,e・・・・と多くの変数を使うのは大変です。
こんな時にリスト(配列)使うと便利です。
次からリスト(配列)を学習していきます。

ランダムに、あらかじめ設定しておいたコインの数をランダムに表示するプログラムを作成します。

ランダムな数をつくる
import random
random.randint(開始番号、終了番号)

次⾒て

17
打ち込み6: コインガチャを作る

打ち込み6: コインガチャを作る
打ち込んだプログラム

import randomd = [1, 2, 5, 10, 100]i = random.randint(0, 4)
print("Coin=")print(d[i])そのまま打ち込むプログラム

import randomでrandom.randint()が使えるようにします。

18

Coin=100d = [1, 2, 5, 10, 100]

1

Coin=
5

2

510 100

d[0] d[1] d[2] d[3] d[4]

Coin=
2

i = random.randint(0, 4) ← iに0〜4のランダムな数か⼊る
d[i] ← dのi番目の箱の内容

Coin=100

次⾒てリストはdに番号がついている、さくたんの箱のイメージです。
個々の箱のデータを使⽤する場合は、箱についた番号[0]〜[5]を指定します。

1920

打ち込み7: リストを使った5つの数の合計

課題13

d = [41, 23, 8, 15, 33]
s=0for i in range(5):print(d[i])s = s + d[i]print("Goukei")
print(s)d = [41, 23, 8, 15, 33]

41

23

815

33

d[0] d[1] d[2] d[3] d[4]41+ 23+8+15+33 合計 120
いきなりプログラムが難しくなりました。あらかじめリストdに⼊れておいた5個の数の合計を計算します。
次⾒てそのまま打ち込むプログラム

s= 0i = [0,1,2,3,4]
繰り返す

打ち込んだ
プログラム

41
23
81533
Goukei120

D[]の中の数をひとつづつ表示して、最後にその合計を表示する。

次⾒て21
課題14

d = [41, 23, 8, 15, 33]
s=0

22

課題15〜20の説明
並べかえ

for i in range(5):表示する(d[i])s = s + d[i]print(d[i])s = s + d[i]課題20では基本的なアルゴリズムである並び替え(ソート)のプログラムを作ります。いきなり作るのは難しいので、課題15〜19をやっていきます。
課題15: リストの中から数を探す
課題16: リストの中の⼀番⼩さい数を⾒つける
課題17: ⼀番⼩さい数を配列の先頭に⼊れ替える
課題18: 二重繰り返しで九九に挑戦
課題19: 複雑な二重繰り返しに挑戦

print("Goukei")
print(s)表示する(s)

リストdに5個の数を⼊れて、変数Sに加えていって合計を計
算

部品
07

部品
09

ヒント: 課題10を流⽤して作る。

打ち込み7: リストを使った5つの数の合計
d = [41, 23, 8, 15, 33]

打ち込み7: リストを使った5つの数の合計

部品
0923

次⾒て24非常に重要

開発5: リストの中から数を探す

課題15

TPOINT

課題15〜20までは、5個の箱のリストを順番に処理するめ、次のような図式が基本になります。
何らかの処理何らかの処理何らかの処理何らかの処理

1001

1030

1041

i = [0,1,2,3,4]
繰り返す

for i in range(5):

1015

1033

1052

1016

1036

1055

1027

1040

何らかの処理何らかの処理何らかの処理何らかの処理上のプログラムに何らかの処理を追加していくこ
25とになります。

実⾏例
開発した
プログラム
[41, 23, 8, 15, 33]
82[41, 23, 8, 15, 33]33
4[41, 23, 8, 15, 33]17999

多くの数の中から、ある数があるか⾒つけるプログラムです。
例えば、合格発表の中に「1033」があるかどうか判断します。
このようなプログラムを検索といいます。

検索というこんな動作をするプログラムを作ります

d = [41, 23, 8, 15, 33]
print(d)あらかじめdに5つの数をいれておき、表示します。

変数aに探す数を⼊⼒します。
33は、d[4]に⼊っているで、4を表示
17はdに無いので、99９を表示

次⾒て

27

次⾒て

26

開発5: リストの中から数を探す
以下のようにして数を探します。
d = [41, 23, 8, 15, 33]

41

23

815

33

d[0] d[1] d[2] d[3] d[4]33a
変数aに探す数を⼊⼒します。

xi を[0,1,2,3,4]で繰り返しながら、 aとd[i]がaとd[i]を比較しま 等しい場合す。
次⾒てxにiを⼊れます。
⾒つからない場合に、初めに999を⼊れています。

28

重要: if での条件指定リストの中から数を探す

開発5: リストの中から数を探す
d[]に5個の数をいれとく

部品
04

部品
03

表示する(d)a = (⼊⼒)
x = 999

if x == y :x == yx != yx>yx<yx >= yx <= y

部品 課題14で示した
07 基本的な形です。

i = [0,1,2,3,4]
繰り返す

x と y が等しい
x と y が等しくない
x は y よりも大きいx は y よりも⼩さい
x は y と等しいか大きいx は y と等しいか⼩さい

⾒つからなかった時のためにxにあらかじめ999を⼊れときます。

変数aとd[i]の内容が同じだったら、その時のiの値を変数xに⼊れる

この部分を考えて、プログラムを完成されてください。

部品
04

表示する(x)

部品
09

29
課題16

開発6: リストの中の⼀番⼩さい数を⾒つける

開発した
プログラム
[41, 23, 8, 15, 33]
8[41, 23, 78, 15, 33]
15

d = [41, 23, 8, 15, 33]
print(d)あらかじめdに5つの数をいれておき、表示します。
⼀番⼩さい数をxに⼊れておいて表示しています。

30
開発6: リストの中の⼀番⼩さい数を⾒つける
以下のようにして数を探します。
d = [41, 23, 8, 15, 33]

4123

x
31

15

33

d[0] d[1] d[2] d[3] d[4]プログラムを変更して
d = [41, 23, 78, 15, 33]にしているので、⼀番⼩さい15を表示しています。

次⾒て

8

変数xに⼀番⼩さい数を⼊れます

i を[0,1,2,3,4]で繰り返しながら、xとd[i]を比較します。
d[i]がxより⼩さい場合Xの内容をd[i]に変えます。
次⾒て32開発6: リストの中の⼀番⼩さい数を⾒つける
d[]に5個の数をいれとく表示する(d)課題17

開発7: ⼀番⼩さい数を配列の先頭に⼊れ替える

ポイント:
変数xにd[0]の値を⼊れています。

x = d[0]i = [0,1,2,3,4]
繰り返す
変数xとd[i]の内容を比較して、d[i]が⼩さければ、その時の値を変数xに⼊れる

この部分を考えて、プログラムを完成されてください。

部品
04

d = [41, 23, 8, 15, 33]
数がバラバラに⼊っている部品
09

d = [8, 41, 23, 15, 33]
配列の先頭に⼀番⼩さい数が移動しているが、他の数はすべて残っている

xを表示

次⾒て

33
課題17

開発7: ⼀番⼩さい数を配列の先頭に⼊れ替える

開発した
プログラム
[23, 41, 8, 15, 33][8, 41, 23, 15, 33][41, 23, 58, 15, 33][15, 41, 58, 23, 33]

d = [41, 23, 8, 15, 33]
print(d)あらかじめdに5つの数をいれておき、表示します。
処理後にprint(d)で表示。⼀番⼩さい8がd[0]に⼊っているが、すべての数は残っている。
プログラムを変更して
d = [41, 23, 58, 15, 33]にしているので、⼀番⼩さい15をd[0]に⼊れている

次⾒て

35

34

開発17: ⼀番⼩さい数を配列の先頭に⼊れ替える
以下のようにして数を⼊れ替えています。
d = [41, 23, 8, 15, 33]

41

23

81533

d[0] d[1] d[2] d[3] d[4]i を[0,1,2,3,4]で繰り返しながら、d[0]とd[i]を比較します。
d[i]がd[0]より⼩さい場合d[i]とd[0]の内容を⼊れ替える。
次⾒て36

開発7: ⼀番⼩さい数を配列の先頭に⼊れ替える

課題18

二重繰り返しを使って、九九(1から５の段まで)を表示する
プログラムを作ってみましょう

d[]に5個の数をいれとく表示する(d)この部分を考えて、プログラムを完成されてください。

i = [0,1,2,3,4]
繰り返す
変数d[0]とd[i]の内容を比較して、D[i]が⼩さけ
れば、d[0]とd[i]を⼊れ替える

部品
04

部品
09

部品
10

ポイント:
二つの変数の内容を⼊れ替える時に注意が必要です。部品10を参照してください。

表示する(d)37

打ち込み8:二重繰り返しで九九に挑戦
d = [1,2,3,4,5]表示する(d)d = [1, 2, 3, 4, 5]
print(d)i = [0,1,2,3,4]
繰り返す

for i in range(5):j = [0,1,2,3,4]繰り返す表示する(d[i] * d[j])

部品
11

部品
11

打ち込み8:二重繰り返しで九九に挑戦

d = [1, 2, 3, 4, 5]
print(d)[1, 2, 3, 4, 5]12345～510152025

課題19

1 x 1, 1 x 2, 1 x 3, 1 x 4, 1 x 5
2 x 1, 2 x 2, 2 x 3, 2 x 4, 2 x 5
3 x 1, 3 x 2, 3 x 3, 3 x 4, 3 x 5
4 x 1, 4 x 2, 4x 3, 4 x 4, 4 x 5
5 x 1, 5 x 2, 5 x 3, 5 x 5, 3 x 5の内容を表示
次⾒て

打ち込み7:複雑な二重繰り返しに挑戦

二重繰り返しですが、内側の繰り返しの始まりの数を変えます。
予めリストd[0]からd[4]まで数を⼊れておきます。
・初めにd[0]からD[4]までの数を表示
・次にd[1]からd[4]までの数を表示
・・・・
・最期にd[4]の数を表示する。

for j in range(5):print(d[i] * d[j])そのまま打ち込む
プログラム(⾏は空けない)

39

38

次⾒て

[41, 23, 8, 15, 33]41
23
i = 0の時
8j = [0,1,2,3,4]で15繰り返し
33
23
i = 1の時
8j = [1,2,3,4]で15繰り返し
33i = 2の時
8j = [2,3,4]で15繰り返し
33
i = 3の時
15
j = [3,4]で繰り返し
33
i = 4の時
33

40

打ち込み:複雑な二重繰り返しに挑戦
d[]に5個の数をいれとく表示する(d)i = [0,1,2,3,4]繰り返す
j = [i,・・,4]
繰り返す

開発8:最後のチャレンジ: 数の並び替え

課題20

予めリストd[1]からd[4]まで数を⼊れておきます。この中の数を⼩さい順番に並び替えてください。

d = [41, 23, 8, 15, 33]
print(d)for i in range(5):[41, 23, 8, 15, 33][8, 15, 23, 33, 41]

for j in range(i,5):
print(d[j])d[j]を表示部品08でrange()の使い⽅を 部品確認。iとjの内容については08
前のスライド⾒る部品
12

d = [41, 23, 8, 15, 33]
print(d)初めのdの内容

開発した
プログラム[23, 41, 8, 15, 33][8, 15, 23, 33, 41]

そのまま打ち込む(⾏は空けない)

print(d)並べ⽅が終わった後のdの内容

次⾒て41

非常に重要

開発8:最後のチャレンジ: 数の並び替え考え⽅: 「課題19:複雑な二重繰り返しに挑戦」と「課題17:⼀番⼩さい数を配列の先頭に⼊れ替える」
を組み合わせてプログラムを作ります。
[41, 23, 58, 15, 33] i = 0の時(課題17と同じ)[15, 41, 58, 23, 33] d[0]〜d[4]の中で⼀番⼩さいものを

42TPOINT

基本的な構造i = [0,1,2,3,4]繰り返す
j = [i,・・,4]繰り返す

d[0]に⼊れ替える[15, 41, 58, 23, 33] i = 1の時[15, 23, 58, 41, 33] d[1]〜d[4]の中で⼀番⼩さいものを

⼩さい数を⼊れ替える

d[1]に⼊れ替える[15, 23, 58, 41, 33] i = 2の時[15, 23, 33, 58, 41] d[2]〜d[4]の中で⼀番⼩さいものを

課題17を参考にd[1]に⼊れ替える

部品12

i = 4の時まで続ける

43

今まで使っていた、変数iを使った繰り返しの中に、さらに繰り返しが⼊る形式
課題20の並び替えは、これが基本的な構造になります。

44

課題21

発展課題1: FizzBuss

Fizz Buzzという遊びのプログラ
ムを作ってみましょう。例えば、1から30までの数を表示しますが。
3の倍数の時は”Fizz”と表示。
5の場合の時は”Buzz”と表示。
3と5の倍数の時は、”Fizz Buzz”と表示。
それ以外は数字を言います。

ヒント

部品
07
部品
08

部品
部品
05
06

i%3余りを計算します。

12Fizz
4Buzz
Fizz
78FizzBuzz
11Fizz13
14
FizzBuzz

課題22

発展課題2: バブルソート

今回作成したプログラムは選択ソートという⽅法を使ったもので、データを並び替える⽅法はいろいろあります。

1617Fizz
19
Buzz
Fizz
2223Fizz
Buzz
26
Fizz
28
29
FizzBuzz

次の並び替え⽅法の考え⽅やプログラムをWebで調べて作成してください。
バブルソート4645