開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python (プログラミング言語)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の12章(各種ツール)、12.7(練習問題)、12-19.を解いてみる。
12.7(練習問題)、12-19.
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- import re def readMolecule(r): line = r.readline() if not line: return None try: key, name = line.split() except: raise Exception('分子名の行が欠けている') if key != 'COMPND': raise Exception("COMPNDの箇所が見つからない") if not name: raise Exception('分子の名前が欠けている') molecule = [name] reading = True i = 1 while reading: line = r.readline() if line.startswith('END'): reading = False i = 1 else: try: key, num, type, x, y, z = line.split() except: raise Exception('ATOMの行が欠けている') if key != 'ATOM': raise Exception('ATOMが見つからない') if int(num) != i: raise Exception('IDが不正') if not re.match(r'^[A-Za-z]+$', type): raise Exception('原子記号が不正') for n in [x, y, z]: if not re.match(r'^(-)?\d+(.)?\d+$', n): raise Exception('座標が不正') molecule.append((type, x, y, z)) i += 1 return molecule if __name__ == '__main__': for file in map(lambda x: 'temp{0}.txt'.format(x), range(1, 10)): print(file) with open(file) as f: try: molecule = readMolecule(f) if molecule == None: break print(molecule) except Exception as err: print(err)
入出力結果(Terminal)
$ cat -n temp*.txt 1 COMPND AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 AMMONIA AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND AMMONIA 2 1 N 0.257 -0.363 0.000 3 ATOM 2 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 1 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 10 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 H H 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 H 0890 5 ATOM 4 H 0.771 -0.727 -0.890 6 END 1 COMPND AMMONIA 2 ATOM 1 N 0.257 -0.363 0.000 3 ATOM 2 H 0.257 0.727 0.000 4 ATOM 3 H 0.771 -0.727 0890 5 ATOM 4 H 0.771 -0.727 H 6 END $ ./sample.py temp1.txt ['AMMONIA', ('N', '0.257', '-0.363', '0.000'), ('H', '0.257', '0.727', '0.000'), ('H', '0.771', '-0.727', '0890'), ('H', '0.771', '-0.727', '-0.890')] temp2.txt COMPNDの箇所が見つからない temp3.txt 分子名の行が欠けている temp4.txt ATOMの行が欠けている temp5.txt IDが不正 temp6.txt 原子記号が不正 temp7.txt 座標が不正 temp8.txt 座標が不正 temp9.txt 座標が不正 $
0 コメント:
コメントを投稿