Различия между версиями 12 и 13
Версия 12 от 2015-03-02 22:03:08
Размер: 7748
Редактор: localhost
Комментарий:
Версия 13 от 2015-03-04 01:36:18
Размер: 5100
Редактор: localhost
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 57: Строка 57:
 * (!SecondMax) Найти второй максимум:
   Ввести список и вывести ''второй максимум'' этого списка, т. е. элемент a∈S : ∃ b∈S : b>a и a⩾c ∀c∈S, c≠b. Если второго максимума нет, вывести '''NO'''.

   {{{
3,4,5,6,7
   }}}

   {{{
6
   }}}
 * (Else) Точки в круге:
   В первой строке ввести координаты центра круга и его радиус (три числа через запятую). Во второй строке ввести координаты точек (чётное количество чисел через запятую). Вывести '''YES''', если все точки принадлежат кругу и '''NO''', если не все.

   {{{
0,0,10
1,2,3,4,5,6,5,4,3,2
   }}}

   {{{
YES
   }}}
   
 * (!ParallelSegments) Параллельные отрезки:
   Ввести восемь чисел через запятую — ''целочисленные'' координаты 4-х попарно несовпадающих точек A,,1,,, A,,2,,, A,,3,, и A,,4,,: X,,1,,, Y,,1,,, X,,2,,, Y,,2,,, X,,3,,, Y,,3,,, X,,4,,, Y,,4,,. Вывести '''YES''', если прямая A,,1,,A,,2,, параллельна прямой A,,3,,A,,4,, (или совпадает с ней), и '''NO''' — если не параллельна.

   {{{
1,2,7,14,8,8,18,28
   }}}

   {{{
YES
   }}}
 * (!SectionShuffle) Перетасовать кортеж:
   Ввести последовательность A объектов Python через запятую и вывести кортеж, состоящий из элементов последовательности, стоящих на чётных местах — в обратном порядке (включая `A[0]`), после которых идут элементы последовательности, стоящие на нечётных местах.

   {{{
'0', 1, 2, '3', 4, 5, '6', 7, 8, '9', 10, 11
   }}}


   {{{
(10, 8, '6', 4, 2, '0', 1, '3', 5, 7, '9', 11)
   }}}
 * <!> (Labyrinth) Обход лабиринта:
  Ввести заданный построчно лабиринт размером N×N. Каждая из N строк ввода содержит N символов: «'''.'''» — проходимый участок и «'''#'''» — непроходимый. Левый верхний и правый нижний участки лабиринта проходимы. С одного проходимого участка можно попасть на соседний либо по вертикали, либо по горизонтали. Проверить, можно ли попасть из левого верхнего участка в правый нижний, и вывести '''YES''', если можно, и '''NO''', если нельзя.

  {{{
  ...........
  .#.###.###.
  .#...#...#.
  .#.#####.#.
  .#.....#.#.
  ##.###.###.
  .....#.#.#.
  .#.###.#.##
  .#...#.#...
  ##.#.###.##
  ...#.......
  }}}

  {{{
  YES
  }}}
Задачи и упражнения:
 1. <<Homework(domari:,SecondMax, Найти второй максимум)>>
 1. <<Homework(domari:,Else, Точки в круге)>>
 1. <<Homework(ejcmc:,ParallelSegments, Параллельные отрезки)>>
 1. <<Homework(ejcmc:,SectionShuffle, Перетасовать кортеж)>>
 1. <<Homework(ejcmc:,RepeatedString, Строка — повторение подстроки)>>
 1. <<Homework(ejcmc:,Labyrinth, Обход лабиринта)>>
  [[uneex:FrBrGeorge/LabyrinthWalk|спойлер]]

Командный интерпретатор; простые типы данных; управление ходом выполнения

Видеолекции: 1, 2

История Python. Командная строка

  • Россум,_Гвидо_ван

  • Влияние ЯП 80-х годов на концепцию Python (ABC, Modula, ...)
  • Мощность сообщества и кодовой базы, стандартный модули и Python Package Index

  • Свободное лицензирование

Работа в командной строке

  • Командная строка - калькулятор
  • Подсистема помощи
    • Просто help()

    • Команда help(объект) и что она делает

    • Интерактивная HTML-документация
  • Объекты Python
    • Создание объектов при интерпретации команд
    • Имена объектов и счётчик ссылок (sys.getrefcount)

    • Операция = как операция именования a == b vs. a is b

      • Изменение объекта по любому из имён
    • Области видимости, функция dir() и dir(объект)

  • Различные удобства ЯП, возникающие уже в командной строке
  • «Продвинутые» командные надстройки:

