2012-05-01から1ヶ月間の記事一覧

print文以外の文字化けについて

今回はPython2.7でprint文以外で発生する日本語の文字化けについて書きたいと思います。 print文での文字化けについては以前書いたので以下の記事を参考にしてみてください。 Pythonの日本語の扱い - 主にプログラムを勉強するブログ Pythonで日本語が文字化…

doctestの実行方法について

前回のエントリでdoctestの実行方法についてコメントで教えていただいたので新たに書き直しました。まず昨日のエントリで私が書いていたコードは def main(initial=u"あ", inputsource=multi_input_reader()): u""" 正常パターン >>> main(inputsource=[[u"…

マルチスレッドはてなキーワードしりとりのdoctestを書いてみました

先日の記事に対して「標準出力のテストにはunittestよりdoctestのほうがいいよ」と教えていただいたのでdoctestを書いてみました。書いていて気づいた点なのですが、doctest内でunicode型文字列を使いたい場合、docstring自体をunicode型にしておく必要があ…

マルチスレッドはてなキーワードしりとりを改造・その4

前回のコードではmulti_input_reader関数がmain関数のローカル変数である"usedwords"を引数としていたためmainとmulti_input_readerの分離が悪い、と書いていましたが、この問題への対処としてmulti_input_reader関数は引数を取るのをやめ入力の受付のみに特…

マルチスレッドはてなキーワードしりとりを改造・その3

先日のコードに頂いたコメントを参考に一部を書き直しました。今回最大の変更点は入力を受け付けるmulti_input_reader関数をジェネレータにし、従来main関数に書いた"while True"で行なっていた全体のループをこのジェネレータで管理するようにしました。 そ…

マルチスレッドはてなキーワードしりとりを改造・その2

前回のコードではshiritori.Furiganaクラスのインスタンス作成を子スレッドで行なっていたのですが子スレッドで発生した例外は親スレッドのtry文では受け取れないことが分かったのでこの処理は親スレッドで行うように変更しました。 この処理を含め、スレッ…

マルチスレッドはてなキーワードしりとりを改造・その1

まず先日書いたコードはしりとりの最重要ルールの一つである「同じ単語は二度使えない」ルールを判定するための処理を丸々書き忘れていました(^_^;) 文字通り「忘れていた」んですが入力を受け付ける部分も関数ではなくクラス化して継承すればそういったミス…

マルチスレッドはてなキーワードしりとりを作ってみました

前回のエントリまでに書いていたはてなキーワードしりとりは という処理だったのでAPIからのXMLを待つ時間が長くなってしまっていました。 APIに問い合わせて返答を待つ時間はローカルのみで処理するほかの処理と比べて時間がかかるからです。そこでこれを解…

はてなキーワードしりとりを改造・その7

その6のコードには昨日、一昨日の記事に書いていたイミュータブルな型の継承に関する間違いがあったのでそれを修正しました。 また例外が発生した際に従来は「この単語ははてなキーワードに登録されていませんでした。」というような表記だったのですが「『…

immutableな型のカスタマイズについて

(5/16追記。このエントリの結論は違っていました。コメント欄をご覧ください。)昨日の記事でunicodeクラスを親として作成したクラスが思い通りに動かなくて嵌っていると書いたのですが、これは 「unicode型がイミュータブルだから」 ということのようです。i…

unicodeクラスの継承は特殊?

unicodeクラスを継承したクラスの挙動で嵌っていることがあるので書いてみようと思います。 下のようなunicodeクラスを継承したTestというクラスを作ります。xという引数が1つだけありインスタンスが作成されると同時にそれを表示するというクラスです。この…

はてなキーワードしりとりを改造・その6

先の記事で「例外処理をクラスにする意義がわかった」なんて書いてしまったのですが分かっていませんでした(^_^;) それどころか大きな勘違いをしており先のコードには致命的な間違いがありました。 またクラス変数についても重大な勘違いをしているところが…

はてなキーワードしりとりを改造・その5

前回書きなおした例外処理ですが、せっかく専用の例外クラスを作成したにも拘らずどの例外が発生したかを判別する処理がクラスの外(main関数)にあるという本末転倒になっていたので再度書きなおしました。 自分でもどうもしっくりこないと思いながら書いては…

はてなキーワードしりとりを改造・その4

記事にも書いていましたが前回のコードは例外処理があまりにも煩雑だったので改めて例外処理を書きなおしました。どうすればすっきり分かりやすくて且つ期待通りの例外処理ができるかを考えるためにまず処理したい例外を整理します。 入力された単語が既に使…

はてなキーワードしりとりを改造・その3

前回のコードは処理の流れ自体はほぼ満足のいくものだったのですが、main関数に直接記述している処理が多かったのでそれを減らすように書き直してみました。 コードがかなり長くなってしまったので今回はエントリの最後にコードを載せています。前回のコード…

はてなキーワードしりとりを改造・その2

前回のエントリに引き続きコメントでご教示いただいた内容を元にコードを書きなおしてみました。 # coding: utf-8 import urllib import urllib2 from xml.dom.minidom import parse def input_reader(text): """入力を受け取ってunicodeオブジェクトにして…