大人のための『夢を叶える学校』

「夢は叶えるもの!」険しい道でも突き進めば、その先に必ず光が見える。実現した経緯や飲食店経営・起業の仕方などについて投稿しています

Pythonプログラミング楽しく学ぶ実践記:中級編5日目

(✿✪‿✪。)ノコンチャ♡

Pythonプログラミングの中級編に入り5日目となりました。

ちょっとわかりずらくなってきた頃でしょうか?

でも、心配いりません!

プログラミングって難しそうに思われていますが、

そんなことありません。

自分でやっている作業を、

「機械」にやってもらうことなので、

そのやり方を指示しているだけなのです。

いわば『マニュアル作成』みたいだと思っています。

 

余談ですが、

家電製品などのマニュアルを見て、

「こんなことは常識じゃないの?」

「こんな当たり前のことしつこく書くなよ」

なんて思ったことないですか。

 

これは、

仮に小学生が読んでも理解できるように書いてあるからなんです。

 

プログラミングも同様なんです。

我々の常識は「機械」には分かりません。

だから細かく指示してあげないと機会が困惑してしまうのです。

 

そんなことで、

前回学んだ「繰り返し文」の延長で今回も進めていきます。

今回は、

2つ繰り返し文を組み合わせて「九九の計算」をしたり、

条件分岐させて変数を決定し「総当たり戦の表」を作ります。

実践を交えていきますので、理解しやすいと思います。

 

f:id:success-life:20210905223615p:plain

繰り返し処理②

2つの繰り返し処理

算数で習った『九九の計算』を思い出しましょう。

  1×1、1×2、1×3、・・・1×9

九九の計算式を『 num1 *  num2 』と考えると、

num1 に対して掛け合わせる num2 が「1~9」です。

また、

それらの計算を num1 が「1~9」まで繰り返すことです。

 

つまり、

for 文を2つ組み合わせることで計算することができます。

 

  fornum1inrange(1,10):

  ␣␣␣␣fornum2inrange(1,10):

  ␣␣␣␣␣␣␣␣num3=num1*num2

  ␣␣␣␣␣␣␣␣print(num1,'×',num2,'=',num3)

 

説明すると分かりずらいので、

プログラムを記述して実行してみましょう。

 

f:id:success-life:20210906025106p:plain

九九の計算①

実行結果は、

f:id:success-life:20210906025149p:plain

九九の計算②

  

 

f:id:success-life:20210906025236p:plain

九九の計算③

結果、このように表示されます。

 

条件式を使った繰り返し

while 文

『 while 文』は条件を満たしている間、

繰り返し処理をする場合に使います。

while の後には、

「 True 」か「 False 」を返す式や関数を記述します。

 

  while継続条件:

  ␣␣␣␣繰り返し実行する処理

 

例えば、

10,000 円の持ち金があります。

毎回 820円づつ使うとして、

持ち金が 0 円になるまで繰り返すとします。

 

「持ち金」を変数『 okane 』とすると、

  1回目 持ち金 10,000円ー820円=9,180円

  2回目 持ち金   9,180円ー820円=8,360円

となっていきます。

つまり持ち金 okane は、

引かれた後の持ち金が次の持ち金になるわけです。

そして、

その持ち金が 0円になるまで引き続けることになるのです。

 

  okane=10000

  whileokane>=0:

  ␣␣␣␣print('残高',okane,'円')

  ␣␣␣␣okane=okane-820

 

どんな結果になるか想像してください。

 

f:id:success-life:20210906033212p:plain

while 文①

 

実行結果は、

f:id:success-life:20210906033251p:plain

while 文②

このように12回目では残高 160円となり、

820円を引くことができなくなるので、

プログラムが終了します。

 

変数から引き続ける記述

  okane=okane-820

 

このように記述された意味に、

違和感を感じた人もいるかと思います。

通常の数学で使う「=(イコール)は、

等しいという方程式で使われます。

しかしプログラムでは異なり、

『右辺を左辺に代入する』という意味になります。

これを「代入演算子」と呼びます。

 

ここで注意しておきたいのは、

  1. 右辺を処理する
  2. 左辺を処理する
  3. 右辺を左辺に代入する

このような順番で処理されることです。

 

累算代入文

ここで学んだ代入演算子ですが、

処理する毎に残高が変化していくので、

同じ変数名を2回記述しなければなりません。

 

しかし累算代入文『 -= 』を使うと

  okane-=820

と短く記述することもできます。

 

演算子 処理内容 記述例 同じ式
+= 右辺を左辺に足して代入する A+=50 A=A+50
-= 右辺を左辺から引いて代入する A-=50 A=A-50
*= 右辺を左辺に掛けて代入する A*=50 A=A*50
/= 右辺を左辺から割って代入する A/=50 A=A/50

 

繰り返し文の「脱出」と「スキップ」

『 break(ブレイク)文』『 continue(コンティニュー)文』は、

これまで学んできた繰り返し文の流れを変えることができます。

想像できる通りですが、

『 break 文』は繰り返しを中断させたい時に使います。

また『 continue 文』は繰り返しの中断はしませんが、

ブロック内のそれ以降をスキップして、

繰り返しに戻ることができます。

つまり、

すごろくで「一回休み」のようなイメージです。

 

この後、

「総当たり戦の表」を作る時に使いますので、

実践しながらの方が理解しやすいと思います。

 

総当たり戦の表作成

