我是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
。
答案 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):
虽然startswith
和endswith
方法绝对是可取的,因为它只检查开头和结尾:
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
也很有用,我只是了解到startswith
和endswith
可以使用字符串元组来尝试:
S.startswith(("a","b","c"))
如果字符串True
以“a”或“b”或“c”开头,则会返回S
,使用此功能,您可以在一行中编写函数。