5

所以我已经搜索了“字符串”、“python”、“验证”、“用户输入”等单词的几乎所有排列,但我还没有找到适合我的解决方案。

我的目标是提示用户他们是否要使用字符串“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 如何处理字符串的额外信息,那就太好了。

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

谢谢大家!

〜戴夫

4

2 回答 2

12

您正在测试用户输入是否为 yesno。添加一个not

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

稍微快一点,更接近你的意图,使用一组:

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

您使用的是userInput in ['yes', 'no'],即TrueifuserInput等于'yes''no'

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

endProgram = userInput == 'no'

因为您已经验证了userInputor yesno所以无需再次测试yesorno来设置您的标志变量。

于 2013-05-19T13:20:57.760 回答
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()
于 2016-09-11T21:48:14.757 回答