奇怪的Python代码结果

奇怪的Python代码结果,python,Python,我能告诉我为什么下面的代码会生成这样的结果吗 def weird(s): print s for ii in range(len(s)): for jj in range(ii, len(s)+1): print ii, jj return if __name__=="__main__": ss="acaacb" weird(ss) 结果: acaacb 0 0 0 1 0 2 0 3 0 4 0 5 0 6

我能告诉我为什么下面的代码会生成这样的结果吗

def weird(s):
    print s

    for ii in range(len(s)):
        for jj in range(ii, len(s)+1):
            print ii, jj

    return

if __name__=="__main__":
   ss="acaacb"
   weird(ss)
结果:

acaacb
0 0
0 1
0 2
0 3
0 4
0 5
0 6

ii的值应该迭代0到5吗

否,您在外部
for
循环中放置了一个
return
语句。在第一次迭代结束时,退出函数。这就是
return
语句所做的;无论当前执行的是什么循环构造,它都会结束函数


删除
return
语句,循环将继续运行到
i=5

查看原始代码粘贴,缩进似乎有些奇怪,可能是由于制表符和空格的混合(这很难确定,因为有时空格无法在粘贴时保存下来,所以在开始时的状态下)。查看每一行:

'\n'
'\n'
'    def weird(s):\n'
'        print s\n'
'        \n'
'        for ii in range(len(s)):\n'
'            for jj in range(ii, len(s)+1):\n'
'                print ii, jj\n'
'                \n'
'        return\n'
'\n'
'    if __name__=="__main__":\n'
'\t   ss="acaacb"\n'
'\t   weird(ss)\n'
空白问题可能会导致奇怪的错误,因为代码实际上并不像您想象的那样缩进

python -tt your_program_name.py

然后切换到使用四个空格而不是制表符。

缩进在python中很重要;您确定要将返回放在您想要的位置吗?这是一个输入错误,返回语句在外部循环之外。结果保持不变,很奇怪。@pegausbupt:正如DSM所指出的,这意味着您混合了制表符和空格。请将编辑器配置为只使用空格进行缩进。谢谢!这正是我的问题。我有一些问题:(1)如何在SO中查看原始代码(2)如何避免混合空格和制表符(3)混合的潜在原因是什么?我首先使用notepad++编写代码,然后在出错时使用eclipse进行调试