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

时间:2016-02-26 12:19:45

标签: python

因此,我正在尝试为破损的手机和问题解决方案制作一个简单的故障排除应用程序,大约5分钟后,当用户进入手机型号时我无法通过第4行,它只是停止而不是继续对话。我不知道为什么。任何帮助深表感谢。同样在第6行,我很想做到这一点,当用户写一行关于手机有什么错误的文字时,它会选出“破”,“破”,“湿”等字样,但我不知道如何再次,非常感谢任何帮助!

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

2 个答案:

答案 0 :(得分:2)

有一些问题。试试这个:

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")将始终为True,因为它被视为Truthy value in Python,因此整个条件将始终为True。

干杯!

答案 1 :(得分:0)

这一行可能在语义上是错误的(即,它编译但不能按预期工作):

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

您实际上是在询问

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

这意味着

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

这将永远是真的

你不能用这种方式检查是否有“==”两件事。如果你想做这样的问题(是= = 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()

进行一些预处理

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