奇怪的Python代码结果

时间:2013-01-19 22:57:04

标签: 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

ii 的值是否应该迭代0到5?

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分: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

然后切换到使用四个空格而不是标签。