プログラミング入門I 宿題 2024.06.26

Back


本日の演習問題の iv. を改造してヒストグラムを求めるプログラムに変更しましょう.乱数の値を10刻みとし,例えば1-10,11-20のような範囲でそれぞれ乱数が何回出たかの頻度に変更します.

ただし,頻度はそのままでは数値が大きすぎるので,10ごとにアスタリスク * を1個表示することとし,代わりにグラフの中に数値を表示することとします.

演習問題と同様に,グラフの作成をモジュール化してください.今回もモジュールの名前はb23**のように自分のアカウントとします.また,レポート提出システムの方ですが,モジュールの提出で問題があったりしましたので,課題を分けてそれぞれ提出するようにしていますので,どっちをアップロードするのかを間違えないようにしてください.

Student number: s236099

Random numbers:  1-10 11-20 21-30 31-40 41-50 51-60 61-70 71-80 81-90 91-100 
Frequency:          0     1    18   115   303   303   122    20     2     0 

Histogram of random numbers

      0       100       200       300       400
------------------------------------------------
 1- 10| --  0
11- 20| --  1
21- 30|* -- 18
31- 40|*********** --115
41- 50|****************************** --303
51- 60|****************************** --303
61- 70|************ --122
71- 80|** -- 20
81- 90| --  2
91-100| --  0

------------------------

グラフの最初の横軸の目盛りは0だけ別に表示していたりして,ちょっといい加減なところがありますので,そこは自分で適当にやってみてください.
解答用紙を使用する際には,学生番号と名前の記入も忘れないでください.さらに,解答用紙自体がPythonのプログラムとなっていますので,実行してエラーの無いことを確認してから提出してください.

指定の解答用紙を使用していない,実行時にエラーが出る,学生番号と名前が無い,というような答案は提出されても採点しません.注意してください.


解答例

本体
# #############################
#
# プログラミング入門II 宿題 2024.6.26
# 学生番号:  s236099
# 氏名:     松江 花子
#
# #############################

from random import gauss
from b2399 import graph

print('Student number: s236099')
print('')

lst = [round(gauss(50, 10)) for _ in range(1000)]
freq = [len(list(filter(lambda n: i * 10 + 1 <= n <= i * 10 + 10, lst))) for i in range(10)]

print('Random numbers: ', end = '')

for i in range(10):
    print(f'{i * 10 + 1:2}-{i * 10 + 10} ', end = '')
else:
    print()

print('Frequency:      ', end = '')

for i in range(10):
    print(f'{freq[i]:5} ', end = '')
else:
    print()

graph(freq)

print('\n------------------------\n')
モジュール
# #############################
#
# プログラミング入門II 宿題 2024.6.26
# 学生番号:  s236099
# 氏名:     松江 花子
#
# #############################

def graph(lst):
    print('\nHistogram of random numbers')
    print('\n      0', end = '')

    for i in range(100, 401, 100):
        print(f'{i:10}', end = '')
    else:
        print()

    for _ in range(48):
        print('-', end = '')
    else:
        print()
        
    for i in range(0, 10):
        print(f'{i * 10 + 1:2}-{i * 10 + 10:3}|', end = '')

        for j in range(1, lst[i] // 10 + 1):
            print('*', end = '')
        else:
            print(f' --{lst[i]:3}')


Back