Изменить последовательность слов в строке на обратную

Если дана строка, состоящая из слов, разделенный пробелами, и требуется вывести слова в обратном порядке, то с помощью языка программирования Python данную задачу решить просто, используя встроенные функции-методы:

  1. Преобразовать строку в список слов (функция split()).
  2. Вызвать метод reverse() для полученного списка.
def revers(s):
    s = s.split()
    s.reverse()
    for i in s:
        print(i, end=' ')
    print()
 
string = input()
revers(string)

Если же требуется решить задачу "классическим" способом, то есть без использования списков, то решение будет выглядеть несколько сложнее.

Извлечь часть строки можно с помощью операции взятия среза. Поскольку слова надо извлекать и выводить на экран, начиная с конца, то и строку уместно "просматривать" с конца.

Для обозначения начала среза введем переменную start, конца - end. Начальными значениями этих переменных будет индекс последнего символа в строке.

Просматривая строку с конца, будем на каждой итерации цикла уменьшать на 1 значение start. Тем самым будем двигаться к началу строки. При этом будем проверять, если очередной символ - это пробел, то надо вывести на экран срез от start до end, после чего присвоить end новое значение равное текущему start.

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

  • Срез должен извлекаться не от start, а от start+1, т.к. текущий символ пробел, а извлечь надо слово после него.
  • Если извлекается первое слово с конца, то срез надо брать не до end, а до конца строки. Иначе последний символ будет опущен.
  • Когда извлекается последнее слово с конца (т.е. первое с начала), то надо извлекать не от start+1, а от start, т.к. перед ним пробела может и не быть. Кроме того из-за отсутствия пробела перед ним это слово вообще не будет выведено, поэтому случай, когда start становится равным 0, следует обработать отдельно.
def revers(s):
    start = end = len(s)-1
    while start >= 0:
        if s[start] == ' ':
            if end == len(s)-1:
                print(s[start+1:], end=' ')
            else:
                print(s[start+1:end], end=' ')
            end = start
        elif start == 0:
            print(s[start:end])
        start -= 1
 
string = input()
revers(string)

Пример выполнения:

  one   two three four    
     four three two   one  

Создано