Matlab转Python:嵌套循环为何使z值变为原结果的两倍?
Python循环结果与Matlab两倍差异的错误分析
需要让Python中z的索引逻辑与Matlab保持一致(Matlab的991对应Python的990),但当前Python代码运行结果z=1980,是Matlab结果的两倍,现分析错误原因:
原Matlab代码(运行结果z=991)
z = 1; for i = 1:15 test_timer1 = 1; for tester1 = 1:12 test_timer2 = 1; for tester2 = 1:12 if test_timer2 > test_timer1 z = z+ 1; end test_timer2 = test_timer2 + 1; end test_timer1 = test_timer1 + 1; end end
问题Python代码(运行结果z=1980)
z=0 for i in range(15): test_timer1 = 0 for tester1 in range(12): test_timer2 = 0 for tester2 in range(12): if test_timer2 > test_timer1: z += 1 test_timer2 += 1 test_timer1 += 1
错误原因
核心问题是**test_timer1 += 1的缩进位置错误**:
- Matlab中,
test_timer1 = test_timer1 + 1;是在tester1循环内部(每次tester1循环结束后执行),因此test_timer1会从1递增到12,每个tester1循环对应不同的test_timer1值。 - Python中,当前代码的
test_timer1 += 1是在tester1循环外部,整个tester1的12次循环中,test_timer1始终为0。此时每次tester2循环里,满足test_timer2 > 0的次数是11次(test_timer2从0到11,共12次循环,排除0的情况),12次tester1循环的总次数为12*11=132,乘以15次i循环后得到15*132=1980,恰好是正确结果的两倍。
修正后的Python代码(运行结果z=990,对应Matlab的991)
z=0 for i in range(15): test_timer1 = 0 for tester1 in range(12): test_timer2 = 0 for tester2 in range(12): if test_timer2 > test_timer1: z += 1 test_timer2 += 1 # 将该行缩进,放入tester1循环内部 test_timer1 += 1
内容的提问来源于stack exchange,提问作者Pave
相关产品推荐
相关产品推荐

