从输入字符串中获取变量名而不使用elif语句

2024-05-16 20:50:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python3.4.3编程还很陌生,但我已经开始了我的第一个项目,它将帮助我成为一名化学家。我创建了一系列代码,要求用户输入一种化学物质的名称(例如水或乙醇),然后返回该化学物质的化学性质列表。我的代码在下面。我省略了我硬编码的化学数据,以便于阅读。你知道吗

print ("Welcome to [program name]! Copyright (C) 2015 [name omitted] All Rights Reserved.")

print ("----" * 4)

class Chemical():

    def __init__(self, data):
        self.data = data

    def getData(self):
        return self.data 

chemical1 = Chemical("Data\nData\nData\n")
chemicalName = input("Choose a chemical: ")
if chemicalName == "chemical1":
    print (chemical1.getData())
elif chemicalName == "Other chemical name":
    # I now have a lot of elif statements, to account for all possible chemicals
    print (other_chemical.getData())
else:
    print ("\nThe chemical you chose hasn't been added yet\n")

当执行时,如果输入是化学的,那么将产生:

data
data
data

基本上,我有一个巨大的化学品列表,其中的数据硬编码到脚本中,还有大量的elif语句来解释每种化学品(现在有26种化学品)。整个程序运行得很完美,但我想减少elif语句的数量,以减少代码行的数量。可能是通过编写for循环或其他表达式,就像我的一个有Python经验的朋友建议的那样。我还是个初学者,所以我不确定所有不同的方法。你知道吗

我试过这个:

chemicalName = input("Choose a chemical: ")

print (chemicalName.getData())

但当我运行脚本时,出现了一个错误,上面写着:

Traceback (most recent call last):
File "C:\Users\john\Desktop\test.py", line 42, in <module>
print (chemicalName.getData())
AttributeError: 'str' object has no attribute 'getData'

这个想法是,当我输入一种化学物质,例如chemical2,我想把chemicalName直接放入print (chemicalName.getData()),值为chemical2,然后打印我为chemical2 = Chemical("Data\nData\nData")输入的数据

我不确定我现在能做什么。为了给大家一个想法,我有大约150行代码和所有的elif语句,所以任何想法或反馈都是非常受欢迎的。你知道吗


Tags: 数据代码nameselfdataprintelif化学物质
1条回答
网友
1楼 · 发布于 2024-05-16 20:50:45

你可以用字典这样工作

class Chemical():
    def __init__(self, name, blah1, blah2):
        self.blah1 = blah1
        self.blah2 = blah2

chemicals = {}
chemical1 = Chemical("chemical1", "Data", "Data")
chemicals[chemical1.name] = chemical1
chemicalName = input("Choose a chemical: ")
if chemicalName in chemicals:
    print (chemical1.name + chemical1 + blah1 + chemical1.blah2)
else:
    print ("\nThe chemical you chose hasn't been added yet\n")

相关问题 更多 >