Символ разделителя (|t
) в этой строке неверен:
file = np.loadtxt("data.txt",dtype = "str", delimiter = "|t")
он должен быть (\t
) для представления символа табуляции ( см. docs ):
file = np.loadtxt("data.txt",dtype = "str", delimiter = "\t")
С неправильным разделителем каждая строка читается как отдельный столбец. Вы можете увидеть последствия этого, распечатав значение dict1
, которое показывает, что существует только одна пара ключ-значение:
el_Name = dict1[key]
print(dict1) # print the value of dict1 for debugging/illustration purposes
elem = Element(el_Name, dict1)
output: {'Chemical symbol\tName\tAtomic Number\tAtomic mass\tDensity\tMelting point\tBoiling point\tYear of discovery\tDiscoverer': 'Ac\tActinium\t89\t227.0278\t10.07\t1047\t3197\t1899\tDebierne'}
После исправления разделителя значение dict1 выглядит вот так:
output: {'Chemical symbol': 'Ac', 'Name': 'Actinium', 'Atomic Number': '89', 'Atomic mass': '227.0278', 'Density': '10.07', 'Melting point': '1047', 'Boiling point': '3197', 'Year of discovery': '1899', 'Discoverer': 'Debierne'}
Теперь есть пары ключ-значение для каждого свойства химического вещества.
После исправления вы можете столкнуться с другой проблемой в вашей функции __repr__
. Он перебирает каждое из химических свойств, но возвращается в начале первой итерации l oop, поэтому вы увидите только первое свойство для каждого химического вещества.
def __repr__(self):
for k in self.elementData:
return "|"+ k +' : '+ self.elementData[k]+'\n' # this returns immediately! we only see the first value from self.elementData
Вы можете исправить это создавая свойства одно за другим, затем возвращайтесь за пределы for l oop, например:
def __repr__(self):
s = ''
for k in self.elementData:
s += "|"+ k +' : '+ self.elementData[k]+'\n'
return s
С этими изменениями мой результат выглядит так:
(мне пришлось удалить столбец «Происхождение символа» из-за отсутствующих значений в данных примера)
|Chemical symbol : Ac
|Name : Actinium
|Atomic Number : 89
|Atomic mass : 227.0278
|Density : 10.07
|Melting point : 1047
|Boiling point : 3197
|Year of discovery : 1899
|Discoverer : Debierne