Пользователь в первой строке вводит размер матрицы NxM. Далее он вводит N строк с M числами. Нужно найти максимальное число в этой матрице и вывести позицию этого максимума в матрице. Вывести надо первое максимальное значение, если максимумов несколько.
Пример:
3 4
0 3 2 4
2 3 5 5
5 1 2 3
Максимум: 5
Позиция: 1 2
Пользователь в первой строке вводит размер матрицы NxN. Нужно вывести матрицу, заполненную по правилам:
На главной диагонали должны быть выведены 0
На следующей диагонали - 1
Далее - 2 и так далее
Пример:
5
0 1 2 3 4
1 0 1 2 3
2 1 0 1 2
3 2 1 0 1
4 3 2 1 0
Пользователь в первой строке вводит размер матрицы NxM. Далее он вводит N строк с M числами. Нужно транспонировать эту матрицу. Транспонирование – это когда столбцы и строки меняются местами.
Пример:
3 2
1 2 3
4 5 6
Транспонирование:
1 4
2 5
3 6
– А как вообще решение подобных задач, типа транспонирования, мне может пригодиться?
– Хоть это не очевидно, но работа с транспонированием помогает взглянуть на данные "под другим углом". Очень часто используется в аналитике, графике, работы с массивами данных и много где ещё. :)
Часто нужно проверять наличие данных в подмассивах, например, совпадение данных пользователей внутри большого списка пользователей. Напишите функцию (!) которая принимает два аргумента: список с вложенными списками (они могут быть разной длины), и список, который нужно проверить на то, является ли он подсписком. Если да - верните True, если нет - False.
Остальную программу опишите так, чтобы пользователь вводил сначала матрицу NxM а потом подсписок для проверки.
Пример:
3 2
1 2 3
4 5 6
под-список: 4 5 6
True
В этой задаче мы будем работать с двумерным списком (вложенными списками) для отображения шахматной доски. Пользователь вводит название шахматной фигуры ("пешка", "ладья", "конь", "слон", "ферзь" или "король") и её позицию (например, "d4"). Ваша задача — отобразить доску, пометив позицию фигуры и отметить возможные клетки для её хода звёздочками (*).
Создайте матрицу размером 8x8, где каждая клетка обозначена пустым символом '.'.
Преобразуйте пользовательский ввод координаты фигуры (например, "d4") в индексы матрицы.
Добавьте на доску фигуру, используя символ для её обозначения:
Пешка: 'P'
Ладья: 'R'
Конь: 'N'
Слон: 'B'
Ферзь: 'Q'
Король: 'K'
Рассчитайте возможные ходы фигуры, добавив символ '*' на клетки, куда она может пойти.
Выведите итоговую доску на экран.
Добавьте валидацию ввода. Если пользователь вводит некорректное имя фигуры или позицию за пределами доски, программа должна вывести ошибку.
Используйте ASCII-коды, чтобы преобразовать букву из позиции, например, ord('d') - ord('a') для столбцов.
Реализуйте логику для каждой фигуры отдельно:
Пешка ходит только вперёд.
Ладья движется по прямым линиям.
Конь прыгает буквой "Г".
Слон движется по диагоналям.
Ферзь движется как ладья и слон.
Король движется на одну клетку во всех направлениях.
Пример:
Введите название фигуры (пешка, ладья, конь, слон, ферзь, король): ладья
Введите позицию фигуры (например, d4): d4
. . . * . . . .
. . . * . . . .
. . . * . . . .
. . . * . . . .
. . . R . . . .
. . . * . . . .
. . . * . . . .
. . . * . . . .
В этой задаче вы реализуете простую файловую систему с помощью вложенных списков. У пользователя есть команды для навигации по папкам, просмотра содержимого текущего уровня и открытия файлов. Вы будете использовать функции для реализации этих команд. Программа должна отслеживать текущий уровень вложенности, а также обрабатывать ошибки, если пользователь вводит некорректные команды или пытается перейти к несуществующему файлу или папке.
Структура файловой системы:
Вложенные списки представляют файловую систему. Если элемент — папка, то это список, где:
Первый элемент (индекс 0) — это название папки.
Второй элемент (индекс 1) — это список с файлами и подкаталогами внутри папки.
Если элемент — строка, то это файл.
Пример файловой системы:
filesystem = [
"file1.txt",
"file2.txt",
["folder1", [
"file3.txt",
["subfolder1", ["file4.txt"]],
"file5.txt"
]],
["folder2", ["file6.txt"]]
]
Команды пользователя:
ls — выводит список всех файлов и папок в текущем каталоге.
cd <folder> — переходит внутрь указанной папки, если она существует в текущем каталоге.
open <file> — открывает файл, если он существует в текущем каталоге.
Программа должна запоминать текущий уровень вложенности. Пользователь может перемещаться только на один уровень вверх или вниз.
Команда cd .. возвращает пользователя на уровень выше.
Если пользователь находится в верхней папке, cd .. должна выдавать ошибку.
Если пользователь вводит некорректное имя папки или файла, программа должна выдавать сообщение об ошибке.
Функция для отображения содержимого ls(catalogue)
Принимает текущий каталог как аргумент.
Выводит все файлы и папки на текущем уровне.
Функция для перехода в папку cd(catalogue, folder)
Принимает текущий каталог и имя папки.
Если папка существует, возвращает вложенный список папки.
Если пользователь вводит .., возвращает пользователя на уровень выше, если это возможно.
Функция для открытия файла open(catalogie, file)
Принимает текущий каталог и имя файла.
Проверяет, существует ли файл, и выводит сообщение, что файл открыт.
Придумайте свой способ реализации текущей папки. Самый простой способ - это записывать индексы местоположения пользователя в список. Например, [2, 1] из примера будет означать путь к папке folder1/subfolder1
Пример:
Текущая директория: /
> ls
file1.txt
file2.txt
folder1/
folder2/
> cd folder1
Текущая директория: /folder1
> ls
file3.txt
subfolder1/
file5.txt
> cd subfolder1
Текущая директория: /folder1/subfolder1
> ls
file4.txt
> open file4.txt
Файл file4.txt открыт!
> cd ..
Текущая директория: /folder1
> cd folder2
Ошибка: folder2 не найдена в текущем каталоге.
> cd ..
Текущая директория: /
> cd folder2
Текущая директория: /folder2
> ls
file6.txt