Различия между версиями 4 и 5
Версия 4 от 2017-07-23 20:13:41
Размер: 5988
Редактор: ArsenyMaslennikov
Комментарий:
Версия 5 от 2017-07-23 20:15:02
Размер: 5972
Редактор: ArsenyMaslennikov
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 126: Строка 126:
    {{{#!wiki comment [[attachment:anna_solution.py|решение]] }}}     /* [[attachment:anna_solution.py|решение]] */

Работа с файлами. Множества. Словари

Работа с файлами

  • Текстовые файлы
    • open(), read() / write() / close()

    • readlines(), он же сам файл, print(..., file=)

    • "b/t" — str или bytes

    • введение в with

  • {*} вводить числа до 0, записывать в файл только положительные

    •    1        # вводить целые числа до 0, записывать в файл только положительные
         2 
         3        f = open("data", "wt")
         4        n = int(input())
         5        while n:
         6            if (n > 0):
         7                print(n, file=f)
         8            n = int(input())
         9        f.close()
      
  • файлы с данными
    • если данные наши: сериализация/десериализация, pickle (json, xml, …)

      • dump[s]()/load[s]()

    • если данные готовы: struct

      • byte order :(

      • pack()/unpack()

  • {i} Если в командной строке программы пять (с argv[0] — 6) параметров, то это:

    1. имя выходного файла
    2. имя,
    3. фамилия
    4. возраст (целое число
    5. средний балл (вещественное)
      • .. тогда сериализовать эти данные в файл;
    6. а если параметр только один (argv[1]), это имя входного файла, десериализовать их оттуда и вывести
  • {i} То же, что и выше, но с помощью struct

Словари и множества

  • Задача хранения и индексирования
    • сложных данных
    • просто слишком больших данных
    • +невосстановимое хеширование
  • Свойства хеш-функции
    • неоднозначность
    • распределённость по ОЗ (на конкретных данных!)
      • разброс для почти похожих
    • невосстановимость объекта (сравнение без раскрытия)
    ⇒ Возможности
    • индексирование
    • сортировка и поиск
    Примеры
    • a % b

    • int(sin(b)*1000)%100

    • hash(), какие объекты хешируются

    • ...
    • {*} если есть различные значения синуса, какой к ним хороший хеш?

      •    1       # тестирование хеш-функции
           2 
           3       import random
           4       from math import *
           5 
           6       def testhash(f, seq, N):
           7           '''Применить числовую хеш-функцию f 
           8           ко всем элементам e последовательности seq
           9           посчитать и вернуть список, сколько раз 
          10           f(e) == 0, 1, ... , N, где 0…N — ОЗ f()
          11           '''
          12           hist = [0]*N
          13           for e in seq:
          14               hist[f(e)] += 1
          15           return hist
          16 
          17       def hash1(a):
          18           return a%10
          19 
          20       def hash2(a):
          21           return int(sin(a)*1000)%10
          22 
          23       PHI = (sqrt(5)-1)/2
          24       PMAX = 10
          25       def hash3(a):
          26           return int(PMAX*(a*PHI%1))
          27 
          28       SEQSZ = 10000
          29 
          30       #random.seed(100500)
          31       seq = (random.randrange(10,100) for i in range(SEQSZ))
          32       hist = testhash(hash3, seq, 10)
          33       print(hist,(max(hist)-min(hist))*100/SEQSZ)
        
    • {*} идентификаторы

    Множество — просто хеш-таблица
    • Задание, в т. ч. циклический конструктор
    • Операции над множествами, методы
    • Типичное использование
    • {*} каких букв не хватает

      •    1       # вводится два слова (через пробел)
           2       # выводится слово из тех букв первого, которых нет во втором
           3 
           4       a, b = input().split()
           5       print("".join(set(a)-set(b)))
        
    • {i} вводятся предложения, проверить, есть ли общее слово (регистр букв игнорировать)

    Словарь — множество с атрибутами, т. е. соответствие множества хешируемых ключей множеству произвольных объектов
    • Задание, в т. ч. циклический конструктор
    • Операции над словарями, методы
    • Типичное использование:
      • ...
      • globals()/locals()
      • именные параметры функции
    • Словари и счётчики
      • {*} ручная реализация счётчика

      • {*} collections

      • {*} тестирование хеш-функции: много входных данных и гистограмма

    • {i} генератор файла с N случайными словами (N задаётся из командной строки), причём 1-е слово встречается ровно 1 раз, второе — 2 раза, …, N-е — N раз

    • {i} подсчёт слов в файле, гистограмма вида

      •    ########                                  word1
           #############################             word2
           ###################                       word3
           ...
      • ..где максимальная длина "#######" — 50 символов
    • {i} самое популярное слово длиной >3 в файле anna.txt

Python/Summer2017/2017-07-10 (последним исправлял пользователь FrBrGeorge 2017-08-08 11:02:11)