2-мерный массив

Самостоятельная работа по информатике (10 класс) – Двумерный массив предсказаний

Самостоятельная работа по информатике

Класс: 10  |  Язык: Python  |  Темы: двумерные массивы (списки списков), циклы, условный оператор, системы счисления

На прошлом уроке вы создавали программу‑оракул с одномерным массивом предсказаний. Сегодня мы расширим функционал: предсказания будут храниться в двумерном массиве (матрице), а способ выбора предсказания можно будет изменять. Это позволит лучше освоить работу с индексами и вложенными списками.

💡 Напоминание: 36‑ричная система счисления использует цифры 0–9 и буквы A–Z (A=10, B=11, …, Z=35). Слово, например ABC, интерпретируется как число: A·36² + B·36¹ + C·36⁰.

📌 Двумерный массив предсказаний

Вместо одного списка предсказаний создайте матрицу (список списков) размером 3×4 (3 строки, 4 столбца) или любого другого размера (не менее 3×3). Например:

predictions = [ [“Вы встретите старого друга”, “Неожиданный подарок”, “Удача в делах”, “Романтический вечер”], [“Будьте внимательны к деталям”, “Деньги придут неожиданно”, “Путешествие скоро”, “Новая возможность”], [“Здоровье порадует”, “Исполнится мечта”, “Осторожнее в общении”, “Вдохновение нахлынет”] ]

Каждый элемент доступен по двум индексам: predictions[строка][столбец].

🔹 Обязательная часть (задание 1)

Программа «Оракул 2D»
Напишите программу, которая:
  1. Создаёт двумерный список предсказаний (минимум 3 строки, 3 столбца).
  2. Запрашивает у пользователя слово на английском языке (только буквы A–Z, a–z). Проверяет корректность ввода: если в слове есть недопустимые символы (цифры, знаки, русские буквы), программа выводит сообщение об ошибке и повторяет запрос, пока не будет введено корректное слово.
  3. Преобразует слово в число, считая его записанным в 36‑ричной системе счисления (буквы A–Z имеют значения 10–35). Приводит все буквы к верхнему регистру.
  4. Переводит полученное 36‑ричное число в десятичную систему (можно использовать встроенную функцию int(word, 36) или написать свой алгоритм).
  5. Вычисляет два индекса для выбора предсказания из двумерного массива:
    — общее количество предсказаний = rows * cols (например, 3×4 = 12).
    — вычисляется total_index = десятичное_число % (rows * cols).
    — строка = total_index // cols, столбец = total_index % cols.
  6. Выводит предсказание, используя полученные индексы: predictions[строка][столбец].

📎 Подсказки: для проверки строки используйте .isalpha(). Для перевода в верхний регистр — .upper(). Встроенная функция int(word, 36) работает только с буквами A–Z.

⭐ Дополнительные задания (повышают оценку)

Задание 2. Выбор способа вычисления индекса
Модифицируйте программу так, чтобы пользователь мог выбрать один из двух режимов:
  • Режим 1 (классический): индекс вычисляется, как описано в задании 1 (total_index = число % (rows*cols)).
  • Режим 2 (сумма цифр): сначала находится десятичное число, затем вычисляется сумма его цифр (например, для числа 123 → 1+2+3=6). После этого total_index = сумма_цифр % (rows*cols), а строка и столбец определяются так же, как в режиме 1.
Перед вводом имени программа должна предложить выбрать режим (1 или 2). При некорректном вводе режима — повторить запрос. Реализуйте функцию для вычисления суммы цифр числа (можно через преобразование в строку или через цикл).
Задание 3. Многократные предсказания
Добавьте в программу цикл, который позволяет пользователю получать предсказания несколько раз. После вывода предсказания программа должна спрашивать: "Хотите ещё одно предсказание? (да/нет): ". Если пользователь отвечает «да» (или «yes», «д», «y»), то программа запрашивает следующее имя (и, если реализовано, снова предлагает выбрать режим). Если отвечает «нет» — завершает работу. В конце программа выводит сообщение: "Спасибо! Было сделано предсказаний: X", где X — количество обработанных имён.
Задание 4. Работа с файлом (для продвинутых)
Вместо жёстко заданного двумерного массива загружайте предсказания из текстового файла predictions_2d.txt. Формат файла: первая строка — количество строк, вторая — количество столбцов, затем идут сами предсказания построчно (по одному предсказанию на строку). Например:
3
4
Вы встретите старого друга
Неожиданный подарок
Удача в делах
Романтический вечер
Будьте внимательны к деталям
Деньги придут неожиданно
Путешествие скоро
Новая возможность
Здоровье порадует
Исполнится мечта
Осторожнее в общении
Вдохновение нахлынет
Если файл не найден, используйте массив по умолчанию. Также реализуйте возможность добавить новое предсказание в файл через программу (по желанию).

📋 Пример работы программы (обязательная часть)

>> Введите слово на английском: Hello
>> Ваше предсказание: Деньги придут неожиданно

>> Введите слово на английском: 123abc
>> Ошибка: слово должно содержать только латинские буквы. Попробуйте снова.
>> Введите слово на английском: Python
>> Ваше предсказание: Здоровье порадует

🧾 Критерии оценки

  • «3» — выполнена обязательная часть (задание 1). Программа корректно обрабатывает ввод, переводит слово в число, корректно вычисляет индексы для двумерного массива и выводит предсказание.
  • «4» — выполнены задания 1 и 2 (выбор режима вычисления индекса). Программа работает без ошибок, код структурирован.
  • «5» — выполнены задания 1, 2 и 3 (многократные предсказания). Программа позволяет получать предсказания несколько раз, корректно ведёт подсчёт.
  • Дополнительный плюс — реализация задания 4 (работа с файлом) при условии выполнения всего остального.
⚠️ Важно: код должен быть аккуратно оформлен, содержать комментарии к основным блокам, самым перым комментарием должна быть ваша фамилия. Имена переменных — осмысленные. Программа не должна завершаться с ошибками при любых действиях пользователя.

📎 Полезные ссылки (напоминание)

  • Проверка строки на буквы: слово.isalpha() — возвращает True, если все символы буквы.
  • Перевод из 36-ричной системы: int(слово_в_верхнем_регистре, 36).
  • Количество строк и столбцов в двумерном списке: rows = len(predictions), cols = len(predictions[0]).
  • Бесконечный цикл с условием выхода: while True: ... if ответ == "нет": break.
  • Сумма цифр числа: можно преобразовать число в строку и пройти по символам: sum(int(d) for d in str(число)).
  • Работа с файлами: open(), readlines(), write().
Успешной работы! Если возникают вопросы — поднимите руку, учитель подойдёт.

Прокрутить вверх