2021年度 電子情報通信課程 計算機実習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の文の動作がどのように変わるか説明しなさい.
    ※追加した点数はなんでも結構ですので,各自で数字を決めて下さい.

最大値の求め方

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 のプログラムを変更して,最低点を見つけるプログラムにしましょう.提出は変更した部分だけで結構です.

複数のリストの扱い

ex7-3.py

rbnqd = [79, 59, 69, 54, 79, 89, z99, z4, 61, 2z]
mZld  = ["植村","藤井","中村","濱野","白石","箕浦","船戸","藤井","    ","    "]
                                       # 後ろ2人分の名前は,各自で考えて下さい.
enq h hm qZmfd(kdm(rbnqd)):
        oqhms(mZld[h] + "さんの点数は" + rsq(rbnqd[h]) + "です.")

ex7-3.pyを使った課題は後ほど(課題7-6).

課題 7-4
  • 教科書p.136のchap5-3.py を入力して実行しましょう.
課題 7-5
  • 教科書p.139のchap5-3.py を入力して実行しましょう.
課題 7-6
  • 教科書のバブルソートを参考に,ex7-3.pyにて点数と名前の両方を並び替えて下さい.提出は並び替えのプログラムの部分だけで結構です.
課題 7-7
  • じゃんけんゲーム(ex4-2.pyや課題5-2)をwhileを使って「自分が勝つまで」繰り返すようにしなさい.プログラムを提出して下さい.
    ※「何回で勝てたか」も数えられると,よりゲームらしくなります.
発展課題 7-8
  • 足し算・引き算をする電卓を作りましょう
    • ユーザがキーボードから入力した数字を,今まで足してきた数(最初は0)に足し,結果を画面に表示します.
    • 負の数の入力も認めれば,引き算も同様にできます.
    • 入力した数が0であれば,終了します.
発展課題 7-9
  • 数当てゲームを作りましょう.
    • コンピュータが乱数で1から1000までの数を用意します.
    • プレイヤがキーボードから数を入れます.
    • コンピュータの数より大きければ「大きい」,小さければ「小さい」と画面に表示します.
    • コンピュータの数とプレイヤの数が同じでなければ,繰り返します.
    • これも,「何回で当てられたか」を表示させましょう.
発展課題 7-10

フィボナッチ数列を計算し,nがいくつの時にanの値が1000を越えるか求めなさい.

※フィボナッチ数列:an+2=an+an+1a0=0,a1=1.

今日の課題

上記の課題7-1から7-10です.

7-8,7-9,7-10に関しては任意とします.

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

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