2014-02-14 106 views
0

我是一名初學者程序員,在Python學習,但我很肯定我有一個體面的把握如何使大多數事情運行,直到我遇到這個。由於我試圖運行一段代碼,其中嵌入了if..then語句,因此Python決定通過向我投擲一個曲線球,但不運行if ... then語句。當我嘗試運行該程序時,它所做的一切就是不斷運行我在while循環中的一行代碼,在if ... then語句之前。 下面的代碼:爲什麼我的WHILE循環不能在Python中運行?

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..." 

人有什麼想法?這點我真的很困惑。

+3

你應該真的'while while_variable == True'用'while while_variable'替換'while deg_rad == False' with'while not deg_rad'。或者更好的是,只需在兩個循環中使用'while True'並使用'break'來結束循環而不是設置標誌變量。 –

回答

2

幾件事情

  1. 下是一個函數調用,你應該使用它像lower()
  2. 不打印在else:聲明的字符串。所以,即使你到達這裏,似乎沒有任何事情發生。這是因爲該功能本身不符合您以前的條件(功能的結果可能)
  3. 不要說while_variable == Truedeg_rad == False分別只使用while_variablenot deg_rad。 (這不是問題的一部分,只是風格不佳)
  4. 您可以嘗試打印某些內容以嘗試調試功能偏離預期行爲的位置,以嘗試縮小它的範圍。例如,如果您在捕獲查詢輸入後立即添加調試打印,您可能會發現這不是您所期望的。

例如:

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

首先,在這一行:

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

你不調用.lower()方法,因爲沒有()。你只是設置query等於lower方法的字符串,所以你總是採取else分支。

其次,在這一行:

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

你沒有打印任何東西,你只是做一個字符串。所以即使這個分支被採納了,你也沒有做任何你能看到的事情。

3

這是兩件事情的結合,使它看起來沒有任何事情發生。

要降低字符串,請執行s.lower(),而不是s.lowers.lower是一種方法。

你在做什麼是你將該方法分配到query。所以,if都不會匹配。這意味着else分支被執行。但是,你不是print "Umm... I'm confused...",你只是有字符串在那裏。這導致你沒有得到任何輸出。

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

您還沒有叫lower方法,所以在這一點query總是將是一個綁定方法的對象(沿<built-in method lower of str object at 0x1001a0030>線的東西)。

此外,在您的else子句中,您尚未使用print,因此字符串被創建,然後被丟棄而不被顯示。

因此,你得到的raw_input,然後什麼都沒有。

相關問題