Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.Python.8-10.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Перебор элементов словаря

Можно легко организовать перебор ключей всех элементов в словаре:

for key in A:

    print(key, A[key])

Следующие методы возвращают представления элементов словаря. Представления во многом похожи на множества, но они изменяются, если менять значения элементов словаря. Метод keys возвращает представление ключей всех элементов, метод values возвращает представление всех значений, а метод items возвращает представление всех пар (кортежей) из ключей и значений.

Соответственно, быстро проверить, если ли значение val среди всех значений элементов словаря A можно так: val in A.values(), а организовать цикл так, чтобы в переменной key был ключ элемента, а в переменной val было его значение можно так:

for key, val in A.items():

    print(key, val)

Словари со смешанными значениями

Словари могут состоять не только из строк. Значения словарей могут быть любого типа, включая целые, логические, произвольные объекты, или даже другие словари. И значения в одном словаре не обязаны быть одного и того же типа; можно смешивать и сочетать их, как вам необходимо. Ключи словаря более ограниченны, но они могут быть строками, целыми числами и некоторыми другими типами. Ключи разных типов тоже можно смешивать и сочетать в одном словаре.

Пример хранения списков в словаре

>>> SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], …             1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}  >>> len(SUFFIXES) #1  2  >>> 1000 in SUFFIXES #2  True  >>> SUFFIXES[1000] #3  ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']  >>> SUFFIXES[1024] #4  ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']  >>> SUFFIXES[1000][3] #5  'TB'

  1. Так же, как для списков и множеств, функция len() возвращает количество элементов словаря.

  2. И так же, как со списками и множествами, можно использовать оператор in, чтобы проверить, определён ли конкретный ключ в словаре.

  3. 1000 является ключом в словаре SUFFIXES; его значение — список из восьми элементов (восьми строк, если быть точным).

  4. Аналогично, 1024 — ключ словаря SUFFIXES; и его значение также является списком из восьми элементов.

  5. Так как SUFFIXES[1000 ] является списком, то можно обратиться к отдельным элементам списка по их порядковым номерам, которые индексируются с нуля.

Пример дешифрации текста после алфавитной замены

Рассмотрим следующую учебную задачу из области защиты информации: раскодировать текст, зашифрованный шифром перестановки, при помощи частотного анализа. Известно, что перестановкой перепутаны буквы: а, в, е, з, о, п, р, с, т, у, ф, ц, ш, ь. Остальные буквы текста не тронуты.

Дан текст:

оншчшль был эеа ьдиный, кзгз о шедш ншсыошли илюошцшезм. зн фзсдшл тьеоых шинае, фоящьнных, быорих тзезждьниями ьгз мыфли, и зни были ф ним сшдзлгз дз фзцозеьния офьгз тезчьгз. эеа гзозеил ф ними, теьдлшгшя им мьлздии; шинае тьли ьма, и зн ешдзошлфя. здншкз дзлгзь оеьмя шинае тьли тзздинзчкь либз о ньфкзлвкз гзлзфзо, ш зфцшлвныь цьм оеьмьньм фларшли; ибз были зни фтзфзбны тзфцичв лирв ца чшфцв сшмыфлш илюошцшеш, к кзцзезма фшми имьли ньтзфеьдфцоьннзь зцнзрьниь. тзнимшниь фзбешцвьо теихздилз к ним тзфцьтьннз, нз тз мьеь фларшния знз езфлз и аоьличиошлз фзглшфиь и гшемзничнзфцв тьния. фзсошл здншжды илюошцше офьх шинае и теьдлзжил им мьлздию оьликзй филы, ешфкеыошораю им цшйны бзльь чадьфныь и сншчимыь, чьм ць, чцз кзгдш-либз теьждь зцкеыошлифв им. кешфзцш ьь ншчшлвных нзц и оьликзльтиь кзнузоки зчшезошлз шинае, и о мзлчшнии фклзнилифв зни тьеьд илюошцшезм. и фкшсшл им цзгдш илюошцше: — ис эцзй мьлздии, чцз я ошм дшл, тзоьльошю флзжицв гшемзничнзь соачшниь оьликзй масыки. и тзьлика сшжьг я о кшждзм ис ошф ньагшфимзь тлшмя, оы тзоинны теилзжицв офь фози афилия к фзоьерьнфцозошнию фьй мьлздии, и озлвны бадьць олзжицв о ньь, теи жьлшнии, фози фзбфцоьнныь мыфли и чшяния. я жь бада фидьцв и фларшцв, ншфлшждшяфв цьм, кшк ошрш оьликшя кешфзцш ислиошьцфя о тьфню. и сшсоачшли гзлзфш шинае, тздзбныь соакшм шеп и люцньй, фоиеьльй и цеаб, оизл и зегшнш, и мнзгзгзлзфзма тзющьма хзеа, и теинялифв флшгшцв мьлздию илюошцшеш о оьличшйраю масыка. бьфкзньчнз исмьнчиоыь мьлздии фцшли фтльцшцвфя о гшемзничнзь фзсоачиь, оыхздиорьь нш оыфзчшйрих и нисрих нзцшх сш гешни флыримзфци, и мьфцз збицшния илюошцшеш тьеьтзлнилзфв соакзм. масыкш эцш и эхз ьь дзфцигли оньрньй тафцзцы, и цш тьеьфцшлш быцв тафцзцзй.

 

При помощи написанной выше функции ChastotnyAnaliz получаем количества символов в тексте, отсортированные по убыванию, и сличаю их с частотами символов произвольного текста-образца из Интернета на русском языке (например, первые 5 строф 1 главы Евгения Онегина):

Частоты символов:

частоты в тексте-образце:

и — 153

о — 144

з — 143

е — 125

ш — 115

н — 109

ь — 113

а — 105

л — 90

и — 92

н — 86

л — 78

ф — 76

с — 69

о — 72

т — 65

ц — 58

д — 59

е — 55

в — 58

м — 52

м — 58

а — 39

р — 55

д — 36

у — 51

т — 36

г — 43

ы — 35

ь — 40

к — 32

к — 38

ч — 25

п — 36

г — 24

я — 30

с — 23

б — 29

в — 22

ы — 24

я — 21

з — 23

б — 18

ч — 23

ю — 16

й — 21

р — 15

ж — 20

ж — 12

х — 16

й — 12

ш — 12

х — 12

ц — 6

э — 5

ю — 6

щ — 2

ф — 2

п — 1

ъ — 1

у — 1

э — 1

ъ — 0

щ — 0

В таблице отметим символы, для которых частоты встречи в расшифровываемом тексте разительно отличаются от частот таковых в нормальном русском тексте. Сличая таблицы, приходим к выводу, что нужно осуществить следующие замены: з → о, ш → е, ь → а, ф → с, о → т, ц → в, е → р, а → у, т → ь, с → п, в → з, р → ш, п  → ц, у → ф.

Осуществляем эти замены в любом текстовом редакторе в следующем порядке:

  1. предварительно заменим все исходные буквы «о» на «@», чтобы они потом не перепутались c результатом замены буквы «з»

  2. з на о — заменить все

  3. в на з — заменить все

  4. ц на в — заменить все

  5. п на ц — заменить все

  6. с на п — заменить все

  7. ф на с — заменить все

  8. у на ф — заменить все

  9. а на у — заменить все

  10. ь на а — заменить все

  11. т на ь — заменить все

  12. @ на т — заменить все