さて、

これまで「繰り返し処理」について学んできました。

総まとめの課題として、

総当たり戦の表を作ってみましょう。

 

今回は、

5チームの総当たり戦の表を作っていきます。

考え方は、

前項で「九九の計算」と同じようにすればできそうですよね。

 

全ての対戦組み合わせ

対戦する5チームを「A」「B」「C」「D」「E」とします。

これらをリストにして変数 team に入れます。

for 文を2重にして対戦を表示します。

 

  team=[ 'A','B','C','D','E' ]

  fort1inteam :

  ␣␣␣␣fort2inteam :

  ␣␣␣␣␣␣␣␣print( t1,'対',t2 )

 

f:id:success-life:20210908215450p:plain

総当たり戦①

 

それでは実行してみましょう。

f:id:success-life:20210908215526p:plain

総当たり戦②
同じチーム同士の対戦を除く処理

実行結果でもわかるように、

単純にチームの組み合わせを表示させただけです。

「A 対 A」のような同じチーム同士の組み合わせの場合は、

処理をスキップさせることにしましょう。

その為には、

表示処理の前に『同じチーム同士の場合は処理しない』ように、

if 文を挿入します。

つまり、

t1(チーム1)と t2(チーム2)の文字列を比較し、

それらが違う場合だけ表示させることにしましょう。

初級編の復習になりますが、

比較演算子『 != 』を使って、

「 t1 と t2 が異なる場合に実行する」処理を挿入しましょう。

  ift1 != t2 :

 

f:id:success-life:20210908221349p:plain

総当たり戦③

 

実行すると、

f:id:success-life:20210908221422p:plain

総当たり戦④

 

このように同じチーム同士の対戦を除くことができました。

前項でお話しした『 continue 文』を思い出してください。

「 t1 と t2 が同じチームの場合は、

処理をスキップして次の繰り返しに戻る」

と考えることができます。

 

continue 文を使った処理

f:id:success-life:20210908222405p:plain

総当たり戦⑤

 

実行してみましょう。

f:id:success-life:20210908222453p:plain

総当たり戦⑥

 

同様の結果が表示されることがわかります。

何を言いたいのかというと、

プログラミングとは「正解は1つではない」ということです。

 

それでは次に、

「A 対 C」と「C 対 A」は同じ対戦なので、

どちらか一方だけ表示処理すればいいのです。

しかし、

どうしたらいいかわからなくなりますよね。

 

それではここで、

少し頭を柔軟にしてください。

実際にあなたが対戦表を作る「作業」を見直してみましょう。

 

  t2(A) t2(B) t2(C) t2(D) t2(E)
t1(A)   A 対 B A 対 C A 対 D A 対 E
t1(B)     B 対 C B 対 D B 対 E
t1(C)       C 対 D C 対 E
t1(D)         D 対 E
t1(E)          

 

変数 team1 と変数 team2 に、

「A」「B」「C」「D」「E」のリストを記憶させます。

team1 と team2 を比較して、

同じ文字列の時は team2 のリストから取り除くことにします。

この処理は、

『 remove メソッド』を使うことで処理できます。

 

  team1=[ 'A','B','C','D','E' ]

  team2=[ 'A','B','C','D','E' ]

  fort1inteam1 :

  ␣␣␣␣team2.remove(t1)

  ␣␣␣␣fort2inteam2 :

  ␣␣␣␣␣␣␣␣print( t1,'対',t2 )

 

こうすることで、

リスト team1 の「A」「B」「C」「D」「E」の各要素に対して、

順次繰り返し処理が実行されます。

4行目では、

変数 t1 と同じ要素をリスト team2 内から取り除きます。

 

つまり、

変数 t1 が「A」で繰り返される時に、

リスト team2 の「A」を取り除き、

要素は「B」「C」「D」「E」となります。

次に、

変数 t1 が「B」で繰り返される時には、

リスト team2 の要素は「C」「D」「E」となります。

次に、

変数 t1 が「C」で繰り返される時には、

リスト team2 の要素は「D」「E」となります。

次に、

変数 t1 が「D」で繰り返される時には、

リスト team2 の要素は「E」となります。

最後に、

変数 t1 が「E」で繰り返される時には、

リスト team2 の「E」が取り除かれるので、

要素が無くなります

 

f:id:success-life:20210908232532p:plain

総当たり戦⑦

 

実行すると、

f:id:success-life:20210908232610p:plain

総当たり戦⑧

このように結果が表示されます。

今回の「総当たり戦の表」を作る場合には、

「対戦相手を減らしていく」という考え方にすると作りやすいです。

しかし、

前にも言ったように、

「正解は1つではない」ので考えてみてください。

 

さいごに

少し長くなりましたが、

繰り返し処理は作業の簡素化には欠かせません。

規則性を考えてプログラミングすることが大切です。

 

慣れてくると面白くなってくると思います。

次回から【応用編】をスタートする予定なので、

まずは『関数』について学んでいこうと思います。

 

ではまた、お会いしましょう!

 

   ☆ ☆ ☆  中級編スケジュール  ☆ ☆ ☆

f:id:success-life:20210908235807p:plain

中級編1日目

f:id:success-life:20210908235833p:plain

中級編2日目

f:id:success-life:20210908235907p:plain

中級編3日目

f:id:success-life:20210908235929p:plain

中級編4日目

f:id:success-life:20210908235951p:plain

中級編5日目