Начальная точка переменной Python для вложенного цикла for - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь создать вложенный цикл 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 ]

1 голос
/ 06 мая 2019

Разве это не просто вопрос размещения оператора 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
>>> 
0 голосов
/ 06 мая 2019

Вы можете управлять этим в одном цикле, если вы используете дополнительное 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...