Непоследовательное использование табуляции и пробелов в отступах

def contains_sequence(dna1, dna2):
    ''' (str, str) -> bool

    Return True if and only if DNA sequence dna2 occurs in the DNA sequence
    dna1.

    >>> contains_sequence('ATCGGC', 'GG')
    True
    >>> contains_sequence('ATCGGC', 'GT')
    False

    '''
    b=False
    len2=len(dna2)
    i=0
    for j in dna1:
        temp=dna1[i:i+len2]
        if temp == dna2:
            b=True
        i=i+1
    return b

Я новичок в Python. Программа, вставленная выше, дает мне ошибку "непоследовательное использование вкладок и пробелов в отступе" в строке "если temp == dna2:" в частности. Может кто-нибудь, пожалуйста, помогите мне выяснить, как отступ неправильный?

4 ответов


Это означает, что вы перепутали пробелы и знаки табуляции в отступах. Вы должны исправить это, чтобы соответствовать вкладкам или пробелам.


Если вы внимательно посмотрите на строки

    temp=dna1[i:i+len2]
    if temp == dna2:

в вашем коде вы увидите, что "пробел" в начале каждой строки "построен" по-разному. В одном случае он использует вкладки, а в другом пробелы, или, если у обоих есть вкладки и пробелы, они используются в разных комбинациях.

вы можете изучить это, поместив курсор в начале каждой строки и используя клавишу со стрелкой вправо, чтобы "пройти" свой путь через символы. Вы увидите, что курсор движется по-разному на каждой линии.

чтобы исправить, удалите вкладки и пробелы в начале каждой строки и повторно вставьте их с теми же символами на каждой строке.

чтобы избежать в будущем, приучите себя использовать только клавишу tab или клавишу space для отступа и подумайте о настройке редактора для автоматического преобразования вкладок в пробелы.


предполагая, что у вас есть" хорошая "IDE, лучше всего установить клавишу tab, чтобы сделать 4 пробела вместо" tab", таким образом, у вас меньше проблем, и это хорошая практика, когда вы будете работать с другими людьми.


в соответствии с вашими строками Doc

код:

b=False
len2=len(dna2)
i=0
for j in dna1:
    temp=dna1[i:i+len2]
    if temp == dna2:
        b=True
    i=i+1
return b

этот большой код можно упростить до одной строки

return dna1.find(dna2)>=0

также, если u не хорош с отступами в Редакторе "vim", его хорошо практиковать в IDLE3