#python
#python
Вопрос:
Что в этом плохого? Почему это всегда верно, независимо от того, что я ввожу?
def duplicates(s):
for c in s:
if s.count(c) > 1:
return False
else:
return True
print(duplicates("god"))
print(duplicates("goo"))
print(duplicates("good"))
Комментарии:
1. Каким вы ожидаете получить результат? Первый символ — «g», и когда вы подсчитываете вхождения «g» в вашей строке
s
, он выдает 1 и переходит вelse
цикл и возвращаетTrue
, как ожидалось.2. проверки условий if-else имеют оба оператора return . таким образом, цикл никогда не повторяется после первой проверки символа.
3. Что вы на самом деле пытаетесь сделать …. каждый раз количество символов равно единице и переходит в условие else, а затем возвращается с истинным значением
4. @SamkitJain «god» должно быть True, поскольку оно не содержит повторяющейся буквы. Остальные должны быть False .
Ответ №1:
Тело цикла никогда не выполняется более одного раза, поскольку, несмотря ни на что, вы выполняете возврат либо True
или False
на самой первой итерации.
Чтобы исправить это, возвращайте только False
из цикла. Не возвращайте True
до завершения цикла:
def duplicates(s):
for c in s:
if s.count(c) > 1:
return False
return True
Имя функции немного вводит в заблуждение, поскольку оно возвращает True
, если нет дубликатов и False
если есть дубликаты.
Комментарии:
1. Тело цикла никогда не выполняется более одного раза. Почему? Вы имеете в виду, что цикл учитывает только первую букву?
2. @kile Точно. На первой итерации он просматривает первую букву. Если это дубликат, он немедленно возвращается
False
. В противном случае он немедленно возвращаетсяTrue
. Выполнение никогда не проходит мимоif
инструкции.