Итераторы и генераторы. Работа с файлами
Функция-генератор, оператор yield. Использование функции-генератора в цикле for
Что возвращает функция-генератор. Метод next(). Ручное использование next()
Метод __iter__(). Стандартные объекты, имеющие этот метод.
Функция file() (open()). Открытие файла на чтение, запись, дополнение. Методы read() и write()
Методы readline(), readlines(), xreadlines(). Оператор print >> file, …
- Файл как итератор
Домашнее задание
Прочитать про запись и чтение фйлов, итераторы и генераторы ( обратите внимание на выражения-генераторы)
"Задачи по программированию", 6.13.21. Дан файл Bibl, содержащий сведения о книгах. Сведения о каждой из книг — это фамилия автора, название и год издания. Найти названия книг данного автора, изданных начиная с 1960 г. Имеется в виду — ввести фамилию автора, вывести названия книг.
- Написать генератор входных данных
Решение более сложной задачи: имя может содержать пробелы, а название выделяется «лапками»: kufas-6.13.21.py. Генератор входных данных на основе «Анны Карениной».
Дан очень длинный файл. Отсортировать его построчно. Условие: запрещено хранить все данные из файла целиком в памяти, зато разрешено хранить промежуточные файлы и переписывать исходный файл. Замечание: я понимаю, что если файл не лезет целиком в память, то через диск он будет сортироваться целую вечность... но таковы условия. Ах да, чуть не забыл. Если у кого не получится, то для подсказки нажмите "комментарии" в шапке этой страницы. FrBrGeorge .
- Промежуточные файлы разрешено не удалять.
Удалить промежуточные файлы с помощью os.unlink()
Решение, в котором создаётся очень много файлов: sort_file.py
- Создание тестового файла в Linux:
dd if=/dev/urandom count=1 | hexdump | sort -k2 > тестовый_файл
Написать свой собственный генератор псевдослучайных чисел — функцию-генератор 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
Условные обозначения
— тема по Linux
— необязательная тема
— теоретическое задание
— тема для самостоятельного изучения