Как сделать заглавными последнюю букву каждого слова в строке

Есть вопрос по задаче.

Условие:

Дана строка. Сделайте заглавной последнюю букву каждого слова в этой строке.

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

my_string = input("Введите строку: ").split()
  counter = 1
  new_list = []
  for i in my_string:
      if counter == my_string[-1]:
          i = i.capitalize()
      new_list.append(i)
      counter += 1
  print(*new_list)

Но он не делает последнюю букву заглавной.

Введите строку: python language

python language

Подскажите в чём ошибка.


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

Автор решения: Kirill Kondratenko

Можно написать функцию, которая будет разбивать строку на список слов и для каждого из них отделять последний символ i[:-1], и присоединять его уже в верхнем регистре i[:-1].upper():

def upper_last_symb(my_string: str) -> list:
    return [i[:-1] +  i[-1].upper() for i in  my_string.split()]


my_string = input("Введите строку: ")
list_w_words = upper_last_symb(my_string)
for word in list_w_words:
    print(word)

Ввод:

стол ручка тетрадь

Вывод:

стоЛ
ручкА
тетрадЬ
→ Ссылка
Автор решения: CrazyElf

Сделайте заглавной последнюю букву каждого слова в этой строке

Давайте декомпозируем задачу.

  • сделайте заглавной
  • последнюю букву
  • каждого
  • слова
  • в этой строке

Реализовывать это всё нужно в обратном порядке:

  1. "в этой строке" - вводим строку через input
  2. "слова" - введённую строку нужно разбить на слова с помощью функции split
  3. "каждого" - полученные отдельные слова нужно перебрать с помощью цикла
  4. "последнюю букву" - вырезаем из слова два куска с помощью срезов: до последней буквы и сама последняя буква
  5. "сделайте заглавной" - полученную ранее последнюю букву делаем заглавной с помощью функции upper
  6. Ну и последний шаг - нужно собрать всё обратно:
  • слепить обратно слова, теперь уже с заглавной последней буквой
  • слепить обратно предложения (или это тут не надо? из задания непонятно, возможно достаточно вернуть список слов)
  • вернуть полученный результат

Хорошо бы ещё посмотреть примеры к этой задаче, потому что слова могут быть разделены пробелами, и тогда split будет достаточно. А могут быть разделены другими знаками препинания, и тогда будет лучше использовать регулярные выражения для поиска слов.

Ну а теперь сравните план выше со своим кодом. Мягко говоря, многое у вас не так.

P.S. Увидел пример. У вас всё просто, split с дефолтными аргументами достаточно.

P.P.S. Ладно, раз всё-равно уже код все пишут, то вот однострочник:

print(' '.join(f'{s[:-1]}{s[-1].upper()}' for s in input().split()))
→ Ссылка