Оператор Python if не распознан, хотя условия кажутся выполненными

Я пытаюсь добавить 1 к счету каждый раз, когда появляется новая буква, и отслеживать двойные буквы, но python не входит в оператор if, несмотря на то, что в строке 6 показаны условия для оператора if. Что мне не хватает?

def duplicate_count(text):
    count = 0
    doubled_letters = []
    for i in text:
        print (i)
        print(i in doubled_letters)
        if i in doubled_letters == False:
            count += 1
            doubled_letters.append(i)
    print(count)
    print(doubled_letters)
    return count

duplicate_count("abbcdea")

это возвращает:

a
False
b
False
b
False
c
False
d
False
e
False
a
False
0
[]

person aj1000    schedule 16.07.2018    source источник


Ответы (2)


in — это оператор сравнения, поэтому он связывается с ==. Ваше выражение эквивалентно

(i in doubled_letters) and (double_letters == False)

Вы можете, так сказать, «разорвать цепочку», используя явные круглые скобки:

if (i in double_letters) == False:

но прямые сравнения с булевыми литералами редко, если вообще необходимы. Просто пиши

if i not in double_letters:

(Обратите внимание, что not in — это одиночный оператор из двух слов, а не приложение not к in. Эквивалентом in будет not (i in double_letters).)

person chepner    schedule 16.07.2018
comment
даже если вам нужно использовать литералы, is True предпочтительнее == True - person Ankur S; 16.07.2018
comment
Оба довольно ужасны; Я бы не стал пытаться выбрать предпочтения. - person chepner; 16.07.2018
comment
@AnkurS is True проверяет подлинность, поэтому он может не давать тех же результатов, что и ` == True`. Я не знаю, где вы видели, что это было бы предпочтительнее, насколько я понимаю, такой тест не прошел бы проверку кода. - person bruno desthuilliers; 16.07.2018
comment
@brunodesthuilliers См. stackoverflow.com/a/24846681/1126841; True и False гарантированно уникальны, как и None, так что по крайней мере было бы безопасно, хотя и необязательно, использовать is. - person chepner; 16.07.2018

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

Я думаю, вы ожидаете что-то вроде этого:

def duplicate_count(text):
    count = 0
    letters = []
    for i in text:
        if i not in doubled_letters:
            letters.append(i)
        else:
            count += 1

    print(count)
    return count

duplicate_count("abbcdea")

В приведенном выше коде я пытаюсь добавить каждую букву в список, и если они дублируются, я увеличиваю количество. Исходя из этого, вы должны получить 2, поскольку a и b дублируются на входе.

person Jay    schedule 16.07.2018
comment
спасибо, это то, для чего предназначена моя программа, но когда я продолжал получать эту ошибку, я удалил все, что не вызывало проблем, чтобы я мог сосредоточиться на важной части, чтобы опубликовать ее здесь. Приведенный выше код — это всего лишь проблемный фрагмент. - person aj1000; 17.07.2018