Вопрос:

3. Квадраты при игре в крестики-нолики пронумерованы, как показано на рисунке: 1 | 2 | 3 --+---+-- 4 | 5 | 6 --+---+-- 7 | 8 | 9 Заданы номера трёх квадратов, N1, N2, N3, причём N1 < N2 < N3. Напишите программу, проверяющую, лежат ли квадраты на одной вертикали.

Смотреть решения всех заданий с листа

Ответ:

Привет! Давай напишем программу, которая проверит, лежат ли три выбранных квадрата на одном вертикальном ряду в игре "крестики-нолики".

Логика решения:

Сначала нам нужно понять, как номера квадратов соотносятся с их положением на поле. Поле 3x3:

  • Верхний ряд: 1, 2, 3
  • Средний ряд: 4, 5, 6
  • Нижний ряд: 7, 8, 9

Нас интересуют вертикали. Это значит, что номера квадратов должны отличаться только номером ряда, а номер столбца должен быть одинаковым. Давайте посмотрим, какие номера находятся в одном столбце:

  • Первый столбец: 1, 4, 7
  • Второй столбец: 2, 5, 8
  • Третий столбец: 3, 6, 9

Программа должна получить три номера (N1, N2, N3), убедиться, что они идут по возрастанию (N1 < N2 < N3), и затем проверить, принадлежат ли они одному из этих трех наборов.

Программа на Python:

def check_vertical(n1, n2, n3):
    """
    Проверяет, лежат ли квадраты с номерами n1, n2, n3 на одной вертикали.
    Предполагается, что n1 < n2 < n3.
    """
    # Определяем, какие номера находятся в каждом столбце
    col1 = {1, 4, 7}
    col2 = {2, 5, 8}
    col3 = {3, 6, 9}

    # Собираем все номера в одно множество для удобства проверки
    numbers = {n1, n2, n3}

    # Проверяем, принадлежит ли всё множество одному из столбцов
    if numbers.issubset(col1) or numbers.issubset(col2) or numbers.issubset(col3):
        return True
    else:
        return False

# Пример использования:
# Ввод данных (предполагаем, что пользователь ввел их в правильном порядке)

# Тест 1: Вертикаль
n1, n2, n3 = 1, 4, 7
if n1 < n2 < n3:
    if check_vertical(n1, n2, n3):
        print(f"Квадраты {n1}, {n2}, {n3} лежат на одной вертикали.")
    else:
        print(f"Квадраты {n1}, {n2}, {n3} НЕ лежат на одной вертикали.")
else:
    print("Номера введены некорректно (должны быть по возрастанию).")

# Тест 2: Не вертикаль
n1, n2, n3 = 1, 5, 9
if n1 < n2 < n3:
    if check_vertical(n1, n2, n3):
        print(f"Квадраты {n1}, {n2}, {n3} лежат на одной вертикали.")
    else:
        print(f"Квадраты {n1}, {n2}, {n3} НЕ лежат на одной вертикали.")
else:
    print("Номера введены некорректно (должны быть по возрастанию).")

# Тест 3: Неправильный порядок
n1, n2, n3 = 7, 1, 4
if n1 < n2 < n3:
    if check_vertical(n1, n2, n3):
        print(f"Квадраты {n1}, {n2}, {n3} лежат на одной вертикали.")
    else:
        print(f"Квадраты {n1}, {n2}, {n3} НЕ лежат на одной вертикали.")
else:
    print("Номера введены некорректно (должны быть по возрастанию).")

Объяснение кода:

  • Мы создаем три множества (set): col1, col2, col3, которые содержат номера квадратов, находящихся в каждом из трех столбцов.
  • Функция check_vertical принимает три номера (n1, n2, n3).
  • Мы собираем эти три номера в одно множество numbers.
  • Затем мы проверяем, является ли множество numbers подмножеством col1, ИЛИ col2, ИЛИ col3. Метод issubset() идеально подходит для этого.
  • Если все три номера принадлежат одному из столбцов, функция возвращает True, иначе — False.
  • В примерах использования мы сначала проверяем, что номера введены по возрастанию (n1 < n2 < n3), а затем вызываем нашу функцию.

Ответ: Программа проверяет принадлежность всех трех номеров к одному из предопределенных множеств, соответствующих вертикальным столбцам поля.

ГДЗ по фото 📸
Подать жалобу Правообладателю

Похожие