Python — я получаю сообщение об ошибке «подстрока не найдена»

Я пытаюсь сделать функцию шифрования шифра перестановки для проекта класса.

from string import ascii_lowercase

def swap(s: str, index0: int, index1: int):
    smaller = index0 if index0 < index1 else index1
    bigger = index0 if index0 >= index1 else index1
    if bigger >= len(s) or smaller < 0:
        return None
    ret = s[:smaller] + s[bigger] + s[smaller+1:]  # swap first
    ret = ret[:bigger] + s[smaller] + s[bigger+1:] # swap second
    return ret


def swap_encrypt(s: str, key:str):
    ret = s
    for key_chr in key:
        index = ascii_lowercase.index(key_chr)
        swap_this = index % len(ret)
        with_this = (swap_this + 1) % len(ret)
        ret = swap(ret, swap_this, with_this)

    return ret
s = ''
key = ''
def main2():
    s = input('Enter your message: ')
    s = cleanup(s)
    key = input('Enter your keyword: ')
    key = cleanup(key)
    ret= swap_encrypt((s), (key))
    print(cleanup(ret))

main2()

Я получаю сообщение об ошибке «Подстрока не найдена», я что-то делаю не так?

Если мой ввод =('SLOTH POWER') для s, ('TOP') для ключа, мой вывод должен быть: 'RLOTPOHWES'

Есть ли еще один, чтобы ограничить функции ord(), len() и range()? Если да, можно ли мне показать, как?

ошибка:

Traceback (most recent call last):
  File "c:\Users\darks\OneDrive\Documents\7\ciphers.py", line 139, in <module>
    main2()
  File "c:\Users\darks\OneDrive\Documents\7\ciphers.py", line 136, in main2
    ret= swap_encrypt((s), (key))
  File "c:\Users\darks\OneDrive\Documents\7\ciphers.py", line 123, in swap_encrypt
    index = ascii_lowercase.index(key_chr)
ValueError: substring not found

Пожалуйста, редактировать вашего сообщения и покажите полный текст трассировки. Пожалуйста, также исправьте отступ, так как ваш код не запускается как есть.

MattDMo 10.04.2022 19:04

извиняюсь за неправильный отступ.

k_07 10.04.2022 19:09

возможно, сначала используйте print(), чтобы увидеть, что у вас есть в key_chr Если у вас есть символ в верхнем регистре, вы не можете найти его в ascii_lowercase

furas 10.04.2022 19:24
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
3
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он не может найти символ в ascii_lowercase, потому что ваш ввод в верхнем регистре. Попробуйте «силу лени» вместо «СИЛА ЛЕНИ» или используйте s.lower().

или нужно ascii_uppercase

furas 10.04.2022 19:26

благодарю вас. У меня есть еще один вопрос. Есть ли другой способ ограничить функции ord(), len() и range() при создании функции транспонирования? Если да, можно ли мне показать, как?

k_07 10.04.2022 19:31

Если я вас правильно понял, вы хотите упростить свой код и заменить часть его встроенными функциями?

Juraj 10.04.2022 19:51

да, я пытался это сделать, но я потерялся, когда пытался определить свой алфавит и присвоить его индексам сообщения и ключевого слова.

k_07 10.04.2022 19:58

Чтобы упростить функцию swap, используйте код из stackoverflow.com/a/25954716/14079544.

Juraj 10.04.2022 20:30

как насчет функции swap_encrypt?

k_07 10.04.2022 20:37

На мой взгляд, функция swap_encrypt в порядке.

Juraj 10.04.2022 20:53

Могу ли я как-то сделать swap_encrypt с помощью ascii-команд?

k_07 10.04.2022 20:55

без ascii-команд*

k_07 10.04.2022 21:01

Вы можете заменить ascii_uppercase.index(key) на ord(key) - ord('A')

Juraj 10.04.2022 21:05

для процесса расшифровки я бы просто сделал противоположное ord(key) - ord('A) правильно? Какой ord(key) + ord(A)?

k_07 10.04.2022 21:09

Другие вопросы по теме