[英]How to take user input as function input
我试图让我的函数从用户那里取一个名字,该名字将在执行一个函数时检查该名字是否在白名单中,该函数从具有相同名字的预定义列表中提取信息,但是输入的输入将被处理为函数的字符串,而不是列表的名称。 如何获取输入内容作为列表的名称?
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 = ...
elements = {"hydrogen": ["Hydrogen", "H", "1", "1.0"],
"helium": ["Helium", "He", "2", "4.0"]}
查找变得容易得多。
def print_element(element_name):
element = elements[element_name]
# the rest as written
请注意,您可以清理代码很多:
elements = {"hydrogen": ["Hydrogen", "H", "1", "1.0"],
"helium": ["Helium", "He", "2", "4.0"]}
def print_element(element_name):
element = elements[element_name]
name, symbol, number, mass = element
print(f"""
----------------------
Element Name: {name}
Element Symbol: {symbol}
Atomic Number: {number}
Relative Atomic Mass: {mass}
----------------------""")
userinput = input("-->")
if userinput in elements:
print_element(userinput)
else:
print("Sorry that element cannot be found.")
有多种方法可以使您选择的解决方案起作用( eval
可以做到,但是会带来巨大的安全风险globals()
可以做到,但是会带来很大的性能开销),但是它们都很难看。 从客观上讲,编写丑陋的hack比使用正确的方法更糟糕
您可以评估输入到相应变量的字符串:
printelement(eval(userinput))
其余代码保持不变。
PS:这是一个快速的技巧,使用eval是不安全的。
基本上,您需要获取与用户输入相对应的列表。 使用globals()
:
lst = globals()[userinput]
因此,在您的示例中,如果用户输入'hydrogen'
,则将给出列表hydrogen
。 现在开始打印。
完整的例子 :
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:
lst = globals()[userinput]
printelement(lst)
else:
print("Sorry that element cannot be found.")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.