python

Pythonの無名関数で再帰

やたーPythonの無名関数で再帰出来たよー(^o^)ノ import sys, new for i in xrange(10): print i, (lambda n: n if n <= 1 else new.function(sys._getframe().f_code, globals(), None, None, None)(n - 1) + new.function(sys._getframe().f_code, globals(…

プロセスを一時停止/再開するプログラム

プロセスを一時停止/再開するプログラムをPythonで書いた。標準ライブラリのみで行いたかったのでpywin32などサードパーティー製のライブラリは使用していない。 プロセスを一時停止/再開させる(ドキュメント化された)Windows APIは残念ながら存在しないので…

Delphi互換の擬似乱数生成コード

ちょっと必要になったのでDelphi互換の擬似乱数を生成するプログラムを書いた。 Linear congruential generator - Wikipediaを参考にした。 class DelphiRandom: def __init__(self, seed=0): self.seed = seed def __call__(self, max): self.seed = (self.…

再帰下降構文解析による数式の評価

再帰下降構文解析を用いて数式を評価するプログラムを書いた。四則演算と括弧の使用ができる。演算子の優先順位は通常通り。以下にソースコードを示す。 ExpressionEvaluaterはクラスではなく関数にしても良いかもしれない。 #!/usr/bin/env python # coding…

PythonでGUIDを生成する

PythonでGUIDを生成する方法。 標準ライブラリのuuidモジュールを使えば良い。 >>> import uuid >>> str(uuid.uuid4()) '4155f6f5-fa9e-4669-87a1-7ee43a4a70c5'

Google App Engineでエラーが

久しぶりにGoogle App Engineでdev_appserver.pyを起動すると以下のようなエラーが出た。 INFO 2009-10-21 00:00:00,375 py_zipimport.py:108] zipimporter('C:\\Python25\\lib\\site-packages\\simplejson-2.0.9-py2.5-win32.egg', 'simplejson\\') Traceba…

Pythonでバイトコードを書き換える

Pythonでバイトコードを書き換える方法。co_codeがreadonlyなのでcodeオブジェクトをわざわざ作り直している。 以下の例では乗算を累乗に変更している。 import new import opcode def hoge(n): return 2 * n hoge(16) #=>32 piyo = hoge.func_code.co_code.…

htmlentitydefs

こんなモジュールがあるのか。 >>> import htmlentitydefs >>> htmlentitydefs.name2codepoint['copy'] 169 >>> htmlentitydefs.codepoint2name[ord('&')] 'amp'

turtleモジュールでturtle graphics

面白い。

PythonでBrainfuckコンパイラ

PythonでBrainfuckコンパイラを書いた*1。MS-DOS上で実行可能な.COMファイルを出力する。32ビットWindows上で動くはず。 helloworld++++++++>+++++++++++>+++++.>++.+++++++..+++.>-.------------.+.">*2がコンパイル/実行出来ることは確認した。 最適化など…

str.endswithには配列も指定できる

Pythonのstr.endswithには配列も指定できることを知った。 path.endswith(('/','\\'))

様々な書き方

変数pathが、使用しているOSのファイルパスの区切り文字で終わっていなければ区切り文字を終端に付加するプログラム。 import os # 1 if path.endswith(os.path.sep): path += os.path.sep # 2 path += os.path.sep if path.endswith(os.path.sep) else '' #…

__new__

Python 2.6.3 (r263rc1:75186, Oct 2 2009, 20:40:30) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> class Hoge(object): ... def __new__(self): ... return 0 ... >>> Hoge() 0

テンパズルを解く

テンパズルを解くプログラムをPythonで書いた。 C:\>make10.py 1 1 5 8 8/(1-(1/5)) time: 0.0699999332428 sのように使う。CPython 2.6で動作を確認した。 仕組みはいたって簡単で、後置記法の式を生成し計算して演算結果が10なら挿入記法に変換して表示す…

GAEのURL FetchでUser-Agentを指定する

Google App EngineのURL FetchでUser-Agentを指定する方法。 from google.appengine.api import urlfetch urlfetch.fetch('http://taruo.net/e/', headers={'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.0.10) Gecko/2009042316 Fir…

PythonでMessageBox

PythonでWin32 APIのMessageBoxを呼ぶ。 pywin32が必要。 呼び出しにはwin32apiモジュールを、定数値にはwin32conモジュールを使う。 import win32api import win32con win32api.MessageBox(0, u"これはめっせーじぼっくすのてすとです!", u"てすと", win32…

Pythonでバージョンが3以降であることを判別する

Pythonでバージョンが3以降であることを判別する方法。 sys.version_info >= (3, 0, 0) 3であること(3より上のバージョンは含めない)を判別するには以下のようにすればよい。 (4, 0, 0) > sys.version_info >= (3, 0, 0)

日付とUnix Timeの相互変換

RCE関連を扱うと言っておきながら早速別の話題だが気にしない。 Pythonで日付とUnix Timeの相互変換をする。 >>> import time >>> # 日付 -> Unix Time >>> time.mktime((2009,04,25,16,15,0,0,0,0)) 1240643700.0 >>> # Unix Time -> 日付 >>> time.localti…