我正在尝试创建一个嵌套的for循环,其中,内部循环在第一次运行时将具有不同的范围,然后为每个后续循环使用不同的范围。
该程序是一个数独求解器。通过在9x9板上(board[k][l]
)上放置一个位置,检查条件,然后直接移到左侧的板位置(board[k][l-1]
)来工作。
如果l
为0,则需要移至上一行(k-1
),并向右移最远的位置,其中l
等于8。
我遇到的问题是在内部循环的第一次迭代中,循环不会总是以l
等于8开始。
例如,用户可以选择正方形board[3][3]
。
然后,该函数应检查board[3][2]
然后board[3][1]
然后board[3][0]
然后board[2][8]
等
以下代码仅在l=8
for i in range(k, -1, -1):
for j in range(l, -1, -1):
为清楚起见,我可以使用多个for循环来达到所需的结果,但是我试图使这段代码更简洁:
k = user selection
l = user selection
for j in range(l, 0, -1):
test(k,j)
for i in range(k-1, -1, -1):
for j in range(9, 0 , -1):
test(i,j)
我不喜欢这样做有两个原因,首先,如果k或l从0开始,我们会遇到一个问题,其次,这里似乎不需要使用两个for循环。
答案 0 :(得分:1)
不仅仅是在其中放置if
语句吗?
>>> k = 8
>>> l = 3
>>> run_one = True
>>> for i in range(k, -1, -1):
... if run_one:
... run_one = False
... for j in range(l, -1, -1):
... print(i, j)
... else:
... for j in range(8, -1, -1):
... print(i, j)
...
8 3
8 2
8 1
8 0
7 8
7 7
7 6
7 5
7 4
7 3
7 2
7 1
7 0
6 8
6 7
6 6
6 5
6 4
6 3
6 2
6 1
6 0
5 8
5 7
5 6
5 5
5 4
5 3
5 2
5 1
5 0
4 8
4 7
4 6
4 5
4 4
4 3
4 2
4 1
4 0
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
3 0
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
2 0
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
1 0
0 8
0 7
0 6
0 5
0 4
0 3
0 2
0 1
0 0
>>>
答案 1 :(得分:0)
如果使用额外的if
(或类似此处的三元表达式),则可以在一个循环中进行管理:
l = 2
k = 5
for i in range(l, -1, -1):
max = k if i == l else 9
for j in range(max, 0, -1):
print("{},{}".format(i,j))
给予:
2,5
2,4
2,3
2,2
2,1
1,9
1,8
1,7
1,6
1,5
1,4
1,3
1,2
1,1
0,9
0,8
0,7
0,6
0,5
0,4
0,3
0,2
0,1