我试图让我的函数从用户那里获取一个名称,在执行一个函数之前,该函数将检查该名称是否在白名单中,该函数将从一个预定义的同名列表中打印出信息,但输入的信息将由函数作为字符串而不是列表的名称进行处理。如何让它接受输入作为列表的名称?你知道吗
hydrogen = ["Hydrogen", "H", "1", "1.0"]
helium = ["Helium", "He", "2", "4.0"]
universe = ["hydrogen", "helium"]
elementname_print = "Element Name: "
elementsymbol_print = "Element Symbol: "
atomicnumber_print = "Atomic Number: "
relativeatomicmass_print = "Relative Atomic Mass: "
def printelement(element):
print(f" \n-------------------------")
print(elementname_print + element[0])
print(elementsymbol_print + element[1])
print(atomicnumber_print + element[2])
print(relativeatomicmass_print + element[3])
print("-------------------------")
userinput = input("-->")
if userinput in universe:
printelement(userinput)
else:
print("Sorry that element cannot be found.")
结果:
--->;氢气
元素名称:h
元素符号:y
原子序数:d
相对原子质量:r
您不应该在全局范围内将元素定义为
hydrogen = ...
,而应该在按名称键入的字典中定义它们。你知道吗这样查找就变得容易多了。你知道吗
请注意,您可以对代码进行大量清理:
有一些方法可以让您选择的解决方案工作(
eval
可以,但会带来巨大的安全风险。globals()
可以做到,但会带来很大的性能开销),但它们都很难看。写一篇难看的文章在客观上比一开始就使用正确的方法更糟糕基本上,您需要获得一个与用户输入相对应的列表。使用
globals()
:因此,在您的示例中,如果用户在
'hydrogen'
中键入,这将给出列表hydrogen
。现在开始打印。你知道吗完整示例:
您可以对相应变量的字符串输入求值:
Rest代码保持不变。你知道吗
注:这是一个快速的黑客,使用eval是不安全的。你知道吗
相关问题 更多 >
编程相关推荐