while循环不在python中执行else语句

时间:2016-09-17 05:32:11

标签: python-3.x

我是python的新手,我已经编写了下面的代码,但是有2到3个问题。

  1. while循环时不会打印else语句 我再次输入6或7它再次要求输入。
  2. 为一个函数启动while循环 例子addTwoNumbers它将保留在我已经处理过的地方 通过返回有没有其他方法可以做到这一点?

    谢谢

    public Loader<ArrayList<CustomL>> onCreateLoader(int id, Bundle args) { return new Loade(this); } public void onLoadFinished(Loader<ArrayList<CustomL>> loader, ArrayList<CustomL> data) { Log.v("Load","Finished"); maklst(data); }

    def main():

3 个答案:

答案 0 :(得分:0)

这些是一些错误:

  • while choice!='5'应为while choice!='4'
  • 你是在if语句之后回来的。退出循环。
  • 在if语句中,您正在调用contin(),但将返回值存储在conti中,但您没有使用它。它应该是choice
  • contin()中,您没有返回选择。

答案 1 :(得分:0)

您的问题是相关的,程序的控制流程是混乱的,您需要了解变量范围。作为一个简短示例,您的菜单正在执行此操作:

def main():
    choice = 5
    print(choice)

    contin()

    print(choice)


def contin():
    choice = 10


main()

它在顶部main函数中设置'choice',然后尝试在contin函数中稍后更改它。这些实际上是两个具有相同名称的不同的变量。变量 scope 仅在设置值的函数内。

因此,由于choice的{​​{1}}的值永远不会在main()中发生变化,因此while循环永远不会退出,数学函数永远不会有所不同,并且你一遍又一遍地执行相同的数学函数试。

程序需要工作的方式是这样的:

menu
 -> choice 
   -> numbers
     -> math
 <-
 menu
 -> choice 
   -> numbers
     -> math
 <-
 menu
 -> choice 
   -> numbers
     -> math
 <-
 menu
 # you quit here, and the program exits        

但是您的代码会进入conti(),然后再次进入main(),因此它会越来越多地嵌套,如下所示:

menu
 -> choice 
   -> numbers
     -> math
       -> menu
         -> choice 
           -> numbers
             -> math
               -> menu
                -> choice 
                  -> numbers
                    -> math
                      -> menu
                       # you try to quit here but end up
                  choice  #back at this level

这意味着当你最终按7退出菜单而不是退出程序时,退出最后一次conti()调用并返回到while循环的顶部,并提示输入更多数字

答案 2 :(得分:0)

您的代码的真正问题在于control flow并不像您认为的那样。

假装是你的电脑。仔细查看代码,逐行查看。

  1. 运行的第一个代码是main()。所以看看那个功能。
  2. main内,您首先调用您的菜单并从您的用户处获取一个号码。
  3. 接下来,设置一个循环。只要用户的第一个数字不是5,您的循环就会运行。目前,我们会假装用户输入1
  4. 然后您会从用户那里得到两个数字作为输入。这很好。
  5. 由于他们输入1作为选择,因此第一个if语句(choice=='1')的条件为真,因此内部代码会运行。
  6. 您运行addTwoNumber函数,返回的输出存储在total
  7. 接下来,您致电contin()并将其输出存储在conti中。但请查看contin()内部,让我们逐行浏览此功能。
  8. 您询问用户是否要继续,如果他们输入y(或Y),则再次致电menu()并将其输出存储在choice中,你的循环检查,对吗?嗯,那不太对劲。问题是,无论何时在函数中定义变量,该变量仅存在于该函数内。 函数无法查看其他函数中的变量(除非您将它们作为参数传递,或者您使用全局变量......但您确实不应该使用全局变量)。因此,您在choice中使用的contin变量属于该函数,但是另一个变量,其名称为{{1}对于choice函数!
  9. 要解决此问题,您可以将main行更改为choice=menu()。然后将return menu()更改为conti=contin()

    此外,在致电choice=contin()后,您不需要return。如果你contin(),你的函数将退出,你的循环将停止运行。

    这里是我提到的修补程序的一部分代码。你明白它为什么有效吗?你能弄清楚还有什么需要改变才能解决所有问题吗?

    return

    def main():
        choice = menu()
    
        while choice != '5':
            num1 = int(input("enter first number: "))
            num2 = int(input("enter the second number: "))
    
            if choice == '1':
                total = addTwoNumber(num1, num2)
                print("sum of two numbers is: ", total)
                choice = contin()
    
            elif choice == '2':