B05_1 (スクリプト)

ねらい: 繰り返しを用いて,リストの項目ごとに処理を行い,新しいリストを生成する.

本課題は,課題A05_1の続きである.課題A05_1のプログラムに追加するようにして作成せよ.

納豆購入金額について,金額のばらつきを表す標準偏差を求めたい. 課題A05_1のプログラムは完成し,変数 avg_tohoku に金額の平均が格納されているとする.

  1. 空のリスト list_deviation を用意し,for文を用いて各金額と平均との差(偏差)を計算し,メソッド append() を用いて list_deviation に格納せよ.

  2. リスト list_deviation に格納されている値について,各値の二乗の合計(偏差の二乗和)を計算せよ.

  3. 2.の結果を用いて,偏差の二乗和の平均(分散)を計算せよ.

  4. 分散の平方根を計算せよ.この値が求める標準偏差であるので,表示せよ(途中の過程が表示されていてもよい).

    平方根の計算は math モジュールの関数 sqrt() で行える.あるいはべき乗の演算子を用いて1/2乗してもよい.

    math モジュールの関数 sqrt() の使い方については,インタラクティブシェルで確認せよ.

    >>> import math
    >>> math.sqrt(2)
    

B05_2 (スクリプト)

ねらい: if による条件分岐

タクシーの運賃を想定し,乗車距離(整数)を単位mで入力すると,適切な運賃を出力するプログラムを作成せよ. 運賃は以下の条件によって決まるものとする.


B05_3 (スクリプト)

ねらい: for と if を組み合わせて,条件によって処理を変える.(リストを使う方法もありますが...)

眠れないときに羊を数えるプログラムを作成する. (プログラムが数えてくれても,あなたは眠くなりませんが...)

  1. まず,以下のように表示するプログラムを作成せよ.

    羊が1匹
    羊が2匹
    羊が3匹
    :
    羊が99匹
    羊が100匹
    

  2. 1.のプログラムを改良し,以下のように表示するプログラムを作成せよ.

    ひつじが1ぴき
    ひつじが2ひき
    ひつじが3びき
    :
    ひつじが99ひき
    ひつじが100ぴき
    

「匹」の読み方は以下の通りとする.

プログラム2を提出する.スクリーンショットは,プログラム2の,90匹から100匹の出力結果がわかるものを提出せよ.


B05_4 (スクリプト)

ねらい: 二重ループを使用する.

以下に示す九九の表を,for 文を二重に用いる(for 文の繰り返しブロックに,for 文を入れる)ことで表示せよ.

print(' 1 2 3 4 5 6 7 8 9') のような,表示すべき内容を関数 print() でそのまま出力する方法は,題意を満たさないため不正解である.

 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81

※予備課題

本課題が難しいと感じる場合,まず,以下の課題に取り組め.

for文を用いて,

1 2 3 4 5 6 7 8 9 10
と出力する.

※出力を整える

以下は出力を整えるために必要な関数 print() とf文字列に関する知識である(一部再掲).

インタラクティブシェルで以下を試せ.

改行せずに出力する:

>>> print('poo', end='')

変数の値をf文字列で表示する:

>>> i = 2
>>> print(f'{i}')

変数の値を2桁で(2の前に空白を入れて)表示する:

>>> i = 2
>>> print(f'{i:2}')

改行のみ行う.

>>> print()


B05_5 (スクリプト,オプション)

ねらい: 複雑な条件を適切に判定する.

本課題は,課題A05_3の拡張である.

(プログラム内で)サイコロを3つ振り,3つの目の数を出力した後,3つの目が等しいか,3つのうち2つの目が等しいか,全て異なるかを判定して表示するプログラムを作成せよ.

判定例:


B05_6 (スクリプト,オプション)

ねらい: 人間が行うと非常に時間がかかる計算を行わせる.

正の整数nについて,自分自身より小さい(n未満の)正の約数の和がnと等しくなるとき,nを完全数という. 100000以下の完全数を探して出力するプログラムを作成せよ.


B05_7 (スクリプト,オプション)

ねらい: 二重ループの中で条件分岐を使用する.

縦横に「め」が並んでいる中から,「ぬ」がどこにあるかを探す文字探しゲームを作る. 仕様は以下の通りである.

  1. 盤面の大きさはキーボードから入力する.最小を5x5,最大を20x20とし,範囲外の値が入力された場合は適切な範囲の値に修正する.

  2. 画面に指定された個数の「め」を表示し,そのうち1個を「ぬ」にする.位置の回答がしやすいように,上側と左側に座標を表示する.

  3. 探索開始時刻を記録する.

  4. キーボードから,横方向と縦方向の「ぬ」の位置を入力させる.

  5. 正解であれば,「正解です!」と表示し,次に探索にかかった時間を表示する.不正解の場合は,「不正解です...」と表示し,次に正解位置を表示する.

画面例を以下に示す.

盤面の横幅(5-20): 5
盤面の縦幅(5-20): 5
盤面のサイズは5×5です.
    0 1 2 3 4
 0 めめめめめ
 1 めめめめめ
 2 めめめめめ
 3 めぬめめめ
 4 めめめめめ
横 = 1
縦 = 3
正解です!
探索時間: 4秒962

B05_8 (スクリプト,オプション)

ねらい: 確率に関する問題の解をシミュレーションで求める.

まず,以下の問題の答えを予想せよ.予想内容を画面に表示した後に,「ドアを変更する」「ドアを変更しない」のそれぞれについて10000回シミュレーションを行って新車があたる確率を求めて表示し,得られた結果に基づいて,解答を表示せよ.

予想が正しかったかどうかは,表示する必要はない.また予想が当っていたかどうかは,本課題の採点に影響しない.

プレイヤーの前に閉じた3つのドアがある.1つのドアの後ろには景品の新車が,2つのドアの後ろには,はずれを意味するヤギがいる.プレイヤーは新車のドアを当てると新車がもらえる.プレイヤーが1つのドアを選択した後,各ドアの後ろに何があるかを知っている司会者が,残りのドアのうちヤギがいるドアを開けてヤギを見せる.

ここでプレイヤーは,最初に選んだドアを,残っている開けられていないドアに変更してもよいと言われる.

プレイヤーはドアを変更すべきだろうか?