如何将用户输入作为函数inpu

2024-06-01 04:32:41 发布

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

我试图让我的函数从用户那里获取一个名称,在执行一个函数之前,该函数将检查该名称是否在白名单中,该函数将从一个预定义的同名列表中打印出信息,但输入的信息将由函数作为字符串而不是列表的名称进行处理。如何让它接受输入作为列表的名称?你知道吗

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


Tags: 函数名称信息列表elementprintatomicuniverse
3条回答

您不应该在全局范围内将元素定义为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()可以做到,但会带来很大的性能开销),但它们都很难看。写一篇难看的文章在客观上比一开始就使用正确的方法更糟糕

基本上,您需要获得一个与用户输入相对应的列表。使用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.")

您可以对相应变量的字符串输入求值:

printelement(eval(userinput))

Rest代码保持不变。你知道吗

注:这是一个快速的黑客,使用eval是不安全的。你知道吗

相关问题 更多 >