プログラミング入門II 演習課題 2025.06.11

Back to text page


  1. 前々回の宿題のモジュール化

    前々回の宿題をまずはモジュール化してみましょう.

    解答例(本体) モジュール(オイラー式) モジュール(階乗)

  2. filter 関数と map 関数の組み合わせ
  3. 前回も扱った学生10人の3教科のテストの点数表ですが,それぞれの科目で最高点を取った人の情報を以下のように提示するプログラムを作成してみましょう.

    No.   Eng  Math  Phys Total
      1    10    21    87   118
      2    72    37    81   190
      3    30    70    43   143
      4    34    98    71   203
      5    11    88     3   102
      6    47    40    91   178
      7    84     2    79   165
      8    79    37    49   165
      9    47    38    83   168
     10    20    67    71   158
    
    Best scores
    Subject  Student No.   Score
        Eng          7        84
       Math          4        98
       Phys          6        91
    

    学生番号と最高得点を返す関数をモジュールにしてみました.成績リストが引数として与えられると,その行と列を入れ替えることで,各科目の最高点を max 関数で求められます.そして,index メソッド(教科書 p.175)でその要素があるリストのインデックスも見つけられます.

    今回は同じ最高得点が2つ以上出てきた場合には小さい方の番号しか出ない処理になっています.

    解答例(本体)

    解答例(モジュール)

  4. 中心極限定理
  5. 一様分布な乱数を発生させる randint 関数ですが,一様分布な乱数の平均値を何度か求めていくと,平均値の平均値は正規分布に従う値になります.(中心極限定理)

    10個の2桁の正の整数を発生させることを10回行いますが,その際に各回の平均値と標準偏差も計算します.そして,5回目以降は平均値の平均値と平均値の平均値の標準偏差も求め,乱数が増えるたびに平均値の標準偏差の値が落ち着いていくかどうかを観察するプログラムを作成しましょう.

    下の実行結果は10個の数値を表示した後で,その10個の平均値,10個の数の標準偏差,平均値の平均値,平均値の平均値の標準偏差,の順になっています.

     1: 18 89 17 79 12 28 90 57 38 11   43.9  32.22 
     2: 45 39 75 55 75 40 90 59 16 26   52.0  23.32 
     3: 76 89 91 25 78 82 67 50 25 30   61.3  26.56 
     4: 70 75 81 46 20 64 49 19 36 55   51.5  21.75 
     5: 70 95 60 92 15 53 88 27 59 87   64.6  27.52  50.2  4.28
     6: 59 64 57 47 57 93 44 26 65 25   53.7  19.88  50.9  4.21
     7: 19 14 66 91 51 87 91 55 62 34   57.0  28.24  51.5  4.12
     8: 64 95 87 47 78 68 38 37 70 27   61.1  22.89  52.0  4.09
     9: 25 14 39 23 93 43 85 30 87 42   48.1  29.23  52.3  3.93
    10: 81 63 32 92 79 59 49 86 94 37   67.2  22.57  52.7  3.89
    

    発生した乱数を入れる10×10のリスト,平均値を入れるリスト,平均値の平均値を入れるリストを用意しました.

    なお,ここでは特にモジュールに分けることを意識しなくても大丈夫です.import 文で from を活用して statistics.mean や statistics.stdev などのモジュールを簡単に読み込むようにしましょう.

    解答例

  6. 正規分布に従う乱数
  7. Python の random モジュールには正規分布に従う乱数(浮動小数点数)を発生させる gauss 関数が用意されています.gauss 関数は引数に平均値と標準偏差を与えて使用します.

    今,平均値が 50 で標準偏差が 10 の整数の乱数を1000個発生させて,その度数分布が実際に正規分布となっているかを確認するプログラムを作成しましょう.

      1 -    0 -    0
      2 -    0 -    0
      3 -    0 -    0
      4 -    0 -    0
      5 -    0 -    0
      6 -    0 -    0
      7 -    0 -    0
      8 -    0 -    0
      9 -    0 -    0
     10 -    0 -    0
     11 -    0 -    0
     12 -    0 -    0
     13 -    0 -    0
     14 -    0 -    0
     15 -    0 -    0
     16 -    1 -    1
     17 -    1 -    2
     18 -    0 -    2
     19 -    0 -    2
     20 -    0 -    2
     21 -    0 -    2
     22 -    1 -    3
     23 -    1 -    4
     24 -    1 -    5
     25 -    0 -    5
     26 -    4 -    9
     27 -    1 -   10
     28 -    4 -   14
     29 -    4 -   18
     30 -    5 -   23
     31 -    5 -   28
     32 -    6 -   34
     33 -    7 -   41
     34 -   12 -   53
     35 -   14 -   67
     36 -   10 -   77
     37 -   11 -   88
     38 -   14 -  102
     39 -   21 -  123
     40 -   23 -  146
     41 -   28 -  174
     42 -   22 -  196
     43 -   34 -  230
     44 -   34 -  264
     45 -   41 -  305
     46 -   32 -  337
     47 -   56 -  393
     48 -   32 -  425
     49 -   43 -  468
     50 -   48 -  516
     51 -   39 -  555
     52 -   37 -  592
     53 -   45 -  637
     54 -   35 -  672
     55 -   33 -  705
     56 -   29 -  734
     57 -   25 -  759
     58 -   32 -  791
     59 -   22 -  813
     60 -   22 -  835
     61 -   24 -  859
     62 -   11 -  870
     63 -   17 -  887
     64 -   18 -  905
     65 -   15 -  920
     66 -   14 -  934
     67 -   16 -  950
     68 -   12 -  962
     69 -    7 -  969
     70 -    6 -  975
     71 -    4 -  979
     72 -    5 -  984
     73 -    8 -  992
     74 -    2 -  994
     75 -    3 -  997
     76 -    0 -  997
     77 -    1 -  998
     78 -    0 -  998
     79 -    0 -  998
     80 -    1 -  999
     81 -    0 -  999
     82 -    0 -  999
     83 -    0 -  999
     84 -    1 - 1000
     85 -    0 - 1000
     86 -    0 - 1000
     87 -    0 - 1000
     88 -    0 - 1000
     89 -    0 - 1000
     90 -    0 - 1000
     91 -    0 - 1000
     92 -    0 - 1000
     93 -    0 - 1000
     94 -    0 - 1000
     95 -    0 - 1000
     96 -    0 - 1000
     97 -    0 - 1000
     98 -    0 - 1000
     99 -    0 - 1000
    100 -    0 - 1000
    

    左列は1から100までの数で,中央列がその数が出た回数,右列は累積度数です.

    フィルター関数を使用して,反復処理の利用を減らしましょう.

    解答例

  8. 二項分布とグラフ
  9. 正規分布と似た形になるものに二項分布があります.コインを10枚投げて表が何枚出たかを数える作業を100回行った時の,表の枚数とその頻度を乱数を用いてシミュレートしてみましょう.以下のように結果を表示するものとし,グラフを表示する部分をモジュールとして独立させましょう.

    Number of head:   0   1   2   3   4   5   6   7   8   9  10 
    Frequency:        0   0   7  12  24  23  19  11   4   0   0 
    
    Histogram of head frequency of flipped 10 coins
    
      0         10        20        30        40        
    -------------------------------------------
     0|
     1|
     2|*******
     3|************
     4|************************
     5|***********************
     6|*******************
     7|***********
     8|****
     9|
    10|
    

    本体解答例

    モジュール解答例


Back to text page