Nokiaに関係ある事ない事をつらつらと。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
705NKでプログラミング その6
前回はコンソールやダイアログで「Hello World!」を表示してみましたが、これではあまりプログラミングの練習にはならないので、もう少し実用性のあるプログラムを作ってみることにします。と言うことで、今回はバイト数からパケット数とパケット料金を計算する簡単なプログラムを作ってみたいと思います。
実際のプログラミングに入る前に、どんなプログラムにするか考えます。まずダイアログでバイト数を入力すると、パケット数とパケット料金をダイアログで返すという簡単なプログラムにします。パケット数とパケット料金を割り出すために、ちょっとした計算をさせるのですが、1パケットは128バイトなので、単純に入力されたバイト数を128で割ればパケット数が出てきます。パケット料金は、ソフトバンクのパケット割引が無い状態のパケット単価である「0.2円/1パケット」をで計算します。関係無いですが、ホントにソフトバンクのパケット料金は高いですね。これらを踏まえた上で、早速スクリプトを書いてみると…

import appuifw

data = appuifw.query(unicode("データ送受信量(KB)","utf-8"), "number")

packet = data * 1024 / 128

charge = packet * 0.2

appuifw.query(unicode("パケット数:","utf-8") + "¥n"
+ str(packet) + "pkt" + "¥n"
+ unicode("パケット料金:","utf-8") + "¥n"
+ str(int(charge)) + unicode("円","utf-8"), "query")


こんな感じになります。ここで注意。このスクリプトをテキストエディタで書き、「packet.py」など適当な名前を付けて705NKに転送するんですが、その際スクリプトはUTF-8形式で保存してください。でないとエラーが出てスクリプトが正常に実行されません。実は私はそれでしばらくはまりました(苦笑)。

それではプログラムを簡単に解説します。

1行目では、query()ファンクションを使用するために、appuifwモジュールを組み込みます。

2行目では、前回同様query()を利用してダイアログを表示します。表示されるタイプは数字入力用ダイアログです。前回と少し違うのが、数字入力用ボックスに入力された数字を「data」に代入することです。

3行目では、入力された数字からパケット数を算出します。入力される数字はKBなので、まず1024を掛け、それから128で割ります。

4行目では、3行目で算出されたパケット数に0.2を掛けてパケット料金を算出します。

5行目では、再びquery()を使って結果をダイアログ表示させます。ここでワンポイント。算出結果をstr(packet)とか、str(int(charge))とかしていますが、これは何をやっているんでしょう?その前にちょっと文字列の扱いについて説明します。

まずはこれをコンソールで実行してみます。

>>> a=123
>>> b=456
>>> a+b
579


変数aと変数bに代入された数字が加算されます。

またPythonの特徴として、文字列にも演算子を利用できることがあげられます。

>>> a="noki"
>>> b="mani"
>>> a+b
'nokimani'


「+」演算子を利用すると、このように2つの文字列を結合することができます。

しかし次の例ではエラーとなってしまいます。

>>> a=123
>>> b="abc"
>>> a+b

Traceback (most recent call last):
File "", line 1, in
a+b
TypeError: unsupported operand type(s) for +: 'int' and 'str' undefined


これはなぜでしょうか。実は変数aは整数型(int)のデータが格納されており、変数bには文字列型(str)のデータが収められています。つまり、型の違うデータ同士を演算子で結ぶことはできないんです。ではこれを解決するにはどうすればよいのでしょうか?

>>> a
123
>>> str(a)
'123'


これは内部ファンクションのstr()を使用することにより解決することができます。上記の例では、変数aには整数型のデータが格納されているために、普通にaを表示させるとクオーテーション無しの数字が表示されます。そこでstr(a)とすると、変数aの数字が文字列に変換されるので、クオーテーションつきの数字が表示されます。ということで、str()を使うと…

>>> a=123
>>> b="abc"
>>> str(a)+b
'123abc'


今度はちゃんと表示されました。

int()も内部ファンクションで、これは整数型に変換することができます。

>>> a=123.9999
>>> a
123.9999
>>> int(a)
123

変数aには実数が格納されていますが、int(a)とすることで、その整数部分を取り出すことができます。

と言うことで説明はこのくらいにして、実際に705NKで動かしてみましょう。いつも通りPythonを起動して、「Run Script」でスクリプトを実行させます。

nokimani071030_001.jpg

まずバイト数を入力するダイアログが表示されます。ちなみに単位はKBです。ここでは試しに500KBだとどのくらいになるか入力します。

nokimani071030_002.jpg

結果もダイアログで表示されます。パケット数は4000パケット、パケット料金は800円になるそうです。

無事スクリプトが動きました。このようにダイアログは、ユーザーからのデータを入力したり、結果を表示したり、と手軽に使用することが出来るので便利ですね。
スポンサーサイト

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

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