Нежелательный вывод во вложенном цикле while - PullRequest
0 голосов
/ 22 сентября 2019

Моя подсказка: «Напишите программу, которая использует два вложенных цикла while для печати строк и столбцов сетки 3x3 (с номерами от 1 до 3), исключая ячейки по диагонали (т. Е. Где строка и столбец имеютто же самое значение.) Первые три строки вывода вашей программы должны выглядеть следующим образом:

1 2
1 3
2 1

До сих пор я закодировал это довольно хорошо, но я застрял с одним дополнительным нежелательным выводом. Как мне удалить его?

row = 0
while row < 3:
    col = 0
    row += 1
    while col < 3:
        col += 1
        if row == col:
            col += 1
        print (row, col)

ожидаемый результат должен быть:

  1 2  
  1 3
  2 1
  2 3
  3 1
  3 2

, но также включен 3 4.

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Ваше условие if должно измениться на (i, j), только если они не равны.

i = 1 
while i < 4:
    j = 1
    while j < 4:
        if i != j:
            print(i, j)
        j += 1
    i += 1
# 1 2
# 1 3
# 2 1
# 2 3
# 3 1
# 3 2

Также я начал итерацию с 1 вместо 0, потому что это выглядит немного лучше организованным для меня.

PS, более идиоматический способ сделать это - использовать списокпонимание.

[(i, j) for i in range(1, 4) for j in range(1, 4) if i != j]
# [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
0 голосов
/ 22 сентября 2019

Это потому, что где row и col равны 3, вы увеличиваете col до 4 и печатаете.Изменить на:

row = 0
while row < 3:
    col = 0
    row += 1
    while col < 3:
        col += 1
        if row != col:
            print (row, col)
...