“while循环”没有破坏(使用Python)

时间:2018-01-20 16:52:32

标签: python while-loop

这是我的代码:

#Choose Report
def chooseReport():
    print "Choose a report."
    while True:
        choice = raw_input("Enter A or B: ")
        if choice == 'a' or choice == 'A':
            reportA()
            break
        elif choice == 'b' or choice == 'B':
            reportB()
            break
        else:
            continue

当我输入ab时,它再次要求我"Enter A or B"。它不会去它应该的功能。

知道为什么会这样吗?

6 个答案:

答案 0 :(得分:2)

def chooseReport():
    print "Choose a report."
    t=True                                        # t starts at true
    while t:
        choice = raw_input("Enter A or B: ")
        if choice == 'a' or choice == 'A':
            reportA()
            t=False               # t turns false to break out of loop
        elif choice == 'b' or choice == 'B':
            reportB()
            t=False

试试这个。它在t为真时保持循环,在t为假时停止。问题可能还在于reportA或reportB或您如何调用chooseReport。

答案 1 :(得分:2)

代码是完美的,除了冗余的其他内容,如评论中所述。您是在输入 Days Since 1/17/18 1/18/18 1/19/18 1/20/18 Event A 2 X Event B 1 X Event C 0 X Event D 3 X (a +空格)而不是简单地a(没有空格)吗?问题在于您提供的输入而不是代码!

答案 2 :(得分:2)

首先,你的代码工作正常,最可能的错误是你写错了输入(例如:有更多的字符)。要解决这个问题,您可以使用"a" in choice or "A" in choice。但如果它不起作用......继续阅读。

似乎break没有影响while loop,我没有python 2所以我不太清楚为什么(在python 3中[在更改后raw_input到{ {1}}和inputprint]您的代码非常完美。)所以你应该使用print()的条件来打破它。

while理论上永远工作,因为每次执行代码时都会检查条件 - while True - 并且因为它是真的它会保持循环。
您可以操纵该条件以打破循环(不允许再次执行其代码)。

例如,你可以使用它:

True

答案 3 :(得分:2)

问题出在std::vector<int>。它会返回一个字符串,但是这个字符串可能是raw_input()"a ",但您已输入"a\n""a"

我会这样做:

"b"

答案 4 :(得分:2)

在以下脚本中尝试了您的代码,它在Linux和Windows上都可以正常工作。

def reportA():
    print "AAAAA"

def reportB():
    print "BBBBB"

#Choose Report
def chooseReport():
    print "Choose a report."
    while True:
        choice = raw_input("Enter A or B: ")
        if choice == 'a' or choice == 'A':
            reportA()
            break
        elif choice == 'b' or choice == 'B':
            reportB()
            break
        else:
            continue


chooseReport();

答案 5 :(得分:1)

代码很好。我认为你在循环中调用你的chooseReport()函数,或者你的输入有额外的字符,如果条件不满意。