web-dev-qa-db-ja.com

インデントでのタブとスペースの一貫性のない使用

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は初めてです。上記で貼り付けたプログラムでは、具体的に「if temp == dna2:」という行で「インデントでのタブとスペースの一貫性のない使用」というエラーが表示されます。インデントが間違っている方法を見つけるのに誰かが私を助けてくれますか?

12
knightcool

インデントにスペースとタブが混在していることを意味します。タブまたはスペースと一致するように修正する必要があります。

20
poke

行を注意深く見ると

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

コードでは、各行の先頭の「スペース」が異なる「構築」されていることがわかります。ある場合には、タブと他のスペースを使用します。または、両方にタブとスペースがある場合、それらは異なる組み合わせで使用されます。

これを調べるには、各行の先頭にカーソルを置き、右矢印キーを使用して文字を「ウォーク」します。各行でカーソルの動きが異なることがわかります。

修正するには、各行の先頭にあるタブとスペースを削除して、各行に同じ文字を挿入し直します。

将来的に避けるために、インデントするタブキーORスペースキーのみを使用するように訓練し、タブをスペースに自動的に変換するようにエディターを設定することを検討してください。

4
Larry Lustig

「良い」IDEを持っていると仮定すると、タブキーを設定して「タブ」ではなく4つのスペースを作成するのが最善です。そうすれば、問題が少なくなり、他の人と作業するときの良い習慣になります。

1
razi

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

この非常に大きなコードは1行に簡略化できます

return dna1.find(dna2)>=0

また、uが 'vim'エディターのインデントに不向きな場合は、 IDLE で練習するのが良いでしょう。

0
D3vil_Mind