在Python中验证用户输入字符串

时间:2013-05-19 13:18:20

标签: python string validation input

所以我搜索了“string”,“python”,“validate”,“用户输入”等字样的每一个排列,但我还没有找到一个适合我的解决方案

我的目标是提示用户是否想要使用字符串“yes”和“no”启动另一个事务,我认为字符串比较在Python中是一个相当简单的过程,但是有些东西不是工作正常。我使用的是Python 3.X,因此根据我的理解,输入应该在不使用原始输入的情况下接受字符串。

即使输入“是”或“否”,程序也会始终回复无效输入,但真正奇怪的是每次输入字符串>长度为4个字符或int值,它将检查为有效的正输入并重新启动程序。我还没有找到获得有效负面投入的方法。

endProgram = 0;
while endProgram != 1:

    #Prompt for a new transaction
    userInput = input("Would you like to start a new transaction?: ");
    userInput = userInput.lower();

    #Validate input
    while userInput in ['yes', 'no']:
        print ("Invalid input. Please try again.")
        userInput = input("Would you like to start a new transaction?: ")
        userInput = userInput.lower()

    if userInput == 'yes':
        endProgram = 0
    if userInput == 'no':
        endProgram = 1

我也试过

while userInput != 'yes' or userInput != 'no':

我非常感谢不仅帮助解决我的问题,而且如果有人有任何关于Python如何处理字符串的更多信息,那将是非常好的。

如果其他人已经问过这样的问题,请提前抱歉,但我尽力搜索。

全部谢谢!

〜戴夫

2 个答案:

答案 0 :(得分:9)

您正在测试用户输入 yes还是no。添加not

while userInput not in ['yes', 'no']:

如此快一点,更接近你的意图,使用一套:

while userInput not in {'yes', 'no'}:

您使用的是userInput in ['yes', 'no'],如果True等于userInput'yes',则为'no'

接下来,使用布尔值设置endProgram

endProgram = userInput == 'no'

由于您已经确认userInputyesno,因此无需再次测试yesno来设置您的旗帜变量

答案 1 :(得分:1)

def transaction():

    print("Do the transaction here")



def getuserinput():

    userInput = "";
    print("Start")
    while "no" not in userInput:
        #Prompt for a new transaction
        userInput = input("Would you like to start a new transaction?")
        userInput = userInput.lower()
        if "no" not in userInput and "yes" not in userInput:
            print("yes or no please")
        if "yes" in userInput:
            transaction()
    print("Good bye")

#Main program
getuserinput()