Настройка командной строки

  • История, поиск по истории (^R)
  • Достраивание имён
  • Файлы:
    • .bashrc / .pythonstartup

Логические операции, операторы ветвления и цикла

Неявная динамическая типизация в Python

  1. Любые функции (методы) применимы к любым объектам
    • Если в процессе выполнения происходит обращение к несуществующему объекту (полю), активизируется исключение
  2. Проверка существования объекта (поля) происходит в момент обращения к енму
  3. (дополнительно) Все операции над объектами (типа +, [ , () и т. п.) — спецметоды объектов

Логические выражения

  • Сравнение, в т. ч. сравнение любого объекта с любым, операция is

  • Тип bool и операции and, or и not, условные вычисления

  • Понятие о нулевом элементе (класса) и методе __nonzero__

  • Операции and и or для произвольных объектов

    • блеск и нищета конструкции вида a = b and c or d
  • Тернарная операция выражение-1 if условие else выражение-2

Множественное присваивание

Конструкции типа a,b,c=d,e,f=1,2,"". Атомарность множественного присваивания и a,b=b,a

Условный оператор и операторы цикла

  • Понятие «блок с отступом» (indented block)
  • Оператор if/elif/else, неструктурная сущность elif

  • Оператор while/break/continue. Клауза else.

  • Оператор for по итерируемому объекту (__iter__). Клауза else на примере задачи поиска.

Д/З

  • Настроить какой-нибудь IDE (например, Geany), добиться работоспособности

  • Прочитать и прощёлкать

Задачи и упражнения:

  1. (domari:SecondMax) Найти второй максимум

    Ввести список и вывести второй максимум этого списка, т. е. элемент a∈S : ∃ b∈S : b>a и a⩾c ∀c∈S, c≠b. Если второго максимума нет, вывести NO.

    Input:

    3,4,5,6,7
    Output:

    6
  2. (domari:Else) Точки в круге

    В первой строке ввести координаты центра круга и его радиус (три числа через запятую). Во второй строке ввести координаты точек (чётное количество чисел через запятую). Вывести YES, если все точки принадлежат кругу и NO, если не все.

    Input:

    0,0,10
    1,2,3,4,5,6,5,4,3,2
    Output:

    YES
  3. (ParallelSegments) Параллельные отрезки

    Ввести восемь чисел через запятую — целочисленные координаты 4-х попарно несовпадающих точек A1, A2, A3 и A4: X1, Y1, X2, Y2, X3, Y3, X4, Y4. Вывести YES, если прямая A1A2 параллельна прямой A3A4 (или совпадает с ней), и NO — если не параллельна.

    Input:

    1,2,7,14,8,8,18,28
    Output:

    YES
  4. (SectionShuffle) Перетасовать кортеж

    Ввести последовательность A объектов Python через запятую и вывести кортеж, состоящий из элементов последовательности, стоящих на чётных местах — в обратном порядке (включая A[0]), после которых идут элементы последовательности, стоящие на нечётных местах.

    Input:

    '0', 1, 2, '3', 4, 5, '6', 7, 8, '9', 10, 11
    Output:

    (10, 8, '6', 4, 2, '0', 1, '3', 5, 7, '9', 11)
  5. (RepeatedString) Строка — повторение подстроки

    Ввести непустую строку s. Найти такое наибольшее число k и такую строку t, что s совпадает со строкой t, выписанной k раз подряд. Вывести k.

    Input:

    abcabcabcabc
    Output:

    4
  6. (Labyrinth) Обход лабиринта

    Ввести заданный построчно лабиринт размером N×N. Каждая из N строк ввода содержит N символов: «.» — проходимый участок и «#» — непроходимый. Левый верхний и правый нижний участки лабиринта проходимы. С одного проходимого участка можно попасть на соседний либо по вертикали, либо по горизонтали. Проверить, можно ли попасть из левого верхнего участка в правый нижний, и вывести YES, если можно, и NO, если нельзя.

    Input:

    ...........
    .#.###.###.
    .#...#...#.
    .#.#####.#.
    .#.....#.#.
    ##.###.###.
    .....#.#.#.
    .#.###.#.##
    .#...#.#...
    ##.#.###.##
    ...#.......
    Output:

    YES


CategoryClass

Lectures/PythonIntro/2015-03-02 (последним исправлял пользователь Class1 2015-03-17 14:55:03)