2

谁能告诉我为什么下面的代码会产生这样的结果?

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?

4

2 回答 2

13

不,您return在外for循环内放置了一条语句。在第一次迭代结束时,您退出函数。这就是return语句的作用;无论您当前正在执行什么循环构造,它都会结束函数。

删除return语句,循环将一直运行到i = 5.

于 2013-01-19T23:10:47.427 回答
2

查看您的原始代码粘贴,您的缩进似乎有些奇怪,可能是由于混合了制表符和空格(很难确定,因为有时空格无法以与开始时相同的状态粘贴到 SO 中)。查看每一行:

'\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

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

于 2013-01-20T03:32:46.063 回答