Nokiaに関係ある事ない事をつらつらと。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
705NKでプログラミング その11
ちょっと長引いてしまいましたが、やっとパケットプランを計算するファンクションとモジュールが完成しました。ただこれだけでは、処理系の部分を作成していないので何も仕事をしてくれません。そこで今回は、実際に処理を行うメイン部分のスクリプトを作成してみたいと思います。と言っても、今まで作成してきたスクリプトに若干手を加えたのみです。それに計算部分をモジュール化してあるので、見た目は今までのスクリプトよりもかえってスッキリしているかもしれません。

import sys
sys.path += ["e:¥¥python"]

import appuifw
import sb_charge

result = 1
while result:

   choice1 = [unicode("ホワイトプラン","utf-8"),
              unicode("オレンジプラン","utf-8"),
              unicode("ブループラン","utf-8"),
              unicode("全てのプラン","utf-8")]

   option = appuifw.popup_menu(choice1,unicode("通話プラン選択","utf-8"))

   if option is not None:

      choice2 = [unicode("携帯ブラウザのみ","utf-8"),
                 unicode("PCサイトブラウザ","utf-8"),
                 unicode("PCサイトダイレクト","utf-8"),
                 unicode("AI接続","utf-8")]

      access = appuifw.popup_menu(choice2,unicode("接続方法","utf-8"))

      if access is not None:

         choice3 = [unicode("パケット数で入力","utf-8"),
                    unicode("バイト数で入力","utf-8")]

         unit = appuifw.popup_menu(choice3,unicode("データ単位","utf-8"))

         if unit is not None:

            if unit == 0:
               data = appuifw.query(unicode("パケット送受信量","utf-8"), "number")
               packet = data
               byte = data * 128 / 1024
            else:
               data = appuifw.query(unicode("データ送受信量(KB)","utf-8"), "number")
               packet = data * 1024 / 128
               byte = data

            if data is not None:

               master = sb_charge.make_packet_master(packet,access)
               i = 0
               temp = 0
               charge = master[0]
               while master[i][2]:
                  if option == master[i][0] or master[i][0] == 0:
                     temp = master[i]
                     if temp[2] < charge[2]:
                        charge = temp
                  elif option == 3:
                     temp = master[i]
                     if temp[2] < charge[2]:
                        charge = temp
                  i = i+1
               cp, pp, ch = charge

               result = appuifw.query(unicode("最適プラン:","utf-8") + "¥n" + pp + "¥n" + str(byte) + "KB" + "¥n" + str(packet) + "pkt" + "¥n" + str(ch) + unicode("円","utf-8"), "query")

 


まず自作モジュールを読み込むために、1行目と2行目のような記述をします。「Pythonプログラミング入門」では、モジュールはメインスクリプトと同じディレクトリにおいておけばOKと書いてありましたが、PyS60ではこんな感じで最初にモジュールが置いてあるディレクトリへPathを通しておく必要があります。この例では、モジュールをe:¥¥pythonに置いてありますので、ここへのPathを通しています。Pathは各自の実行環境に合わせて変更してください。実は最初これを知らなくてモジュールをインポートすることが出来ず、結構はまってしまいました(汗)。5行目では実際に自作モジュールであるsb_chargeをインポートしています。これでモジュールで記述されたファンクションを使用する事が出来るようになります。これ以後ファンクションは、「モジュール名.ファンクション名()」で呼び出します。

スクリプトの流れとしては、まずどの通話プランに対応したパケットプランで計算するかを選択します。通話プランはホワイト、オレンジ、ブルーの各専用パケットプランの他に、全てのパケットプランを対象にすることも可能です。次に接続形態を選びます。最後にデータ量を入力します。データ量は、バイト数、パケット数のどちらからでも計算できるようにしてみました。

処理系の部分ですが、実はこのスクリプトからsb_chargeモジュールへのファンクションコールは、make_packet_masterの1回しかありません。と言うのも前回説明した通り、この1回のファンクションコールにより、上で入力した条件で全てのパケット計算を行い、masterという変数にその値を返しているからです。そのため、仮にパケットプランの追加や削除、内容の変更があったとしても、モジュール側のファンクションを変更すれば良いだけで、メインスクリプト側は全くいじる必要が無いのです。で、ここで何をやっているのかというと、masterに格納された各パケットプランの料金を比較して、一番安いプランを最終的にchrgeという変数に代入する作業を行っています。かなり力技のような気もしますが、他に良い手が思いつきませんでした(汗)。

最終的には、最初に選択した通話プランの中で最も安いパケットプラン、バイト数、パケット数、データ量から算出されたパケット料金が表示されます。

これでモジュール、メインスクリプトの双方が完成しました。完成したスクリプトをアップロードしておきます。試してみたい方は、下記のリンクからダウンロードしてください。FC2はpy形式のファイルがアップロードできないので、txt形式で上げています。ダウンロード後は、エディタなどでファイルの文字コードをutf-8に変換し、拡張子を.txtから.pyに変更したうえで、両方ともe:¥¥pythonに放り込んでください。まぁ、このスクリプトでパケットプランを検討する人は居ないとは思いますが、お約束ということで。※このプログラムは実際のパケットプランとは乖離している場合があります。このプログラムによりいかなる不利益を被ったとしても、当方は一切の責任を負わないものとします。

モジュールファイル(sb_charge.txt)
メインスクリプト(sb_packet01.txt)

それでは早速実機の上で試してみることにします。

nokimani071109_001.jpg

スクリプトを立ち上げると、まず通話プランを聞かれます。ここではオレンジプランを選択してみます。

nokimani071109_002.jpg

次に接続形態を聞いてきます。「携帯ブラウザのみ」を選択してみました。

nokimani071109_003.jpg

データ単位を、パケット単位とバイト単位のどちらで入力するか決定します。バイト単位にしてみましょう。

nokimani071109_004.jpg

データ量を入力します。5MBで計算させてみます。

nokimani071109_005.jpg

計算結果が表示されます。上記の条件では、「パケット定額オレンジ」が最も安いみたいですね。

ちなみにこのスクリプト、最後の結果表示の時に「キャンセル」を押さないと終了することが出来ないので、お気をつけください。

これで一応、目的のスクリプトを作成することができました。まだまだ改良の余地はあるのですが、当面の目標である全てのパケットプランについては網羅することができました。今後はユーザーインターフェースをより使いやすくしたり、通話プランも含めたもう少し複雑な料金計算が出来るようなスクリプトを作ってみたいですね。

さて次回からは、私の苦手なオブジェクト指向について、アレコレ試してみようと思います。
スポンサーサイト

テーマ:Nokia - ジャンル:携帯電話・PHS

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。