我对Python相当陌生,我刚刚开始使用类。我想做一个化学计算器(计算摩尔质量,浓度等)。我希望到目前为止一切都正确。我的问题是:(希望我能正确表达自己的观点)如何通过用户输入调用类实例化?

我有以下课程:

class Elements:
def __init__(self, name='',atomic_mass=0.0):
    self.name = name
    self.atomic_mass = atomic_mass


并且我(希望我正确地说明了这一点)将其实例化为:

nitrogen = N = Elements('Nitrogen', 14.01)


我写了nitrogenN是因为我想知道用户输入是否想将其命名为nitrogenN。另外,这是最好的方法吗?我对所有元素及其几乎所有属性都已经完成了一半。

现在,对于我自己,我可以做:print(N.atomic_mass),我会得到14.01
关于我的问题,我将如何实现以下目标:

element_name = input('Insert element name: ')
print(element_name.atomic_mass)


然后获得想要的值。我需要这样做是因为如果我想通过用户输入来计算分子的质量,则有必要将字符串拆分,找到元素并将其链接到属性。

我已经尝试过this,但是它没有用。
我知道我可以做到:

if element_name == 'N':
print(N.atomic_mass)


但是,对于周期表的118个元素必须执行此操作似乎很多。我可以做到,但我相信必须有一个更好,更轻松的方法。

甚至可以按照我的要求做吗?谢谢。

最佳答案

代替每个元素的类实例,可以使用dict
(顺序并不重要,因为“ dict”不保留顺序)
该字典可以直接保存值,也可以保存Element实例

elements = {
    'Nitrogen': 14.01,
    'Carbon': 12.0,
    ...
}


要么

elements = {
    'Nitrogen': Element('Nitrogen', 14.01),
    ...
}


然后,您可以通过以下方式使用它:

element_name = input('Insert element name: ')
print('atomic mass:', elements[element_name])


注意:如果用户输入无效的元素,这可能会引发KeyError,因此您可以添加错误检查

element_name = input('Insert element name: ')
try:
    print('atomic mass:', elements[element_name])
except KeyError:
    print('the element does not exist')

10-04 13:00
查看更多