Не удалось выполнить сравнение нескольких строк 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
.
Это, безусловно, одна из самых распространенных ошибок начинающих, первое, что вам нужно понять, это то, что все объекты могут использоваться при тестировании правды:
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):
хотя методы startswith
и endswith
определенно предпочтительнее, поскольку он проверяет только в начале и конце:
if inputURL.startswith("http") and inputURL.endswith(".com")
вы можете увидеть документацию по этим методам (и все остальное в python) с help
функции help
:
help(str.startswith)
Справка по методу_descriptor:
startswith (...) S.startswith (префикс [, start [, end]]) → bool
Вернуть True, если S начинается с указанного префикса, в противном случае False. При дополнительном запуске тест S начинается с этой позиции. С дополнительным концом прекратите сравнение S в этом положении. префикс также может быть кортежем для строк.
Даже для меня использование help
всегда полезно, я только что узнал, что startswith
и endswith
может взять кортеж строк, чтобы попробовать:
S.startswith(("a","b","c"))
это вернет True
если строка S
начинается с "a" или "b" или "c", используя эту функцию, вы, вероятно, можете написать свою функцию в одной строке.