Python:打破手机故障排除应用程序

问题描述:

所以我试图做一个简单的故障排除应用程序的手机和问题的解决方案,约5分钟,我不能通过第4行时,用户进入手机型号,它只是停止而不是继续对话。我不知道为什么。任何帮助深表感谢。同样在第6行,我很喜欢这样做,以便当用户写出关于手机有什么问题的文本时,它会选择“破碎”,“破解”,“湿”等字样,但我没有任何线索如何再次,任何帮助,非常感谢!Python:打破手机故障排除应用程序

brand = raw_input("Please state your phone brand. ") 
if brand.lower() == ("iphone"): 
    iphone = raw_input ("Please state the model. ") 
    if iphone.lower() == ("2G"): 
     iproblem2g = raw_input ("Please state your problem. ") 
     if iproblem2g.lower() == ("broken") or ("broke"): 
      ibroke = raw_input ("Is the hardware broken or the software? ") 
      if ibroke.lower() == ("hardware") or ("hard"): 
       print ("...") 
+0

您需要缩进第2行。 –

+0

@pp_我认为你的意思是第3行。就我的经验而言,文本编辑并不是从0开始。:) – zondo

+0

虽然这个问题与另一个问题有关系,但它不是重复的,而是超级集合。 这段代码有很多问题可以解决。 – Xexeo

有几个问题。试试这个:

brand = raw_input("Please state your phone brand. ") 
if brand.lower() == ("iphone"): 
    iphone = raw_input ("Please state the model. ") 
    if iphone.lower() == ("2g"): 
     iproblem2g = raw_input ("Please state your problem. ") 
     if iproblem2g.lower() in ("broken", "broke"): 
      ibroke = raw_input ("Is the hardware broken or the software? ") 
      if ibroke.lower() in ("hardware", "hard"): 
       print ("...") 

缩进在Python中非常重要。而且,由于输入值被小写,“2G”从来没有匹配过输入值。最后,匹配多个值在列表或元组中更简单,并且不会像以前那样工作(它总会返回True)。

为什么总是为真?以if iproblem2g.lower() == ("broken") or ("broke"):为例。这是检查iproblem2g.lower() == ("broken")("broke")("broke")将始终为真,因为它被认为是Truthy value in Python因此整个条件将始终为真。

干杯!

此行可能是语义错误的(即,它编译但你希望不工作):

iproblem2g.lower() == ("broken") or ("broke") 

你实际上是问如果这意味着

(iproblem2g.lower() == ("broken")) or True 

(iproblem2g.lower() == ("broken")) or ("broke") 

而且这将永远是真的

你不能用这种方法检查是否有“==”两件事。如果你想要做这种问题(是== B或一个== c)您应使用:

(iproblem2g.lower() == ("broken")) or (iproblem2g.lower() == ("broke")) 

,或者更Pythonesc

iproblem2g.lower() in ["broken","broke"] 

然而,即使这个问题不是一个好的选择,因为它只会匹配完美的单词“破碎”或“破碎”,而不是包含它的文本。这可能会更好地问:

"broken" in iproblem2g.lower() or "broke" in iproblem2g.lower() 

这样你会发现在任何句子中的单词。

你可以把它更好地创建一个简单的函数来检查,如果任何一组单词的是在一个句子:

def check(words,sentence): 
    for word in words: 
     if word in sentence: 
      return True 
    return False 

可以使用.lower(),甚至做一些预处理。 trim()

最后,还有一种小窍门,你没有注意到:如果“破”是字符串,“破”总是(因为它是一个子字符串),所以你不需要检查两者。

+0

他没有注意到,因为他没有在找。他正在考虑不区分大小写的平等。 – zondo