Nokiaに関係ある事ない事をつらつらと。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
705NKでプログラミング その9
前回までにパケット料金を計算するスクリプトを書いてきましたが、比較するパケットプランが、「パケット割引プラン無し」と「パケットし放題」の2つしかないために、あまり楽しくありません。そこで、ソフトバンクの全てのパケットプランを比較するスクリプトを書いてみたいと思います。特に今回のスクリプトでは、パケット計算の部分には思い切ってオリジナルのモジュールとファンクションを書いてみたいと思います。とは言っても、他のプログラミング言語と同様、特に難しいことはありません。モジュールやファンクションに関する詳しい説明は、下記の書籍を参考にしていただいた方が分かりやすいと思います。

Pythonプログラミング入門Pythonプログラミング入門
(2007/03)
柴田 文彦

商品詳細を見る

しかしこの本はとても分かりやすくて良いですね。私みたいなプログラミングド素人でも、何とかスクリプトらしきモノが書けるんですから(笑)。それはともかく、今回のお題に入ることにします。

と、その前に、ソフトバンクのパケットプランって全部でいくつくらいあるんでしょうか?スクリプトを書くに当たって、実際にどんなパケットプランがあるか把握しておく必要があるので、試しにピックアップしてみます。

「パケットし放題(プラン共通)」
「パケット定額ライト(オレンジプラン専用)」
「パケット定額(オレンジプラン専用)」
「パケット定額(ブループラン専用)」
「パケット定額フル(ブループラン専用)」
「パケット定額Biz(ブループラン専用)」
「パケット10(ブループラン専用)」
「パケット30(ブループラン専用)」
「パケット60(ブループラン専用)」
「パケット90(ブループラン専用)」

これに「パケット割引プラン無し」の計11もの料金体系が存在することになります。結構ありますね。まぁ、Docomoやauのコピープランがあるので、仕方が無いと言えば仕方が無いんですが…。

さらに、これらパケットプランに関係することですが、ソフトバンクには4つの通信形態が存在します。

1. 携帯ブラウザでの接続
2. PCサイトブラウザ
3. PCサイトダイレクト
4. AI接続

1の接続方法は普通に携帯用ウェブブラウザでネット接続する場合に使用します。Y!ケータイを利用するブラウザですね。705NKでは「ブラウザ」がそれに当たります。2の接続方法は、俗に言うフルブラウザでネット接続をする場合に使用します。3の接続方法は、XシリーズなどのWindows Mobile機がネット接続する場合に使用します。4の接続方法は、Nokia携帯などがネット接続する場合に使用します。705NKでは、基本的に「ブラウザ」以外の全てのネット接続がAI接続となります。

結果的に、通信形態が変わると、定額プランの上限が変わったり、青天井になったりするんで、パケットプランはますます複雑になってゆきます。と言うことで、パケットプランを全て把握し、どれが安いか判断するのは結構骨が折れますし、この中から自分に最適のパケットプランを選択するのはかなり大変です。とにかくパケットプランの計算は良く使う部分でもあるので、この機会に全てファンクション、モジュール化して、いつでもスクリプトから使えるようにしてしまいましょう。

手始めに、「パケットし放題」を計算するファンクションを書いてみましょう。「パケットし放題」自体は前回までに何度か取り上げたので、そんなに問題は無いと思います。詳しくは「705NKでプログラミング その7」をご覧ください。で、パケット料金を通信形態ごとに整理してみると、

1. 下限980円(12250pkt)、上限4200円(52500pkt)、0.08円/pkt
2. 下限980円(12250pkt)、上限5700円(71250pkt)、0.08円/pkt
3. 下限980円(12250pkt)、上限9800円(122500pkt)、0.08円/pkt
4. 青天井、0.2円/pkt

となります。

一方ファンクションを定義する方法ですが、簡単に言ってしまえば、

def ファンクション名:
    ファンクションを記述
    return 値を返す



という形になります。さて、どんなファンクションにしましょう?とりあえず、パケット数と接続形態を代入すると、パケット料金を計算して値を返してくれるファンクションが良いでしょうか。それを踏まえたうえで、「パケットし放題」をファンクションにするとこんな感じになります。

def packet_shihoudai(packet, acc = 0):

    call_plan = 0
    packet_plan = unicode("パケットし放題","utf-8")

    if acc == 0:
       if packet <= 12250:
          charge = 980
       elif packet >= 52500:
          charge = 4200
       else:
          charge = packet * 0.08
    elif acc == 1:
       if packet <= 12250:
          charge = 980
       elif packet >= 71250:
          charge = 5700
       else:
          charge = packet * 0.08
    elif acc == 2:
       if packet <= 12250:
          charge = 980
       elif packet >= 122500:
          charge = 9800
       else:
          charge = packet * 0.08
    else:
       charge = 980 + packet * 0.2

    return call_plan, packet_plan, int(charge)


ファンクション名はpacket_shihoudaiにしました。括弧の中は、このファンクションに与えられる引数が2つあることを示しています。この場合、packetとaccという2つです。packetの方は言うまでも無くパケット数ですが、accは接続形態の引数です。一応「0」が携帯ブラウザ、「1」がPCサイトブラウザ、「2」がPCサイトダイレクト、「3」がAI接続、と決めています。acc=0としているのは、接続形態の引数が与えられなくても、デフォルトで0を引数とすることを表しています。

制御は前回同様if文を使って記述します。それぞれの通信形態0~3について計算式を作りましたが、そんなに難しくはないはずです。これで、与えられたpacketとaccを元にパケット料金を計算して、結果をchargeという変数に代入してくれます。

最後にreturenで計算結果を返しますが、Pythonの特徴として、複数の値を返すことができることが挙げられます。ここでは3つの値を返しています。call_planは、通話プランの意味で、「0」がホワイトプラン、「1」がオレンジプラン、「2」がブループランとしています。これは、出力結果を「オレンジプランのみ」とか「ブループランのみ」とかで絞り込む際に利用するために付加しました。packet_planはその名の通り、パケットプランの名前が入っています。この場合は「パケットし放題」です。なぜこんなことをするのかと言うと、計算結果の値のみ返されても、それが何の値なの分かりづらいからです。ちなみに出力結果は

(0,パケットし放題,980)

のように、タプル型で返されます。

随分長くなってしまいました。今回はこのくらいにして、次回は全プランのファンクションを完成し、それをモジュールにしたいと思います。

スポンサーサイト

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

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