Итераторы и генераторы. Работа с файлами

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

  1. {i} Прочитать про запись и чтение фйлов, итераторы и генераторы ( {*} обратите внимание на выражения-генераторы)

  2. "Задачи по программированию", 6.13.21. Дан файл Bibl, содержащий сведения о книгах. Сведения о каждой из книг — это фамилия автора, название и год издания. Найти названия книг данного автора, изданных начиная с 1960 г. Имеется в виду — ввести фамилию автора, вывести названия книг.

    • Написать генератор входных данных
    • Решение более сложной задачи: имя может содержать пробелы, а название выделяется «лапками»: kufas-6.13.21.py. Генератор входных данных на основе «Анны Карениной».

  3. Дан очень длинный файл. Отсортировать его построчно. Условие: запрещено хранить все данные из файла целиком в памяти, зато разрешено хранить промежуточные файлы и переписывать исходный файл. Замечание: я понимаю, что если файл не лезет целиком в память, то через диск он будет сортироваться целую вечность... но таковы условия. Ах да, чуть не забыл. Если у кого не получится, то для подсказки нажмите "комментарии" в шапке этой страницы. :) FrBrGeorge .

    1. Промежуточные файлы разрешено не удалять.
    2. {*} Удалить промежуточные файлы с помощью os.unlink()

      • Решение, в котором создаётся очень много файлов: sort_file.py

      • Создание тестового файла в Linux:
            dd if=/dev/urandom count=1 | hexdump | sort -k2 > тестовый_файл
  4. Написать свой собственный генератор псевдослучайных чисел — функцию-генератор NewRandom(), которая возвратит собственно итератор (назовём его Random). Метод Random.Next() порождать последовательность случайных чисел в диапазоне от 0 до 1. Пример:

    • Python 2.7.2 (default, Jan 23 2012, 07:37:31) 
      [GCC 4.5.3 20120111 (ALT Linux 4.5.3-alt1)] on linux2
      Type "help", "copyright", "credits" or "license" for more information.
      >>> from math import *
      >>> def NewRandom( ... определение ... :)
      ...
      >>> Random=NewRandom()
      >>> Random.next()
      0.9781209703
      >>> Random.next()
      0.3345186076
      >>> Random.next()
      0.1635132099
      >>> Random=NewRandom()
      >>> Random.next()
      0.9781209703
      >>> Random.next()
      0.3345186076
      >>> Random.next()
      0.1635132099
      >>> Random.next()
      0.6689732334
      >>>
    • Вычислять Fn по формуле "дробная часть числа sin(Fn-1)*100"

    • Вычислить Fn по формуле из Википедии

    • Посчитать частоту появления целых чисел 0…49 в достаточно длинной последовательности {int(50*Fn)}

      • {*} ограничить с помощью time.time() время вычисления последовательности, а не её длину

      • Нарисовать гистограмму в PyGame

      • Решение для ГПСЧ с sin(Fn-1)*100: SinRand.py

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


CategoryClass CategoryVmsh

LecturesVMSH/2012-01-25 (last edited 2012-02-01 12:54:56 by FrBrGeorge)