1import math
23classCoordinate():4def__init__(self, x, y, z):5 self.x = x
6 self.y = y
7 self.z = z
89defcompute_distance(self, other):10 dx = self.x - other.x
11 dy = self.y - other.y
12 dz = self.z - other.z
13return math.sqrt(dx**2+ dy**2+ dz**2)1415def__str__(self):16return'x: {0}, y: {1}, z:{2}'.format(self.x, self.y, self.z)1718defcompute_distance(coord1, coord2):19return coord1.compute_distance(coord2)2021defmain():22withopen('data.txt')as f:23 coord_dict ={}2425for line in f:26 elems = line.split()2728 key = elems[0]29 values =list(map(float, elems[1:]))3031 coord_dict[key]= Coordinate(*values)3233if key =='E':34print('-'*50)35print('A to B', compute_distance(coord_dict['A'], coord_dict['B']))36print('A to D', compute_distance(coord_dict['A'], coord_dict['D']))37print('A to E', compute_distance(coord_dict['A'], coord_dict['E']))3839if __name__ =='__main__':40 main()4142"""出力
43--------------------------------------------------
44A to B 5.744562646538029
45A to D 7.734339015067804
46A to E 4.464302857109943
47--------------------------------------------------
48A to B 5.138093031466052
49A to D 6.833739825307955
50A to E 6.8527366796047255
51"""
NumPyを使ったらもっと楽になりそうですが。
Python
1import numpy as np
23defmain():4withopen('data.txt')as f:5 coord_dict ={}67for line in f:8 elems = line.split()910 key = elems[0]11 values = np.array(elems[1:], dtype=np.float)1213 coord_dict[key]= values
1415if key =='E':16print('-'*50)17print('A to B', np.linalg.norm(coord_dict['A']- coord_dict['B']))18print('A to D', np.linalg.norm(coord_dict['A']- coord_dict['D']))19print('A to E', np.linalg.norm(coord_dict['A']- coord_dict['E']))2021if __name__ =='__main__':22 main()2324"""出力
25--------------------------------------------------
26A to B 5.74456264654
27A to D 7.73433901507
28A to E 4.46430285711
29--------------------------------------------------
30A to B 5.13809303147
31A to D 6.83373982531
32A to E 6.8527366796
33"""