#python
#python
Вопрос:
def replace_ending(sentence, old, new):
# Check if the old string is at the end of the sentence
# if old in sentence:
# i = len(sentence)
# N = len(old)
# wrong_sentence = sentence[0:i-N] new
# return wrong_sentence
if old in sentence == True:
i = len(sentence)
N = len(old)
correct_sentence = sentence[0:i-N] new
return correct_sentence
return sentence
print(replace_ending("She sells seashells by the seashore", "seashells", "donuts"))
# # Should display "She sells seashells by the seashore"
результат сверху : She sells seashells by thedonuts
результат внизу : She sells seashells by the seashore
Я застрял, пытаясь выяснить, почему оба «if заявления» выдают «True» в качестве выходных данных. Но результаты печати разные. Кто-нибудь знает, что вызывает это?
Комментарии:
1. Попробуйте
if sentence.endswith(old):
2. Ах, извините, я запутался. Билл был прав, нижнее утверждение выдает false в результате, когда его спрашивают «если старое в предложении == True», что равно «False». Поэтому он возвращает только предложение.
Ответ №1:
Вы утверждаете, что все три этих выражения будут возвращать одно и то же, что неточно.
Python 3.8.2 (default, Feb 26 2020, 02:56:10)
> ("a" in "aaa") == True
True
> "a" in "aaa" == True
False
> "a" in "aaa"
True
Ответ №2:
Вот объявление о том, с чем вы сталкиваетесь:
print("seashells" in "She sells seashells by the seashore == True)
False
print("seashells" in "She sells seashells by the seashore)
True
В первом: «ракушки» в «Она продает ракушки на берегу моря == True»» ==
операция выполняет действие перед in
операцией, поэтому, если мы спросим "She sells seashells by the seashore == True"
результат False
, тогда, если мы продолжим спрашивать "seashells" in False
, результат будет False
Следовательно:
"seashells" in "She sells seashells by the seashore == True"
не то же самое, что "seashells" in "She sells seashells by the seashore == True"
и доказательством является:
print( ("seashells" in "She sells seashells by the seashore) == True)
True
итак, в вашем коде вы должны использовать:
if (old in sentence) == True:
чтобы получить ожидаемый ответ.
Ответ №3:
Отвечая на ваш первоначальный вопрос:
Я застрял, пытаясь выяснить, почему оба «if заявления» выдают «True» в качестве выходных данных. Но результаты печати разные.
Ответ прост, он связан с:
Приоритет операторов
Выполнение этого:
if old in sentence == True:
Является ли Syntactic_sugar для этого:
if old in sentence and sentence == True:
Итак, что происходит, это проверка отдельно двух операторов.
Следовательно, чтобы иметь правильный приоритет (без использования and), вы должны сделать это:
if (old in sentence) == True:
Так оно и есть:
- Есть ли какой-либо символ внутри старого также в предложении ?.
- Затем получает логическое значение и спрашивает, равен ли результат
True
?
Документация и руководства
Обратите внимание, что сравнения, тесты принадлежности и тесты идентификации имеют одинаковый приоритет и имеют функцию цепочки слева направо, как описано в разделе Сравнения.
Заключительное рассмотрение
Это не то, что вы спрашивали изначально, однако естественно, что выполняемая вами функция кажется логически неправильной (судя по комментариям в ней, имени переменных и т. Д.)
Способ, которым вы запускаете оператор if, проверяет, есть ли в предложении какой-либо символ в Old, если да, то добавьте к нему новое слово (donuts). Так что это, очевидно, правда. Было бы достаточно даже одного символа, чтобы выполнить это утверждение true, например:
print(replace_ending("She sells seashells by the seashore", "s", "donuts"))
Все равно даст вам это, потому что s находится в предложении:
Решение
Представьте это по-другому, используя функцию any или all (я оставил оператор print, чтобы вы видели, что происходит в списке l).
То, что вы делаете до сих пор, совпадает с этим
def replace_ending(sentence, old, new):
l = [char in old for char in sentence]
print(l)
if any(l):
i = len(sentence)
N = len(old)
correct_sentence = sentence[0:i-N] new
return correct_sentence
return sentence
Вы хотите вместо этого (если это то, чего вы хотите достичь) использовать функцию all
def replace_ending(sentance, old, new):
N = len(old)
get_last_word = sentance[-(N-1):] # -> Get seashore
l = [char in old for char in get_last_word]
if all(l):
i = len(sentance)
correct_sentence = sentance[0:i-N] new
return correct_sentence
return sentance
Это означает, что все символы должны быть в последнем слове предложения.