Python 3 - Как использовать первую букву каждого предложения при переводе с азбуки Морзе

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

Это мой текущий код:

 text = input()
        if is_morse(text):
            lst = text.split(" ")
            text = ""
            for e in lst:
                text += TO_TEXT[e].lower()
            print(text)

Каждый элемент в разделенном списке равен символу (но морзе) НЕ СЛОВУ. TO_TEXT - это словарь. У кого-нибудь есть легкое решение этого? Я новичок в программировании и Python, кстати, поэтому я могу не понять некоторых решений ...


person Schytheron    schedule 14.11.2016    source источник
comment
Не могли бы вы исправить отступы?   -  person Eli Sadoff    schedule 14.11.2016


Ответы (3)


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

text = input()
if is_morse(text):
    lst = text.split(" ")
    text = ""
    first_letter = True
    for e in lst:
        if first_letter:
            this_letter = TO_TEXT[e].upper()
        else:
            this_letter = TO_TEXT[e].lower()

        # Period heralds a new sentence. 
        first_letter = this_letter == "."  

        text += this_letter
    print(text)
person Prune    schedule 14.11.2016

Из того, что понятно из вашего кода, я могу сказать, что вы можете использовать функцию title() Python. Для более точного результата вы можете использовать функцию capwords(), импортирующую класс string.

Вот что вы получите из документации Python по ключевым словам:

Разделите аргумент на слова с помощью str.split (), используйте каждое слово с заглавной буквы с помощью str.capitalize () и соедините слова с заглавной буквы с помощью str.join (). Если необязательный второй аргумент sep отсутствует или None, пробелы заменяются одним пробелом, а начальные и конечные пробелы удаляются, в противном случае sep используется для разделения и соединения слов.

person AlphaQ    schedule 14.11.2016

Предположим, у вас есть это text:

text = "this is a sentence. this is also a sentence"

Вы можете ввести первую букву каждого предложения в верхнем регистре, выполнив:

  1. Разделить text на '.' символов
  2. Удалите пробелы в начале и в конце каждого элемента
  3. Делайте первые буквы каждого элемента заглавными
  4. Снова присоединитесь к элементам с помощью '. '

Пошаговый код:

  originals  = text.split('.')
  trimmed    = [ sentence.strip() for sentence in originals ]
  uppercased = [ sentence[0].upper() + sentence[1:] for sentence in trimmed ]
  rejoined   = '. '.join(uppercased)

Вы захотите упаковать это в функцию. Создавать все эти промежуточные list объекты не нужно, вы можете сделать это с помощью for циклов или generators.

person slezica    schedule 14.11.2016
comment
Не могу этого сделать, потому что текстовая переменная содержит код MORSE, а не TEXT. Мне нужно преобразовать из morese в текст. - person Schytheron; 15.11.2016