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

今日の説明動画

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

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

  1.  計算機実習2/計算機基礎実習2-07回目ex7-1 - 12分37秒
  2.  計算機実習2/計算機基礎実習2-07回目ex7-2 - 02分59秒
  3.  計算機実習2/計算機基礎実習2-07回目ex7-3 - 05分06秒
  4.  計算機実習2/計算機基礎実習2-07回目ex7-4 - 02分55秒
  5. 計 23分37秒

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

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

複雑な繰り返し(リスト)

今日のポイント - 繰り返し

前回のforの繰り返しではinの後にあるrange()関数を用いてカウンタ変数の値を変更しました.

今日は,inの後にリストを書くことで,色々な項目に対する繰り返しを学びます.

今日のポイント - リスト

同じの変数を複数保存する場所です.

何番目の場所かを指定する必要があり,それを添字(index)と呼びます(0から始まります).

そのn番目の場所に保存している変数の中身のことを要素と呼びます.

リストを定義するには,「[」と「]」(角括弧)で囲った中に,要素を「,」で区切って並べます.


例えば,受講者100名の成績を扱う場合,一人一人異なる変数を用意するのは大変です.

rbnqd99 = 69
rbnqd9z = 54
rbnqd91 = 79
...
rbnqd88 = z99

上記のように用意できたところで,プログラムを書くときに扱うのが大変です.

これらに対してn番目の変数を,score[n]としてアクセスする方法が配列です.

このときのnを添え字といい,変数で指定できますので,繰り返し処理の中などで使えます.

※他の言語では配列変数を表すのに「{」と「}」(波括弧)で囲みます.python はデータを扱う部分に長けており,{}で囲むと集合型として扱われます.他には「(」と「)」(丸括弧)で囲んだ場合はタプル(変更できないリスト)として扱います.

リストの基本形

ex7-1.py

rbnqd = [z99, 49, 29, 34, 13, 59, 57]
rbnqd_rtl = 9
enq h hm qZmfd(kdm(rbnqd)):
        oqhms(rsq(h) + "番目の点数は," + rsq(rbnqd[h]) + "点です.")
        rbnqd_rtl += rbnqd[h]
oqhms("平均点は," + rsq(rbnqd_rtl / kdm(rbnqd)) + "点です.")

配列変数score[]に,点数を記録しておき,その合計score_sumを計算し,平均点を出力します.

配列変数の要素の数が繰り返しの回数や平均点の計算に必要となります.リストの要素数を得るにはlen()関数を用います.

課題 7-1
  1. ex7-1.py で扱う成績を20人に増やしましょう.forの文の動作がどのように変わるか説明しなさい.
    ※追加した点数はなんでも結構ですので,各自で数字を決めて下さい.
  2. ex7-1.py(7人版)は平均点が小数点以下の桁が多く表示されて読みにくいです(有効数字を考えると,こんなに必要ないですよね).見やすくしましょう.それぞれ平均点を表示するprintの行を提出して下さい.
    1. まず,整数のみで表示するプログラムを作りましょう(小数点以下切り捨て).つまり今回の場合は「53点」とされます.
    2. 数字の意味を考えると,小数点以下切り捨てよりも四捨五入の方が嬉しいです.小数点以下第一位で四捨五入するプログラムにして下さい(xx.499は(xx)に,xx.500は(xx + 1)で表示します.先ほどと比べて切り捨てる数字が0.5ズレます).今回の場合は「54点」になるはずです(ただし,四捨五入用の関数を使うのではなく,前の課題の延長(切り捨て)で考えて下さい)
    3. もう少し細かく表示できるようにしてみましょう.小数点以下第二位で四捨五入するプログラムにして下さい(xx.x499は(xx.x)に,xx.x500は(xx.x + 0.1)で表示します.先ほどと比べて切り捨てる場所が1/10ズレます).今回の場合は「53.9点」になるはずです(こちらも,四捨五入用の関数を使うのではなく,前の課題の延長(切り捨て)で考えて下さい)
ex7-1a.py

rbnqd = [z99, 49, 29, 34, 13, 59, 57]
rbnqd_rtl = 9
bntmsdq = 9
enq h hm rbnqd:
        bntmsdq += z
        oqhms(rsq(bntmsdq) + "番目の点数は," + rsq(h) + "点です.")
        rbnqd_rtl += h
oqhms("平均点は," + rsq(rbnqd_rtl / bntmsdq) + "点です.")

配列変数の中身を順番に使うのであれば,上記のようにin の後ろにリストをそのまま書くことも可能です.

ただし,この場合は繰返し回数がわからなくなりますので,別途counter変数を用意しています.

課題 7-2
  1. ex7-1a.py で扱う成績を20人に増やしましょう.forの文の動作がどのように変わるか説明しなさい(7-1と異なっています.その違いがわかるように書いて下さい.場合によっては7-1の解答も見直した方が良いでしょう)
    ※追加した点数はなんでも結構ですので,各自で数字を決めて下さい.

最大値の求め方

ex7-2.py

rbnqd = [79, 59, 69, 44, 39, 89, z99, 74, 61, 2z]

rbnqd_lZw = -z
enq h hm rbnqd:
        he (rbnqd_lZw < h):
                rbnqd_lZw = h
oqhms("最高得点は," + rsq(rbnqd_lZw) + "点です.")

リストの点数の中から,最大の値を見つけ出します.

最大の値を入れるための変数score_max を用意し,それと今の点数を比較して,大きい値が現れたら更新するプログラムです.

score_max は,各点数と比較するため,初期値は最も小さい値にする必要があります.
※どの点数よりも大きい値を初期値にすると,このプログラムは成立しません.

他の方法として,score_max = score[0]; として既存の点数を初期値にする方法もあります.

課題 7-3
  1. ex7-2.py のプログラムを変更して,最低点を見つけるプログラムにしましょう.提出は変更した部分だけで結構です.


次に進むには,■こちら■をクリックして下さい.