Верхний регистр только для определенных символов в строке/списке python

Я изучаю список Python и строковые функции. Мне нужно написать конкретную функцию. Моя функция корректно возвращает задачу Else. Однако я не могу использовать только первую и последнюю буквы каждого слова в данном предложении. Спасибо за вашу помощь, я могу использовать только основные функции, как указано в подсказках.

Вот задача: Если данное предложение начинается с *, первая и последняя буквы каждого слова в предложении заглавные, и возвращает предложение без *. Иначе, объединяет все слова в заданном предложении, разделяя их запятой, и возвращает результат.

Например, если мы вызовем capitalize_or_join_words(*я люблю python), мы получим в ответ I LovE PythoN. Если мы вызовем capitalize_or_join_words(i love python), мы получим взамен i,love,python. Если мы вызовем capitalize_or_join_words(i love python ), мы получим взамен i,love,python.

Советы. Функция startswith() проверяет, начинается ли строка с определенного символа. Функция capitalize() делает первую букву строки прописной. Функция upper() преобразует все символы нижнего регистра в строке в верхний регистр. Функция join() создает одну строку из списка нескольких строк.

def capitalize_or_join_words(sentence):

if sentence.startswith('*'):
    s = sentence.replace('*','')
    s2 = s.split()
    
    s3 = []

    for word in s2:
        s3 += word.capitalize()
    
    temp = ",".join(s3)
    sentence_revised = temp
    
else:
    
    s = sentence.split()
    sentence_revised = ",".join(s)

return sentence_revised

person maverick    schedule 03.12.2020    source источник
comment
С последним символом следует обращаться отдельно: вырезать его из строки, перевести в верхний регистр (поскольку это будет односимвольная строка, вы можете использовать любую из двух предложенных функций) и добавить его обратно.   -  person tevemadar    schedule 04.12.2020


Ответы (2)


Вот что я придумал:

def capitalize_word(word):
    if not word:
        return ''
    if len(word) < 3:
        return word.upper()
    return word[0].capitalize() + word[1:-1] + word[-1].capitalize()

def capitalize_or_join_words(sentence):
    if sentence.startswith('*'):
        words = sentence.replace('*', '').split()
        return ' '.join(capitalize_word(word) for word in words)

    words = sentence.split()
    return ','.join(words)
person Alexander Rogovsky    schedule 03.12.2020
comment
Спасибо, Александр. - person maverick; 04.12.2020

person    schedule
comment
Пожалуйста, добавьте объяснение того, как этот код отвечает на вопрос. - person cigien; 04.12.2020