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

Validating user input strings in Python

所以我只搜索了"字符串"、"python"、"validate"、"用户输入"等词的每一个排列,但是我还没有找到一个适合我的解决方案。

我的目标是提示用户是否要使用字符串"yes"和"no"启动另一个事务,我认为字符串比较在python中是一个相当容易的过程,但有些事情并不正常。我使用的是python3.x,所以据我所知,输入应该在不使用原始输入的情况下接受字符串。

即使输入"是"或"否",程序也会始终回退无效输入,但真正奇怪的是,每次输入长度大于4个字符的字符串或int值时,它都会将其作为有效的正输入进行检查,然后重新启动程序。我还没有找到一种获得有效负输入的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

我也试过了

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

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

如果有人已经问过这样的问题,我会提前道歉,但我已经尽力搜索了。

谢谢大家!

戴夫


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

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

只要稍微快一点,接近你的意图,就用一套:

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

你所用的是userInput in ['yes', 'no'],如果userInput等于'yes''no'的话,它就是True

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

1
endProgram = userInput == 'no'

因为您已经验证了userInputyesno,所以不需要再次测试yesno来设置标志变量。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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()