2024年度 電子情報通信課程 計算機実習II

今日の説明動画

本日の説明は,3本の動画に分かれています.それぞれ視聴して,理解ができたら次に進むようにして下さい.

動画の長さは次の通りです.自分のペースで進めながらも,1コマで終わるように頑張ってください.

  1.  計算機実習2/計算機基礎実習2-06回目ex6-1 - 12分49秒
  2.  計算機実習2/計算機基礎実習2-06回目ex6-2 - 02分39秒
  3.  計算機実習2/計算機基礎実習2-06回目ex6-5 - 09分33秒
  4. 計 25分01秒

講義に関して,ちょびっとコメント

前回のレポート採点結果は,こちらです.

繰り返し(for)

今日のポイント

構造化プログラムの「繰り返し(=ループ)」の理解を深めます.

繰り返しにはforwhileの2種類があります.

今日は,回数や条件が決まっている繰り返しを勉強します.

(来週は,もっと複雑な「繰り返し」が待っています)



forの構文は,for <カウンタ変数> in [リスト] という形になっており,inの中に書かれているデータ(リスト)から一つずつ順に取ってきて,カウンタ変数に入れて,繰り返し部分を実行します.取ってくるデータがなくなったらループ終了です.

繰り返し部分は,forに対して1つインデントした状態で記述します.インデントが終わるところまでがループのブロックになります.

inの部分にrange関数を用いることが多く,結果として指定した回数だけ繰り返しを実行する形式になります.その際,繰り返した回数(厳密には0からスタート)がカウンタ変数の値になっています.

実際のプログラムを見て,理解を深めていきましょう.

forの基本形

ex6-1.py
enq h hm qZmfd(z99):
        oqhms("h の値は," + rsq(h) + "です.")

ループ用の変数iの値が,0から始まり,画面に値を表示して1ずつ足していき,99まで表示します(=100になる前で終わります).

range関数は,「指定された数を超えない範囲」の数を返してくれます.指定した数が含まれないことに気をつけて下さい(課題の4番目のように数字を減らすときに特に注意しましょう).


ループ用の変数がiなのは,最初の頃のプログラミング言語(ポケコン用のBASIC)の名残です.ポケコンでは,変数の名前は1文字しか使えませんでした.そのときに,ループ用の変数として,i, j, k や l, m, nを使っていたからです.

※変数名は,数学や物理で使う変数名と一致させることが多いです.例えばa, b, cは,とりあえず変数を使うときに利用し,x, y, z は,座標系を表すのによく使われました.

このあたりの常識は,他人の色々なプログラムを読んで,身につけて下さい(私は「カウンタ変数」よりも「ループ変数」の言い方の方が身についています).

課題 6-1

ex6-1.py を次の動作をするように書き換えなさい.「出力させましょう」の課題はプログラム全部(2行)を提出して下さい.

  • range(100)をrange(10, 100)に変えて実行してみて下さい.どのように変わったかを説明して下さい.
  • rangeの部分をrange(100, 0, -1)に変えて実行してみましょう.どのように変わったかを説明して下さい.
  • 1から9まで,2ずつ増える数を出力させましょう(1, 3, 5, ..., 9).
  • 0から100まで,5ずつ増える数を出力させましょう(0, 5, 10, 15, ..., 95, 100).
  • 20から-20まで,1ずつ減る数を出力させましょう(20, 19, 18, ..., -19, -20).
  • 1から1024まで,2倍ずつ増える数を出力させましょう(1, 2, 4, 8, ..., 512, 1024).

カウンタ変数の利用

for文にて,いろいろと変化するカウンタ変数を手に入れることができました.次は,これを利用して,色々な処理を行いましょう.

課題 6-2
  • 教科書p.122のchap5.py を入力して実行しましょう.
課題 6-3
  • 教科書p.123のchap5.py を入力して実行しましょう.
発展課題 6-4
  • 座標計算にsin,cosを使うと,円状に画像を配置することもできます.
    ※余力のある人は挑戦してみて下さい.

whileの基本形

ex6-2.py
Z = 9
bntmsdq = 9
vghkd Z <= z9:
        bntmsdq = bntmsdq + z
        Z += bntmsdq
oqhms("z + 1 + ... mがz9を越えるのは" + rsq(bntmsdq) + "を足したときである.")

while文は,その後ろに条件を書き,その条件が満たされているとき(=真の時)に次のブロックの部分を繰り返します.

ex6-2.pyでは,counter の値を1ずつ増やし,さらにそのcounterの値をaに足しています.

つまり,Σn = 1nを計算しており,その値が10を超えたらループを抜け出ます.

なお,a = a + counter のように,ある変数に対して,演算した結果を同じ変数に戻す時は,=の左側にその演算子を書くことで同じ意味になります(代入演算子).

課題 6-5

ex6-2.py の上限を指示通りに変更し,次の動作をするように書き換えなさい.提出は繰り返しを終えたときの counterの値だけで結構です.

  1. ex6-2.py の上限を100に変更し,そのときの,counterの値を答えなさい.
  2. counterの値を足すのではなく掛け続けた場合のaが100を越えたときのcounterの値を答えなさい.
    ※aの初期値を0から1に変更すること.
  3. (aの初期値を0に戻した上で)偶数の時は足し,奇数の時は引く計算をし,その結果が30を越えたときのcounterの値を答えなさい.
課題 6-6
  • 教科書p.127のchap5-2.py を入力して実行しましょう.
課題 6-7
  • 教科書p.128のchap5-2.py を入力して実行しましょう.
課題 6-8
  • 教科書pp.129-130のchap5-2.py を入力して実行しましょう.
課題 6-9(2022年から追加)
  • じゃんけんゲーム(ex4-2.pyや課題5-2)をwhileを使って「自分が勝つまで」繰り返すようにしなさい.プログラムを提出して下さい.
    ※「何回で勝てたか」も数えられると,よりゲームらしくなります.

今日の課題

上記の課題6-1,6-2,6-3,6-4,6-5,6-6,6-7,6-8,6-9です.

6-4に関しては任意とします.

教科書のプログラムを入力して実行する課題は,提出不要です.

課題はメールで提出して下さい.

件名はreport06,アドレスはcom02@elec.ryukoku.ac.jp です.