Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 9

Метод простой перестановки

20.04.2021, 20:39. Показов 6629. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Набросал такой код. Ошибки появляются после ввода.
Программа должна получать на вход текст для шифровки и цифровой ключ(цифра или число(целое)), например "мама" и "7", а на выходе должна выдавать слово, в которой переставили буквы, начиная с той, что идёт по счёту ключа. Так, в примере дан ввод, на выводе должно быть такое слово: "ммаа" (3-я, 1-я, 4-я и 2-я буква по исходному слову)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
print("Будем шифровать или расшифровывать? cif/decif") #print cif for encryption or decif for decryption
cipher=input()
print("Введите, пожалуйста, ключ: ") #print some int number
key=int(input())
print("Введите, пожалуйста, ваше предложение: ") #print your sentence for en\decryption
text=input()
 
#alphabet = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я']
#gamma = ' .,:;`"\|/(){}[]!?@#$&№%^+-=_*'
 
def cryp(text, key):
    ret = [] #массив на возврат(при условии, что идёт шифровка целого предложения)
    arr = [] #массив, который будет содержать элементы одного слова в предложении
    rra = [] #массив, но уже после перестановки букв в слове
    z = 0
    y = 0
    q = 0
    for i in range(len(text)):
        x = text[i]
        if x.isalpha == True: #пока слово не закончилось, оно поэлементно идёт в массив
            q = q+1 #длина слова
            arr += x #создание массива
        else: #здесь остановка цикла, так как слово закончилось, появился знак препинания или пробел
            while arr != []: #пока созданный массив(слово) не закончится
                y = ((y+key)%q) #индекс перестановочного символ
                z = arr[(y-1)] #перестановочный символ
                rra += z #здесь должно быть добавление перестановочного символа в массив(создание нового слова, после перестановки)
#                rra.append(arr[y-1])
#                rra.insert(arr[y-1])
                arr.pop(y) #удаление перестановочного символа, т.к. уже использовался
                q = q-1 #сокращение длины слова соответсвенно
#        continue
    srra = ''.join(rra) #перевод массива слова, где была совершенна перестановка, в обычный текст(не массив)
    return rra
 
if cipher == "cif":
    print(cryp(text, key))
elif cipher == "decif":
    print(encryp(text, key))
else:
    print("Прошу прощения, но, видимо, где-то ошибка. Надеюсь, вы правильно всё написали. Приношу извинения за сбой!")
#Here is an apology for the fact that you or the program made a mistake somewhere
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2021, 20:39
Ответы с готовыми решениями:

Метод Перестановки
Добрый день! Хочу попросить помощи. Я пишу программу, котрая должна выводить перестановки без повторений. На входе есть число N - это...

Метод простой итерации и метод Зейделя
Нужна помощь плз! Есть ли у кого-то ресурсы пример реализации какого-либо из методов с помощью библиотеки numpy Погулил.Все что нашел...

Метод простой перестановки
Помогите пожалуйста!!! Никак не могу справится с лр по защите инфо(( Написать в delphi прогу шифрование м.простой...

1
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 9
21.04.2021, 11:29  [ТС]
Фигню написал.
Заново!
Нужно реализовать метод простой перестановки.
Есть такой код, но вывод не тот, который нужен.
Пример:
Ключ: 123456789
Текст: мама, папа и я
Вывод: мамамамамамамамама
Нужный вывод: маа миа ,я п а п
Или пример:
Ключ: 123456789
Текст: молоко, арбуз и лимон
Вывод: молмолмолмолмолмолмолмолмол
Код, который я набросал:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#на этот эксперимент потрачено: 3 часа
print("Будем шифровать или расшифровывать? cif/decif") #print cif for encryption or decif for decryption
cipher=input()
print("Введите, пожалуйста, ключ: ") #print some int number
key=input()
print("Повторите, пожалуйста, ключ: ")
keykey = int(input())
print("Введите, пожалуйста, ваше предложение: ") #print your sentence for en\decryption
text=input()
 
def cryp(text):
    ret = [] #массив на возврат
    ck = 0 #длина ключа
    ct = 0 #длина текста
    carr = 0 #количество массивов в матрице
    i = 0 #из матрицы
    j = 0 #из матрицы
    for ik in range(len(key)): #Считаем длину ключа
        ck = ck+1
    for it in range(len(text)): #Считаем длину текста
        ct = ct+1
    carr = ct//ck       #Сколько массивов будет в матрице
    if ct%ck != 0:      #Сколько массивов будет в матрице
        carr = carr+1   #Сколько массивов будет в матрице
    matrix = [[0 for x in range(ck)] for y in range(carr)] #Создаём матрицу
#    matrix[1][1] = 228 # 1 и 1 - это второго массива второй элемент
    for it in text: #Добавляем элементы из текста в матрицу
        matrix[i][j] = it
        j=j+1
        if j%ck == 0: #Если один массив заполнился, то в ход идёт следующий массив
            j = 0
            i = i+1
    j = 0 #Обнуляем
    i = 0 #Обнуляем
#    ckck = ck
    counter = 0 #Счётчик
    while counter != ck: #Пока счётчик не будет равен длине ключа, продолжаем работу
        z = (keykey//(10**(ck-1)))%10 #Берём по одной цифре ключа
        i = z-1 #минусуем единичку для индекса в матрице
        while j != carr: #Пока все элементы одного индекса из всех массивов не переберём, продолжаем работу
#            ret = ret + matrix[i][j]
            ret.append(matrix[i][j]) #Добавление элемента из матрицы в обычный массив на вывод
            j=j+1
        i = 0 #Обнуляем
        j = 0 #Обнуляем
        counter = counter + 1 #Счётчик+1
    sret = ''.join(ret) #Перевод массива на возврат в строку на возврат
    return sret #Возврат строки на возврат
#    i = 0
#    j = 0
#    for i in range(len(matrix)):
#        for j in range(len(matrix)):
#            if matrix[i][j] == []:
#                return (i, j)
#    smatrix = list(matrix)               #Хрень полная
#    return smatrix                       #Полнейшая
 
if cipher == "cif":
    print(cryp(text))
elif cipher == "decif":
    print(encryp(text))
else:
    print("Прошу прощения, но, видимо, где-то ошибка. Надеюсь, вы правильно всё написали. Приношу извинения за сбой!")
#Here is an apology for the fact that you or the program made a mistake somewhere
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2021, 11:29
Помогаю со студенческими работами здесь

Метод простой табличной перестановки
Пыталась реализовать метод простой табличной перестановки, но почему-то не работает, пожалуйста подскажите, что не так? int r =...

Метод простой перестановки (Как сделать зацикленную функцию?)
Как зациклить функцию на столько раз, сколько символов в переменной "key"? Дан следующий код, где две функции: одна шифрует, другая...

Шифрование методом простой перестановки и двойной перестановки
Друзья помогите пожалуйста с кодом ну ни как не могу сообразить как же сделать шифрование методом простой перестановки и двойной...

Шифр простой перестановки
Здравствуйте. Помогите пожалуйста, как мне реализовать шифр простой перестановки с помощью Pascal ? Мне дали задание, а как его сделать...

Шифрование методом простой перестановки
Шифрование методом простой перестановки Строк 6. Столбцов - сколько потребуется


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru