開発環境
- 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 コメント:
コメントを投稿