2012-01-31 14 views
3

入力した乱数を検証したい場合があります。ヨーロッパの各国はあらかじめ定義されたフォーマットを持ち、入力された数字を検証するための正規表現パターンを作成することができます。乱数の検証を処理するPythonicの方法

私の質問は、20カ国でこれを処理する最も「ピジョンソニック」な方法です。私は、国とそのパターン

VAT_PATTERNS = { 
    'ES': '([A-Z0-9][0-9]{7}[A-Z0-9]$)', 
    'DE': '([0-9]{9}$)', 
} 

以上の神託の方法があるのそれぞれに辞書を作成する必要がありますか?

複数の国が同じパターンを持つ場合があります。また、複雑なパターンを持つ国もあります。

各国のクラスが継承し、それを処理するところからVAT基底クラスを作成することはできましたが、それは少し外れているようです。

+1

明確にするために、VATは「付加価値税」で、一種の売上税(カナダや米国などでは見られない、少なくともこのように言われていない)です。この番号は、収集した税金を政府に提出する際に使用される事業者の登録番号です。 –

答えて

5

"PythonのZen"(インタプリタにimport thisタイプ)の一部は、 "明示的には暗黙的に優れている"と "シンプルは複合的に優れています"ということです。

あなたが説明したことは、シンプルで明示的に見えるので、私はそれをかなりピジョンソニックと考えます。

1

は(私はこのような質問に対する本当の答えがあるかわからない - 。「神託」だと何まだ多くの個人 味、私見に影響されていないものを は、しかし、あなたはそれを求めることから、ここです私のテイク)

Zen of Pythonは言う:。

明示的、暗黙よりも優れています。 シンプルは複合体より優れています。

だから、あなたのケースでは、私はVATパターンにマッピングする国は、あなたが提案する として、最も簡単で明確なソリューションであるため、 最も「神託」1ことを言うと思います。

+2

"実装が説明しやすい場合は、良い考えかもしれません。"部分も関連しています! – dbr

1

向上するための唯一の場所は、共有パターンを説明的な名前(たとえばVAT_PATTERN_WESTERN_EUROPEのような名前)で名前を付けた変数に格納し、マップ値に使用することです。

しかし、これは変わることはまずありませんし、もしそうであれば、同時にすべての国で変更されることはありません。値の定数式としてそのまま残す方が良いでしょう。

0

あなたのソリューションは素晴らしいと思います。シンプルで明示的。

VAT_PATTERNS = { 
    'ES': '([A-Z0-9][0-9]{7}[A-Z0-9]$)', 
    'DE': '([0-9]{9}$)', 
} 
VAT_PATTERNS['IT'] = VAT_PATTERNS['UK'] = VAT_PATTERNS['ES'] 

あるいは短い:

;(事実上正確ではありません申し訳ありませんが、私はカナダ人だ)あなたはスペイン、イタリアと仮定すると、このような何かを行うことにより、重複を減らすことができ、そして英国は、すべて同じVATを使用します
VAT_PATTERNS = { 
    'ES': '([A-Z0-9][0-9]{7}[A-Z0-9]$)', 
    'DE': '([0-9]{9}$)', 
} 
V = VAT_PATTERNS # I like to use a short alias for speed 
V['IT'] = V['UK'] = V['ES'] 
del V 
関連する問題