以下是代码,是problem 11 in Euler Project解决方案的一部分:
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个,它会更难追踪)但是它更优雅,比如编码i < (GRID_WIDTH - NUM_ITEMS_IN_PRODUCT)
在循环检查。
P.S。我已经解决了问题,我在谈论代码的风格
答案 0 :(得分:7)
Spoiler:这是我problem 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来循环播放!
答案 1 :(得分:1)
你至少可以成功
except IndexError:
break
无论如何,是的,我相信这是一种代码味道,并且没有比
更清晰for i in range(gridsize - num_items_in_product):