Python : Broke phone troubleshooting app
本问题已经有最佳答案,请猛点这里访问。
因此,我正在尝试制作一个简单的故障排除应用程序来解决手机故障和问题,大约5分钟后,当用户进入手机模式时,我无法通过第4行,它只是停止而不是继续对话。我不知道为什么。任何帮助都非常感谢。同样在第6行,我也很乐意这样做,当用户写一行关于手机问题的文本时,它会选择"坏"、"裂"、"湿"等词,但我不知道怎么回事,任何帮助都是非常感谢的!
1 2 3 4 5 6 7 8 9 | 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 ("...") |
有一些问题。试试这个:
1 2 3 4 5 6 7 8 9 | 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)。
为什么总是这样?以
干杯!
这一行可能在语义上是错误的(即,它编译但不能按预期工作):
1 | iproblem2g.lower() == ("broken") or ("broke") |
你实际上是在问
1 | (iproblem2g.lower() == ("broken")) or ("broke") |
那意味着
1 | (iproblem2g.lower() == ("broken")) or True |
这永远是真的
您不能通过这种方式检查某个事物是否为"=="两个事物。如果你想回答这类问题(a==b或a==c),你应该使用:
1 | (iproblem2g.lower() == ("broken")) or (iproblem2g.lower() == ("broke")) |
或者,更多的Python
1 | iproblem2g.lower() in ["broken","broke"] |
然而,即使是这个问题也不是一个好的选择,因为它只匹配完美的单词"break"或"break",而不是包含它的文本。最好问一下:
1 | "broken" in iproblem2g.lower() or"broke" in iproblem2g.lower() |
这样你就可以在任何句子中找到这个词。
您可以通过创建一个简单的函数,检查一组单词中是否有任何一个在句子中,使其变得更好:
1 2 3 4 5 | def check(words,sentence): for word in words: if word in sentence: return True return False |
甚至可以使用.lower()和.trim()进行一些预处理
最后,有一个小技巧你没有注意到:如果"break"是字符串,"break"总是(因为它是子字符串),所以你不需要检查两者。