Хочу убрать тире после каждого нажатия на пробел

Мой код:

def shifr_A1Z26(message, key):
result=[]

alf = ['','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т',
       'У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я']

alf2 = ['','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т',
        'у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я']

for txt in message:
    if txt.isupper() and txt!=' ':
        mes=alf.index(txt)
        mes=str(mes)
        result.append(mes)
        result.append('-')
    elif txt==' ':
        result.append(' ')
    else:
        if txt!=' ':
            mes=alf2.index(txt)
            mes=str(mes)
            result.append(mes)
            result.append('-')
        else:
            result.append(' ')              
result=result[:-1]
return "".join(result)

Не могу понять, почему после каждого нажатия на пробел ставится тире, хотя в программе написано, что если пробел, то поставить пробел


Ответы (1 шт):

Автор решения: insolor

Я не буду исправлять ваш код, а перепишу с нуля.

Алгоритм такой:

  1. Разбить текст на отдельные слова по пробелу (метод split)
  2. В каждом слове символ заменить на его код
  3. Список номеров собрать вместе в одну строку с разделителем '-' с помощью метода join
  4. Полученные списки кодов объединю в одну строку с разделителем ' '
def shifr_A1Z26(message, key):
    result=[]  # Здесь будет список кодированных слов вида ['123-334-533', '11-12', ...]

    alf = ['','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т',
           'У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я']

    for word in message.split(' '):
        encoded_word = []  # Здесь будет список кодов символов в слове вида ['123', '334', '553']

        # Сразу приводим все слово к верхнему регистру,
        # чтобы избавиться от отдельного массива для нижнего регистра
        for char in word.upper():
            encoded_word.append(str(alf.index(char)))

        result.append('-'.join(encoded_word))    

    return " ".join(result)


print(shifr_A1Z26("Привет Мир", None))  # Вывод: 17-18-10-3-6-20 14-10-18

Та же функция в более компактном виде:

def shifr_A1Z26(message, key):
    alf = ['','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т',
           'У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я']      

    return " ".join('-'.join(str(alf.index(char))
                        for char in word.upper())
                            for word in message.split(' '))
→ Ссылка