Задать вопрос
@Jonz

Два одинаковых кода, но один не хочет работать! Почему?

Учусь кодить на Python. Долго мучился с заданием, по созданию программы, которая принимала бы текст и выводила его на экране наоборот.
Вот пример изначально, то как я хотел написать код:

word = input('Введите ваш текст: ')
word_count = len(word)
word_reverse = ''

for i in range(word_count, 0, -1):
	word_reverse += word[i]

print('\nВот ваш текст задом-наперед: ', word_reverse)

input('\n\nPress the Enter, key to exit.')


По моему скромному мнению, но этот код должен работать. Единственное, не вывел бы самый первый символ.
А вот то, как я сделал в итоге, и оно работает.

word = input('Введите ваш текст: ')
word_count = -len(word)-1
word_reverse = ''

for i in range(-1, word_count, -1):
	word_reverse += word[i]

print('\nВот ваш текст задом-наперед: ', word_reverse)

input('\n\nPress the Enter, key to exit.')


Прошу объяснить, почему в первом случае не работает?
И можно ли его написать более компактно? Если да, то как?
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@samanwirst
Вроде бы человек
Зачем так сложно?
Прочтите внимательно это
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
for i in range(word_count, 0, -1):
На первой итерации цикла i примет значение word_count.
Символы в строке word имеют индексы от 0 до word_count-1.
Так что индекс, равный word_count, не существует. Ты поймаешь исключение IndexError.

И можно ли его написать более компактно? Если да, то как?

Освоить срезы (slice). part = word[a:b:c] будет (условно) эквивалентно
part = ''
i = a
while i < b:
    part = part + word[i]
    i = i + c

для положительного c. А для отрицательного будет while i > b:.
Если a опущено, по умолчанию это начало последовательности (для c > 0) или конец (для c < 0).
Если b опущено, по умолчанию это конец последовательности (для c > 0) или начало (для c < 0).
Если c опущено, по умолчанию это 1.

Так что для обращения строки нам нужно пройтись по всей строке с шагом -1. Получим вот что:
word_reversed = word[::-1]
# это эквивалентно
word_reversed = word[len(word)-1:-1:-1]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы