Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/240: Рейтинг темы: голосов - 240, средняя оценка - 4.50
-16 / 3 / 0
Регистрация: 15.12.2018
Сообщений: 82

Маленький частотный анализ 1

06.01.2019, 16:20. Показов 45748. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Частотный анализ — это подсчёт, какие символы чаще встречаются в тексте. Это важнейший инструмент взлома многих классических шифров — от шифра Цезаря до шифровальной машины «Энигма». Выполним простой частотный анализ: выясним, какой символ чаще всего встречается в данном тексте.

Формат ввода
Вводится одна строка.

Формат вывода
Выводится один символ в нижнем регистре — наиболее часто встречающийся во введённой строке, кроме пробела, без учёта регистра, если таких несколько — выводится первый по алфавиту.

Пример
Ввод
Баобаб
Вывод
б
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2019, 16:20
Ответы с готовыми решениями:

Частотный анализ
Есть файл text.txt, который содержит текст. Напишите программу, которая выполняет частотный анализ, определяя долю каждой буквы английского...

Частотный анализ
Частотный анализ — это подсчёт, какие символы чаще встречаются в тексте. Это важнейший инструмент взлома многих классических шифров — от...

Задача: Частотный анализ
Доброго времени суток. Мне нужно сделать задание, в питоне почти 0. Год назад еще что-то умел, сейчас вообще не соображаю. Находил уже...

14
 Аватар для deathly_hallows
10 / 9 / 2
Регистрация: 23.04.2014
Сообщений: 83
06.01.2019, 19:09
Конечно, не совсем корректно. Но все же
Python
1
2
3
4
5
from collections import Counter
s = input('something:  ')
 
for c, n in Counter(s).most_common(1):
    print(c)
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.01.2019, 19:33
deathly_hallows, Ваше решение не учитывает наличие прописных букв

something: Баобаб
а
0
 Аватар для deathly_hallows
10 / 9 / 2
Регистрация: 23.04.2014
Сообщений: 83
06.01.2019, 19:52
Viktorrus, Небольшой косяк Надо было, по-хорошему, еще и замутить проверку, если вдруг там есть одинаковое количество букв. Но... лень

Добавлено через 3 минуты
Подправленный вариант. Спасибо Viktorrus.
Python
1
2
3
4
5
from collections import Counter
s = input('something:  ').lower()
 
for c, n in Counter(s).most_common(1):
    print(c)
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
07.01.2019, 04:27
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from collections import Counter
s = input('Введите строку: ').lower()
L = Counter(s).most_common()
maxNminS = ['я', 0]
for i in range(len(L)):
    if L[i][1] > maxNminS[1]:
        maxNminS = L[i]
    elif L[i][1] == maxNminS[1]:
        if ord(L[i][0]) < ord(maxNminS[0]):
            maxNminS = L[i]
if ord(maxNminS[0]) == 32:
    print('символ пробела')
else:
    print(maxNminS[0])
пример 1:
Введите строку: Баобаб
б

пример 2:
Введите строку: Баобаб абракадабра
а

пример 3:
Введите строку: Б а л а б о л
символ пробела

пример 4:
Введите строку: баабаб
а

При желании символ пробела можно игнорировать, но это нужна небольшая доработка кода.
Так же можно ограничиться только буквами или выводить только русские буквы.
Для этого нужно при сравнении символов учитывать , что бы они находились в определенном диапазоне.

Добавлено через 28 минут
Я не внимательно прочитал условие. Вот вариант, где игнорируются пробелы.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from collections import Counter
s = input('Введите строку: ').lower()
L = Counter(s).most_common()
maxNminS = ['я', 0]
for i in range(len(L)):
    if ord(L[i][0]) == 32:
        continue
    elif L[i][1] > maxNminS[1]:
        maxNminS = L[i]
    elif L[i][1] == maxNminS[1]:
        if (ord(L[i][0]) < ord(maxNminS[0])):
            maxNminS = L[i]
 
print(maxNminS[0])
пример:

Введите строку: Б а о б а б
б

Добавлено через 3 часа 42 минуты
Небольшая доработка для увеличения скорости при обработке текстов больших объемов, что бы в цикле for не было перебора всех букв присутствующих в тексте.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from collections import Counter
s = input('Введите строку: ').lower()
L = Counter(s).most_common()
 
maxNminS = ['я', 0]
for i in range(len(L)):
    if ord(L[i][0]) == 32:
        continue
    elif L[i][1] > maxNminS[1]:
        maxNminS = L[i]
        if (i < len(L)-1) and (L[i+1][1] < L[i][1]):
            break
    elif L[i][1] == maxNminS[1]:
        if (ord(L[i][0]) < ord(maxNminS[0])):
            maxNminS = L[i]
            if (i < len(L)-1) and (L[i+1][1] < L[i][1]):
                break
 
 
print(maxNminS[0])
2
 Аватар для Semen-Semenich
5232 / 3477 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305
07.01.2019, 11:43
Python
1
2
3
4
5
6
dct = {}
for sumb in input():
    if sumb.isalpha():
        sumb = sumb.lower()
        dct[sumb] = dct.get(sumb,0)+1
print(max(sorted(dct),key = lambda x : dct[x]))
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
07.01.2019, 22:48
Semen-Semenich, Ваш код конечно компактнее, но основной его недостаток, что на текстах большого объема он будет работать медленно, так как обрабатывает каждый символ с помощью цикла for, вместо использования встроенного средства Counter(s).most_common(), которое написано на языке С и работает на порядок быстрее. Что и будет проявляться именно на текстах большого объема. Мой же код циклом for обрабатывает только те несколько символов в списке, у которых окажется одинаковое количество вхождений в заданном большом тексте. Поэтому средство предложенное deathly_hallows, более эффективно, просто он поленился обработать получаемый с помощью Counter(s).most_common() список. А я просто развил его идею, доведя до конца.

Добавлено через 49 минут
Да и кстати в условии говорится о рассмотрении всех символов, кроме пробела, Вы же отсекли все символы, которые не являются буквами, что не соответствует условию (это так, небольшое замечание )

Добавлено через 2 часа 12 минут
Вот тоже быстрый код, но более простой алгоритм. Можно сделать его более компактным, сгруппировав некоторые инструкции, но я предпочитаю более простои и более доступный для понимания, хотя и с большим количеством строк. По скорости развернутый и скомпонованный одинаковы, так как выполняется одно и то же количество инструкций, просто запись может быть более компактная и менее наглядная для понимания.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from collections import Counter
s = input('Введите строку: ').lower()
L = Counter(s).most_common()
 
l = []
if ord(L[0][0]) != 32:
    n = L[0][1]
else:
    n = L[1][1]
for p in L:
    if ord(p[0]) == 32:
        continue
    elif p[1] == n:
        l.append(p[0])
    else:
        break
l.sort()
print(l[0])
1
 Аватар для Semen-Semenich
5232 / 3477 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305
08.01.2019, 10:59
Viktorrus, насчет скорости обработки согласен
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
08.01.2019, 18:58
Что так сложно
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string = input()
letter = []
letterM = []
big = 0
let = ''
for i in string:
    if i != ' ':
        letter.append(i.lower())
        letterM.append(i.lower())
letterM.sort()
for i in letterM:
    if letter.count(i) > big:
        big = letter.count(i)
        let = i
print(let)
2
2 / 2 / 0
Регистрация: 26.11.2019
Сообщений: 3
04.12.2019, 21:11
Код CyberGame, но немного короче

Python
1
2
3
4
5
6
7
8
9
10
11
string = ''.join(input().lower().split())
letter = list()
big = 0
for x in string:
    letter.append(x)
letter.sort()
for y in letter:
    if letter.count(y) > big:
        big = letter.count(y)
        let = y
print(let)
2
5 / 5 / 0
Регистрация: 05.02.2021
Сообщений: 4
15.02.2021, 14:40
Python
1
2
3
4
5
6
7
8
9
10
11
12
text = input().lower().replace(' ', '')
qq = list(text)
qq.sort()
index = str()
a = 0
b = 0
for w in qq:
    a = qq.count(w)
    if a > b:
        index = w
        b = a
print(index)
1
3 / 3 / 0
Регистрация: 09.01.2022
Сообщений: 4
09.01.2022, 21:45
1 text = input().lower()
2 max_c = 0
3 max_t = ''
4 for t in set(text) - set(' '):
5 count = text.count(t)
6 if count > max_c:
7 max_c = count
8 max_t = t
9 elif max_c == count:
10 if t < max_t:
11 max_t = t
13
12 print(max_t)
1
1 / 1 / 0
Регистрация: 05.12.2022
Сообщений: 7
05.12.2022, 11:38
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a = input().lower()
b = 0
d = ''
for i in a:
    if i != ' ':
        if a.count(i) != b:
            if a.count(i) > b:
                b = a.count(i)
                d = i
        else:
            if i < d:
                d = i
print(d)
вроде все понятно
1
 Аватар для tigertv_ru
141 / 90 / 13
Регистрация: 09.01.2018
Сообщений: 321
Записей в блоге: 2
05.12.2022, 23:00
Python
1
2
3
4
5
from collections import Counter
 
s = input()
res = Counter(filter(str.isalpha, map(str.lower, s))).most_common()[0][0]
print(res)
0
0 / 0 / 0
Регистрация: 11.11.2024
Сообщений: 4
16.12.2024, 18:36
Добавлено через 43 секунды
Python
1
2
3
4
5
6
7
8
9
10
11
12
a = input()
a = a.lower()
a = list(a)
a = ' '.join(a)
a = a.split()
for j in range(0, len(a) - 1):
    for i in range(0, len(a) - 1 - j):
        if a[i] > a[i + 1]:
            a[i], a[i + 1] = a[i + 1], a[i]
        if a.count(a[i]) < a.count(a[i + 1]):
            a[i], a[i + 1] = a[i + 1], a[i]
print(a[0])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2024, 18:36
Помогаю со студенческими работами здесь

Простой частотный анализ текста, записанного в известном алфавите
Помогите!!!! При решении задач криптографии и лингвистики часто обращаются к методу частотного анализа. С помощью данного метода,...

Провести частотный анализ числа и найти наиболее часто встречающуюся цифру
Провести частотный анализ числа и найти наиболее часто встречающуюся цифру. Ввод - стандартный ввод или input.txt Вывод -...

Напишите программу, которая выполняет частотный анализ, определяя долю каждой буквы английского алфавита
O. Частотный анализ Напишите программу, которая выполняет частотный анализ, определяя долю каждой буквы английского алфавита в общем...

Маленький частотный анализ
Помогите исправить код. Условие задачи: Частотный анализ — это подсчёт, какие символы чаще встречаются в тексте. Это важнейший инструмент...

Маленький частотный анализ
Частотный анализ — это подсчёт, какие символы чаще встречаются в тексте. Это важнейший инструмент взлома многих классических шифров — от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru