TypeError: 'NoneType' object is not subscriptable в цикле for

На вход программе подается строка из нескольких слов через пробел. Необходимо прочитать эту строку, сформировать список и определить, начинается ли следующее слово на последнюю букву предыдущего (если слово заканчивается на "ь", "ъ", или "ы", то берется предпоследняя буква). Нужно напечатать "ДА", если последовательность удовлетворяет этому правилу, и "НЕТ" в противном случае.

Но мой код в конце выдает ошибку TypeError: 'NoneType' object is not subscriptable в цикле for.

Мой код:

a = input().lower().split()
s = 0
for i in a:
    if i == a[-1]:
        print("ДА")
        break
    if (i[-1] == a[s + 1][0]) or ((i[-1] == ('ь' or 'ъ' or 'ы')) and i[-2] == a[s + 1][0]):
        s += 1
    else:
        print("НЕТ")
        break

Ответы (1 шт):

Автор решения: Vitalizzare ушел в монастырь

Если вы работаете в среде Jupyter, IPython или в чем-то похожем, где считывание строки и выполнение цикла разделены в разных ячейках, то перед выполнением цикла проверьте содержимое объекта a, по которому вы итерируетесь. Вероятно, в процессе экспериментов туда в качестве элемента попал None.


P.S. Замечание о коде, которое к вопросу не относится. Выражение ... or ... or ... всегда равно первой не ложной с точки зрения операции bool(...) части. В вашем случае ('ь' or 'ъ' or 'ы') равно 'ь'. Соответственно выражение i[-1] == ('ь' or 'ъ' or 'ы') будет проверять равенство последней буквы только мягкому знаку. Чтобы исправить ситуацию, его нужно переписать. Например:

i[-1] == 'ь' or i[-1] == 'ъ' or i[-1] == 'ы'
→ Ссылка