Python多字符串比较不起作用

时间:2016-02-27 02:02:20

标签: python

我是Python的新手。我对这最后一个问题感到困惑,我不知道我做错了什么。问题是:

  

定义一个函数,用于确定输入字符串是否以Web地址的形式开头,以“http”开头,以“.com”“。net”或“.org”结尾。如果输入字符串以其中一个后缀结尾并以“http”开头,则该函数将返回True,否则返回False。

def isCommonWebAddressFormat(inputURL):

这是我目前在我的Python代码中所拥有的,但是当我测试它时会产生错误的结果:

def isCommonWebAddressFormat(inputURL):
    #return True if inputURL starts with "http" and ends with ".com" ".net" or ".org" and returns False otherwise
    outcome = ""
    if "http" and ".com" in inputURL:
        outcome = True
    elif "http" and ".net" in inputURL:
        outcome = True
    elif "http" and ".org" in inputURL:
        outcome = True
    else:
        outcome = False
    return outcome

当我使用"www.google.com"调用该函数时,结果为True,即使它应为False

1 个答案:

答案 0 :(得分:1)

这绝对是初学者犯下的最常见错误之一,您首先需要了解的是所有对象都可以在truth testing中使用:

if "http":
    print("it was true!!")

然后你可以考虑你写的条件的执行顺序:

 if "http" and ".com" in inputURL

相当于:

 if ("http") and (".com" in inputURL)

因为"http"总是评估为True,第二部分是唯一真正贡献的部分(这就是为什么www.google.com有效),你想要的是:

 if ("http" in inputURL) and (".com" in inputURL):

虽然startswithendswith方法绝对是可取的,因为它只检查开头和结尾:

 if inputURL.startswith("http") and inputURL.endswith(".com")

您可以使用help函数查看有关这些方法的文档(以及python中的所有其他内容):

 help(str.startswith)
  

有关method_descriptor的帮助:

     

startswith(...)      S.startswith(前缀[,start [,end]]) - >布尔

     

如果S以指定的前缀开头,则返回True,否则返回False。       通过可选的启动,测试S从该位置开始。       使用可选结束,停止比较该位置的S.       前缀也可以是要尝试的字符串元组。

即使对我来说使用help也很有用,我只是了解到startswithendswith可以使用字符串元组来尝试:

 S.startswith(("a","b","c"))

如果字符串True以“a”或“b”或“c”开头,则会返回S,使用此功能,您可以在一行中编写函数。