首页 > 解决方案 > Python 3 如何询问用户特定输入并拒绝无效输入

问题描述

我有一个关于如何检查用户输入并确保他们返回特定字符串的问题。目前,调用该函数时会询问用户的输入。但是,如果他们选择的字符串不是函数的一部分,else 语句将执行并继续代码。我试图弄清楚如何循环这个函数,直到用户输入函数正在寻找的字符串之一。谁能帮我这个?我是 python 新手,不胜感激。

def dwarf_class_definer(dwarf_class):
    if dwarf_class == "Thane":
        print("'Ahhh Nobility'")
    elif dwarf_class == "Mekanik":
        print("'Interesting a Mechanic'")
    elif dwarf_class == "Ancestrite":
        print("'A spiritualist. I see...'")
    elif dwarf_class == "Prisoner":
        print("'Never met a gen-u-ine 'Last chancer.'")
    elif dwarf_class == "Civilian":
        print("'ehhh a civilian? Wut you doing here?'")
    else:
        print("You aren't choosing a valid class.")
dwarf_class = input("Which Class will you choose?: ")
dwarf_class_definer(dwarf_class)

标签: python-3.x

解决方案


一个 while 循环将继续运行,直到您不再告诉它。您可以看到,当提供预期值时,break 命令将终止 while 循环。与一堆 if 语句相比,字典还可以使您的代码更清晰、更易于维护。

dwarf_classes = {
    "Thane": "'Ahhh Nobility'",
    "Mekanik": "'Interesting a Mechanic'",
    "Ancestrite": "'A spiritualist. I see...'",
    "Prisoner": "'Never met a gen-u-ine 'Last chancer.'",
    "Civilian": "'ehhh a civilian? Wut you doing here?'",
}

while True:
    dwarf_class = input("Which Class will you choose?: ")

    if dwarf_class in dwarf_classes.keys():
        print(dwarf_classes[dwarf_class])
        break

    print("You aren't choosing a valid class.")

例子:

$ python3 so.py 
Which Class will you choose?: Python!
You aren't choosing a valid class.
Which Class will you choose?: Prisoner
'Never met a gen-u-ine 'Last chancer.'

推荐阅读