2013-03-24 43 views
-1

我一直在搜索,但無法找到信息來幫助我糾正此問題。if if python

在python中練習編程我正在研究家庭自動化的控制代碼。我開始使用溫度轉換計算器,並且運行良好。然後,我把它放在另一個「如果」給它的功能來改變溫度和讀取當前溫度。這使我的轉換器「if」作爲我的控制權「if」。該程序打開很好,但只能轉換到轉換器。它不會參與作爲總體控制一部分的「elif」語句。下面:

while True: 

    task = (raw_input("What would you like to do? ")) 

    if task == 'Convert' or 'convert': 
     ask = raw_input("C to get Celsius, F to get Fahrenheit: ") 

     if ask == 'F': 
      Cconvert = float(raw_input("Temp in C: ")) 
      F = Cconvert * 9/5 + 32 
      print F, 'F' 

     elif ask == 'C': 
      Fconvert = float(raw_input("Temp in F: ")) 
      C = ((Fconvert - 32) * 5)/9 
      print C, 'C' 

     else: 
      print "That is not a temperature measurement I understand." 

    elif task == "ChangeTemp": 
     temptype = raw_input("Celsius or Fahrenheit? ") 
     if temptype == "Celcius" or "celsius": 
      temp = float(raw_input("New Temp: ")), str(temptype) 
     elif temptype == "Fahrenheit" or "fahrenheit": 
      temp = float(raw_input("New Temp: ")), str(temptype) 
     else: 
      print "That is not a temperature measurement I understand." 

    elif task == "SetTemp": 
     print temp 

    else: 
     print "I do not know what you are asking." 

如果這是其他地方回答,我根本無法找到它,請鏈接。

+0

什麼是你輸入你試過嗎?請確保匹配CASE – baloo 2013-03-24 18:41:46

+0

@baloo,我已將它們逐個匹配,但正如向我解釋的那樣,我的「轉換」語句是將「轉換」視爲始終爲真的測試。 – user2134635 2013-03-24 18:58:36

回答

3
if task == 'Convert' or 'convert': 

該行將總是成功,因爲它相當於

if (task == 'Convert') or ('convert'): 

'convert'視爲對自己的一個布爾表達式會導致True。把它寫正確的方法是這樣的:

if task == 'Convert' or task == 'convert': 

你也可以做下列操作之一:

if task in ('Convert', 'convert'): 

if task.lower() == 'convert': 
+0

當設置任務變量時,我會爲.lower設置,以便在測試中無任何問題 – baloo 2013-03-24 18:43:07

+0

@John Kugelman,謝謝,先生。代碼現在完美工作。 – user2134635 2013-03-24 18:44:44

+0

謝謝。實際上,這個解釋很有幫助。我甚至沒有想到它將它們作爲獨立的布爾人來閱讀。 – user2134635 2013-03-24 18:53:08

0

這不是你想要的東西:

if task == 'Convert' or 'convert': 

即使task是不是Convertconvert總是真值。所以你永遠不會去elif部分。

你必須這樣做:

if task == 'Convert' or task == 'convert': 

(忽略更好的方式做同樣的,考慮上下文)

+0

謝謝。我知道還有更好的,但是這段代碼是爲了練習我已經學過的東西,以便更好地理解它。逐行的解釋正在幫助很多人,我不認爲我會再犯這個錯誤。 – user2134635 2013-03-24 18:55:10

0

的錯誤是在這行代碼:

if task == 'Convert' or 'convert': 

用下面這行代碼替換它:

if task == 'Convert' or task == 'convert': 

或者更好,使用str的lower()方法:

if task.lower() == 'convert' 
+0

謝謝。這些迴應非常有幫助。 – user2134635 2013-03-24 18:56:56