缩进时制表符和空格的不一致使用

14
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:"给了我一个"缩进使用不一致"的错误。请问有人能帮我找出缩进如何不正确吗?


4
在上面的代码中,我们看不到空格和制表符的区别。你可能想要发布 cat -evt <yourfile.py> 命令的输出结果,这将分别显示空格和制表符。 - Rohan
7个回答

22
这意味着您在缩进中混合使用了空格和制表符。您需要将其修复为与制表符或空格一致。

1
有人知道如何使用vim快速修复吗? - Code True
1
@jb1 如果你搜索“vim convert tabs spaces”,就会得到这个问题 - poke
我们可能同时找到了它,谢谢 :^) - Code True
谢谢,我在复制粘贴时添加了注释中的空格。 - Naresh Teli

6
如果您仔细查看这些行,
    temp=dna1[i:i+len2]
    if temp == dna2:

在你的代码中,你会发现每行开头的“空格”是以不同的方式“构建”的。在某些情况下,它使用制表符,在其他情况下使用空格,或者如果两者都有制表符和空格,则它们以不同的组合方式使用。
您可以通过将光标放置在每行开头并使用右箭头键“走过”字符来检查此项。您会发现光标在每行上移动的方式不同。
要修复,请删除每行开头的制表符和空格,并重新插入相同的字符。
为了避免这种情况发生,请训练自己只使用制表符键或空格键进行缩进,并考虑设置编辑器自动将制表符转换为空格。

3
在我的情况下,使用Visual Studio Code...
按Ctrl+Shift+P或View->命令面板。
输入
"Convert Indentation to Spaces"
按Enter键。
请注意保留HTML标签。

2

我曾经困扰于这个问题很长时间。我使用的是CentOS Ec2,发现你可以:

vim <filename>
如果你处于写入/插入模式,请按Esc键
:set list

空格将显示为行尾符,例如$符号。 这很有帮助。


2
假设您使用的是“好”的IDE,最好将制表键设置为生成4个空格而不是一个“制表符”,这样您就会遇到更少的问题,并且在与其他人一起工作时是良好的实践。

0
根据您的文档字符串
您的代码:
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

如果您在“vim”编辑器中不擅长缩进,建议练习使用IDLE3


0
如果您从其他来源复制和粘贴代码,请始终先在普通文本编辑器中复制和粘贴,然后在代码编辑器中进行缩进修正。这是解决此问题的简单方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接