嵌套for循环的Python变量起点

时间:2019-05-06 16:36:36

标签: python for-loop

我正在尝试创建一个嵌套的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循环。

2 个答案:

答案 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