本日の演習問題の 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}') |