Не удалось выполнить сравнение нескольких строк Python

56
4

Я новичок в 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.

спросил(а) 2016-02-27T05:02:00+03:00 4 года, 6 месяцев назад
1
Решение
57

Это, безусловно, одна из самых распространенных ошибок начинающих, первое, что вам нужно понять, это то, что все объекты могут использоваться при тестировании правды:

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", используя эту функцию, вы, вероятно, можете написать свою функцию в одной строке.

ответил(а) 2016-02-27T05:26:00+03:00 4 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема