2013-03-24 61 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