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

Я должен «написать программу, которая использует два вложенных цикла while для печати строк и столбцов сетки 3x3 (с номерами от 1 до 3), исключая ячейки по диагонали (т. Е. Там, где строка и столбец имеютто же значение). "

Я попытался напечатать строку, col = 1, 1, добавив по одному на каждую итерацию.

row, col = 1, 1

while row != 3 and col != 3:
    row += 1
    col += 1
print (row, col)

Результат должен выглядеть следующим образом: 1 2 1 3 2 1вертикально 12 сверху, 13 посередине и 21 снизу.

1 Ответ

0 голосов
/ 20 сентября 2019

A вложенный , в то время как цикл обычно означает секунду внутри первого.Я не знаю, какой язык вы используете, но вы должны рассмотреть что-то вроде:

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

Это не делает диагональные проверки, но демонстрирует идею вложенного цикла:

  1. Внешний цикл начинается с row = 1 и col = 1.
  2. Внутренний цикл начинается.
  3. Внутренний цикл считает столбцы 1-3, затем выходит;
  4. Внешний цикл сбрасывает col в 1 и увеличивает строку
  5. Следующая итерация внешнего цикла начинается с новой строки.
  6. Шаги 2-5 повторяются до тех пор, пока row= 4, после чего внешний цикл завершается, и все готово.

Вот пример такого рода вещей в javascript, включая проверку диагонали:

let row = 1;
let col = 1;

// do this block until row > 3
while (row <= 3) {

  // declare a new array to collect this row's output
  let output = []; 

  // do this block until col > 3
  while (col <= 3) {

    // add the column or '-' to the end of the array
    output.push( row === col ? '-' : col );

    // increment the column
    col++;
  }
  
  // row finished. emit the collected
  // row with a space between the numbers
  console.log(output.join(' '));

  // reset column to 1
  col = 1;

  // do the next row
  row++;
}
...