为什么我的WHILE循环不会在Python中运行?

时间:2014-02-14 15:47:45

标签: python python-2.7 while-loop

我是一名初学程序员,在Python学习,但我很确定我对如何使大多数事情运行得到了很好的掌握,直到我遇到这个问题。当我试图运行一段内嵌if4.then语句的代码时,Python决定通过不运行if ... then语句给我一个曲线球。当我尝试运行程序时,它所做的就是不断运行while循环中的一行代码,在if ... then语句之前。 这是代码:

def deg_or_rad():
    global deg_rad
    deg_rad = False

    while deg_rad == False:
        query = raw_input("Are you working in 'degrees' or 'radians'?  > ").lower
        if query == "deg" or \
           query == "degrees":
            deg_rad = "deg"
            print "Cool! I like degrees."
        elif query == "rad" or \
             query == "radians":
            deg_rad = "rad"
            print "Cool! I like radians."
        else:
           "Umm... I'm confused..."

我为while循环尝试了一些其他变量,例如:

def deg_or_rad():
    global deg_rad
    deg_rad = False
    while_variable = True
    while while_variable == True:
        query = raw_input("Are you working in 'degrees' or 'radians'?  > ").lower
        if query == "deg" or \
           query == "degrees":
            deg_rad = "deg"
            print "Cool! I like degrees."
            while_variable = False
        elif query == "rad" or \
             query == "radians":
            deg_rad = "rad"
            print "Cool! I like radians."
            while_variable = False
        else:
           "Umm... I'm confused..."

有人有什么想法吗?我真的很困惑。

4 个答案:

答案 0 :(得分:3)

首先,在这一行:

    query = raw_input("Are you working in 'degrees' or 'radians'?  > ").lower

您没有调用.lower()方法,因为没有()。您只是将query设置为等于字符串的lower 方法,因此您始终使用else分支。

第二,在这一行:

       "Umm... I'm confused..."

你没有打印任何东西,你只是做了一个字符串。所以即使正在采取分支,你也没有做任何你能看到的事情。

答案 1 :(得分:3)

这是两件事的组合,使得它似乎没有发生任何事情。

要降低字符串,请执行s.lower(),而不是s.lowers.lower是一种方法。

您正在做的是将该方法分配给query。因此,if s都不会匹配。这意味着执行了else分支。但是,你没有print "Umm... I'm confused...",你只有字符串本身。这导致您无法获得任何输出。

答案 2 :(得分:2)

几件事

  1. lower是函数调用,您应该像lower()
  2. 一样使用它
  3. 您没有在else:语句中打印字符串。所以即使你到了这里,似乎没有任何事情发生。这是因为该函数本身不符合您之前的条件(函数的结果可能)
  4. 不要说while_variable == Truedeg_rad == False分别只使用while_variablenot deg_rad。 (这不是问题的一部分,只是糟糕的风格。)
  5. 您可以尝试打印内容以尝试调试功能偏离预期行为的位置,以尝试缩小范围。例如,如果您在捕获查询输入后立即放入调试打印,您可能会发现它不是您所希望的。
  6. 示例:

    def deg_or_rad():
        global deg_rad
        deg_rad = False
    
        while not deg_rad:
            query = raw_input("Are you working in 'degrees' or 'radians'?  > ").lower()
            if query in ("deg", "degrees"):
                deg_rad = "deg"
                print "Cool! I like degrees."
            elif query in ("rad", "radians"):
                deg_rad = "rad"
                print "Cool! I like radians."
            else:
                print "Umm... I'm confused..."
    

答案 3 :(得分:1)

raw_input("Are you working in 'degrees' or 'radians'?  > ").lower

您尚未调用lower方法,因此此时query 始终将成为绑定方法对象(类似于{{1 }})。

此外,在您的<built-in method lower of str object at 0x1001a0030>子句中,您还没有使用else,因此会创建字符串,然后在不显示的情况下将其丢弃。

因此你得到raw_input,然后什么都没有。

相关问题