Различия между версиями 7 и 8
Версия 7 от 2022-12-05 15:19:45
Размер: 5818
Редактор: FrBrGeorge
Комментарий:
Версия 8 от 2022-12-05 16:06:16
Размер: 6034
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 21: Строка 21:
  * Это просто элементы, у которых номер строки совпадает с позицией в строке   * Высота матрицы равна длине первой строки. Введём первую строку, возьмём её длину и довведём остальные.
  * Диагональ — э
то просто элементы, у которых номер строки совпадает с позицией в строке

Двумерные структуры

Списки: повторение

  • {OK} Индексация и хранение произвольных элементов

  • {i} Вводить в цикле строки (конец ввода — пустая строка), а затем вывести их в отсортированном порядке

    • просто складывать в список, а затем либо список.sort(), либо уже когда выводим — цикл по sorted(список)

  • Предположим, что несколько строк одинаковой длины — это наш «экран»
    • Начальная (нулевая) строка «экрана» — вверху, затем — первая и т. д.
    • {OK} как узнать, какой символ стоит в позиции строка № M, символ № N?

      • экран[M][N]

    • Этот экран неудобно менять.

  • Как хранить «матрицу» — прямоугольник из чисел, вроде такого?
    • 1  2  3  4
      5  6  7  8
      9 10 11 12
  • Список списков.
  • {i} модифицировать первое упражнение: ввод списка (числа через запятую) с помощью list(eval(input)) (если не делать list(), то без квадратных скобок получится tuple, а нам нужно его менять), сортировка всего списка списков (сами списки сортировать не надо), вывод

  • {i} Ввести квадратную матрицу (квадратность гарантируется), вывести её основную диагональ

    • Высота матрицы равна длине первой строки. Введём первую строку, возьмём её длину и довведём остальные.
    • Диагональ — это просто элементы, у которых номер строки совпадает с позицией в строке
  • {i} … вывести вторую диагональ (а там какая формула?)

  • {OK} Проход всех элементов двумя вложенными циклами

  • {i} Ввести матрицу, затем ещё одно число. Проверить, что все элементы матрицы делятся на это число.

  • {OK} Списковые сборки

    • Вида [выражение for переменная in последовательность]

    • Вида [[выражение2 for переменная2 in последовательность-выражение] for переменная in последовательность]

    • Вида [выражение for переменная1 in последовательность1 for переменная2 in последовательность2]

  • {OK} Модифицируем первое упражнение: будем вводить произвольные строки с помощью list(input()) (но без eval), а затем сразу выводить, не сортируя

    • {i} Какая структура данных получится?

    • Проверим себя)
  • {i} Как вывести такую структуру в виде «экрана»?

    • Подсказка: у нас есть метод .join(), и нам поможет "".join(строка)

  • {i} Написать функцию out(экран), в которую передаётся наш экран (т. е. массив массивов односимвольных строк), а она его красиво выводит

  • Перевернуть, наконец, экран (чтобы координаты [0][0] были слева внизу

  • {i} Позаписывать в экран произвольные символы в произвольные места и повыводить результат

    • Обратите внимание на то, что первая координата — это ордината (Y), а вторая — абсцисса (X)
  • {i} Как провести диагональ на этом экране? Вторую диагональ?

  • {OK} Как провести горизонтальный отрезок? Вертикальный?

    • {i} Напишем две функции — hline(x0, y0, x1) и vline(x0, y0, y1)

  • {OK} Как провести произвольную прямую?

    • LinePixel.png

    • $$ w = x_1 - x_0; h = y_1 - y_0; w_2 = x_2 - x_0; h_2 = y_2 - y_0 $$

    • Пропорция: $$ h/w = h_2/w_2 $$

      • т. е. $$ h_2 = (h * w_2)/w $$

      • т. е. $$ (y_2 - y_0) = ((y_1 - y_0) * (x_2 - x_0)) / (x_1 - x_0) $$

      • и значит $$ y_2 = y_0 + ((y_1 - y_0) * (x_2 - x_0)) / (x_1 - x_0) $$

    • Вариант решения: пройти по всем $$x_2$$ от $$ x_0 $$ до $$ x_1 $$ и вычислить соответствующий $$y_2$$

  • {i} Написать функцию для этого

TODO Ещё?

Д/З

  • Отщёлкать девятое занятие учебника и решить все задачи

  • Скопировать решения в соответствующие файлы и проверить, что они всё ещё работают!

    • Имена файлов — от prog_9_1.py до prog_9_6.py

  • Прислать эти 6 файлов в виде шести приложений к одному письму по адресу <uneexlectures AT cs DOT msu DOT ru>

    • В поле Subject должно быть «слово» PhilosoPython2022 (другие слова тоже можно ☺)

Python/PhilosoPython2022/13_ListsLists (последним исправлял пользователь FrBrGeorge 2022-12-05 16:06:16)