Хочу убрать тире после каждого нажатия на пробел
Мой код:
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
→ Ссылка
Я не буду исправлять ваш код, а перепишу с нуля.
Алгоритм такой:
- Разбить текст на отдельные слова по пробелу (метод
split) - В каждом слове символ заменить на его код
- Список номеров собрать вместе в одну строку с разделителем
'-'с помощью методаjoin - Полученные списки кодов объединю в одну строку с разделителем
' '
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(' '))