基本問題(1)

[ edit ]

*


概要

[ edit ]

  • 基本
    課題
    (1)

    辞書タプル文字列の書式化

    (1a)

    新幹線の運賃を検索する

    BP_04_001a_price_table.py

  • 東海道新幹線が停車する,東京から新大阪までの異なる二駅を入力し,自由席を利用した場合の料金を求めてください
    • 料金は,運賃と特急料金の和です.
  • 東海道新幹線(のぞみ)料金表

    東京

    品川

    新横浜

    名古屋

    京都

    新大阪

    東京

    品川

    170

    新横浜

    500

    410

    名古屋

    6260

    6260

    5620

    京都

    8210

    8210

    7880

    2590

    新大阪

    8750

    8750

    8420

    3350

    560

    • 特急料金(自由席)

    東京

    品川

    新横浜

    名古屋

    京都

    新大阪

    東京

    品川

    860

    新横浜

    860

    860

    名古屋

    4100

    4100

    4100

    京都

    4870

    4870

    4540

    2480

    新大阪

    4870

    4870

    4870

    2480

    860

*


ヒント

この課題で使うPythonの機能 (学習のヒント)

[ edit ]

  • この課題で使うPythonの機能 (学習のヒント) ...
    • 辞書

    • タプル

    • 文字列の書式化

    • モジュール
      • import モジュール名
        • モジュール名は,ファイル名から拡張子.pyを除いたもの
        • モジュール内の関数は,「モジュール名.関数名(...)」で呼び出すことができる
      • import モジュール名 as 短い名前
        • モジュール名を「短い名前」で置き換えることができる
    • 変数のスコープ (有効範囲)
      • 大域変数 (グローバル変数)
        • 関数外で,関数の実行前に,初期化(代入)されている変数
          • 関数内で,値を参照することができる
            • 値を参照するだけなら,global宣言は不要
          • 関数内で,代入により,値を変更し,それを外部に反映させるには,global宣言が必要
            • global 変数名, ...

      • 局所変数 (ローカル変数)
        • 関数内で,変数が,初期化(代入)されるとローカル変数として扱われる
          • ローカル変数は,関数内部だけを有効範囲とするので,関数の実行が終わると自動的になくる
        • 関数内で,「外部で使われている変数(すなわち大域変数)」と同名の変数が,初期化(代入)されるとローカル変数として扱われる
          • ローカル変数は,関数内部だけを有効範囲とするので,関数の実行が終わると自動的になくなり,その変数の値は外部に反映されない
          • 関数内で,先に「値の参照」していたとしても,初期化(代入)がなされると,ローカル変数ということになる
            • そのため,「値の参照」していたこと自体が,実行時エラー(代入前に参照)を引き起こす
    • その他

この課題の解き方 (問題解決のヒント)

[ edit ]

  • この課題の解き方 (問題解決のヒント) ....
    • 二重リストで,乗車駅から下車駅までの料金表を表現します.

    • 駅名から駅名ID (二重リストのアクセスの際の添え字に相当します)の変換に,辞書を使いましょう

この課題の解き方 (実装上のヒント)

[ edit ]

  • 本体であるモジュール

    BP_04_001a_price_table

    穴埋め

    テストドライバモジュール

    BP_04_001a_price_table_test

    完全に配布

    料金表の表示モジュール

    BP_04_001a_price_table_print

    完全に配布

  • 三つのモジュールに分けます
    • 本体である BP_04_001a_price_table モジュール
      • ここに「穴埋め」課題があります.
      • 料金表をきれいに表示するための BP_04_001a_price_table_print をインポートしています
      • テストドライバである BP_04_001a_price_table_test.py モジュールから呼び出されます
    • テストドライバである BP_04_001a_price_table_test.py
      • 本体である BP_04_001a_price_table.py をインポートしています
        • 本来,本体モジュールに含めてもよかったのですが,下請け関数の数が増えたので分離しました
      • 実行は,このモジュールで行います.
        • このモジュールに含まれているテストが実行できるように本体を書き換えて(本体の穴埋めをして)ください
      • この内容は配布します
    • 料金表を,きれいに表示する BP_04_001a_price_table_print モジュール
      • 本体である BP_04_001a_price_table モジュールから呼び出されます
        • 本来,本体モジュールに含めてもよかったのですが,下請け関数の数が増えたので分離しました
      • この内容は配布します
      • 簡易表示だけだと簡単なのですが,ちょっときれいに表示しようとすると途端に行数が増えてしまいます.
*


実行例

[ edit ]

  • 実行例(1) ... クリックすると拡大します

fig-01

*


プログラム例: 本質的な部分 (授業中に順次公開します)

*


高度な話題 (授業中,もしくは授業後に順次公開します)

[ edit ]

  • 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします

    • (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).


プログラム例: 配布コード (授業中に順次公開します)

*

*

SoftEng: Python/Prog/Practice/Basic/04/BP_001a (last edited 2018-11-06 14:55:32 by TadashiIijima)