Различия между версиями 4 и 5
Версия 4 от 2012-04-27 23:11:29
Размер: 2433
Редактор: FrBrGeorge
Комментарий:
Версия 5 от 2012-04-27 23:36:28
Размер: 3656
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 23: Строка 23:
  1. Решить [[../2012-04-18#letter|«задачу про письмо»]]
   * хоть как-нибудь, но быстро
   * в две строки (опять пригодится `reduce()`)
    * подсказка: возможно, станет проще, если введённую строку превратить в список `True` и `False`, например, так: `map(str.isupper,raw_input())`
   * в одну строку
    * подсказка: если некоторый объект `S` по ходу вычислений нужен несколько раз (например, в виде `S, [S.count(True), S.count(True), 0]`), а сам этот обект — функция, вычисление которой нельзя повторить (например, `raw_input()`), помогает применение `(labmda S: S, [S.count(True), S.count(True), 0])(raw_input())`. Обратите внимание на то, что результат выражения `labmda S: S, [S.count(True), S.count(True), 0]` в первых скобках — ''функция'', которая применяется к выражению во вторых скобках

Элементы функционального программирования

  • Выражения-конструкторы списков ([… for …]) и генераторов ((… for …))

  • Функции map() и filter()

  • Функция reduce()

  • Цикл как map() на списке

  • Лямбда-функции

Домашнее задание

  1. {i} Прочитать в учебнике про Лямбда-функции и инструменты фунционального программирования.

  2. Решить «задачу про матанализ»

    • в три строчки
      • подсказка: первоначальное присваивание можно сделать одной строкой
    • в две строчки
      • подсказка: чтобы присвоить элементу списка некоторое значение (например, в теле лямбда-функции) можно вместо P[i]=k использовать P.__setitem__(i,k)

      • грубая подсказка: __setitem__ возвращает None

    • в одну строку вообще без присваиваний (теперь это уж дело совсем простое)
  3. Решить «задачу про письмо»

    • хоть как-нибудь, но быстро
    • в две строки (опять пригодится reduce())

      • подсказка: возможно, станет проще, если введённую строку превратить в список True и False, например, так: map(str.isupper,raw_input())

    • в одну строку
      • подсказка: если некоторый объект S по ходу вычислений нужен несколько раз (например, в виде S, [S.count(True), S.count(True), 0]), а сам этот обект — функция, вычисление которой нельзя повторить (например, raw_input()), помогает применение (labmda S: S, [S.count(True), S.count(True), 0])(raw_input()). Обратите внимание на то, что результат выражения labmda S: S, [S.count(True), S.count(True), 0] в первых скобках — функция, которая применяется к выражению во вторых скобках

Условные обозначения

  • {o} — тема по Linux

  • <!> ­— необязательная тема

  • {i} — теоретическое задание

  • {*} — тема для самостоятельного изучения


CategoryClass CategoryVmsh

LecturesVMSH/2012-04-25 (последним исправлял пользователь FrBrGeorge 2012-05-02 08:59:46)