Lightweight Language Lovers

PythonとRubyを比較してみる(Pythonによるコーディング その2)

文字列を文字の連続したものと考え、「文字」と「文字のコンテナ」に分離します。
シフトJIS1文字(英数字または漢字) を表すクラス SjisChar を新たに定義し、
SjisChars は、SjisChar が格納されたコンテナをエミュレートします。

SjisChars(3〜14行目)

SjisChar(16〜29行目)

   1 # -*- coding: cp932 -*-
   2 """ Handle SJIS charcters"""
   3 class SjisChars:
   4 
   5         def __init__(self, s):
   6                 self.s = s
   7 
   8         def __iter__(self):
   9                 a = [c for c in self.s]
  10                 while a:
  11                         c = SjisChar(a.pop(0))
  12                         if c.isKanji:
  13                                 c.setByte2(a.pop(0))
  14                         yield c
  15 
  16 class SjisChar:
  17 
  18         def __init__(self, c):
  19                 self.value = c
  20                 d =ord(c)
  21                 self.isKanji = ((0x81 <= d <= 0x9F) or (0xE0 <= d <= 0xFC))
  22                 self.isKisyu = (d in (0x87, 0xED, 0xEE, 0xFA, 0xFB, 0xFC))
  23                 self.isGaiji = (0xF0 <= d <= 0xF9)
  24 
  25         def __repr__(self):
  26                 return c.value
  27 
  28         def setByte2(self, c):
  29                 self.value += c
  30 
  31 
  32 if __name__ == '__main__':
  33         for c in SjisChars("abcd漢字外字機種依存"):
  34                 print c, c.isKanji , c.isKisyu, c.isGaiji

次こそRubyで実装してみましょう。 --> ../Ruby


CategoryPython CategoryRuby

PythonVsRuby/Python2 (last edited 2007-12-10 08:45:56 by ymd)