Возврат в функции цикла for

#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 инструкции.