2016-02-27 72 views
1

我是Python新手。我被困在最后一个问题上,我不知道我做错了什么。问题是:Python多个字符串比较不起作用

定义一个函数,用于确定输入字符串是否以网址形式以“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

+0

使用字符串的'endswith'和'startswith'方法来执行检查。 –

+0

我该怎么做?我真的没有这个计划的经验,我在入门级课程,我们没有在课堂上教过这个,因为它听起来很荒谬 –

+0

请[编辑]你的头衔,以反映你的问题。如果无法找到这个问题,这个问题对任何其他人都没用,没有人会去搜索“在一个简单但有问题的作业问题上需要帮助”。 –

回答

1

这绝对是最常见的错误初学者做一个,你需要了解的第一件事情是,所有的对象可以在truth testing使用:

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

那么你可以考虑的执行顺序有条件的,你写道:

if "http" and ".com" in inputURL 

是相同的:

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

是因为"http"始终评估为真,第二部分是真正贡献的唯一的事情(这就是为什么www.google.com作品)你想代替的是:

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

虽然startswithendswith方法肯定是因为它检查最好只在开头和结尾:

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

你可以看到与help功能上这些方法的文档(以及一切其他蟒蛇):

help(str.startswith) 

帮助上method_descriptor:

startswith(...) S.startswith(前缀[,开始[,结束]) - > BOOL

返回TRUE若S开头指定的前缀,否则为False。 使用可选启动时,测试S从该位置开始。 使用可选结束时,停止在该位置比较S. 前缀也可以是字符串的元组来尝试。

即使我使用help总是有用的,我才刚刚得知startswithendswith可以利用字符串的元组尝试:

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

这将如果字符串返回TrueS开始任“a”或“b”或“c”,使用它你可以在一行中编写你的函数。