问题描述
||
这是代码,是Euler Project问题11解决方案的一部分:
sum_d = 0
j = 0
while j < 20:
i = 0
while i < 20:
try:
sum_d = grid[j][i] * grid[j+1][i+1] * grid[j+2][i+2] * grid[j+3][i+3]
if sum_d > result:
result = sum_d
except IndexError:
pass
i += 1
j += 1
我的问题是捕获这些异常是否被视为代码异味?我可以看到调试这样的代码会更困难(例如,我不小心循环了19个项目而不是20个项目,将很难跟踪),但是比起编码“ 1”要优雅得多
在循环检查。
附言我已经解决了这个问题,我在说代码风格
解决方法
剧透:这是我的问题11解决方案的一部分。
for x in range(0,16):
for y in range(0,16):
prod = p[y][x] * p[y+1][x+1] * p[y+2][x+2] * p[y+3][x+3]
m = max(m,prod)
用异常代替基本控制结构总是不好的主意。这次您可以绕开数字0..15!
另外,如果您多加添花,您会得到一个产品,而不是总和。 ;)
, 你至少可以做到
except IndexError:
break
无论如何,是的,我相信这是代码的味道,不,它不比
for i in range(gridsize - num_items_in_product):