2015-08-07 2 views
2
# word reverser 
#user input word is printed backwards 

word = input("please type a word") 

#letters are to be added to "reverse" creating a new string each time 
reverse = "" 

#the index of the letter of the final letter of "word" the users' input 
#use this to "steal" a letter each time 
#index is the length of the word - 1 to give a valid index number 
index = len(word) - 1 

#steals a letter until word is empty, adding each letter to "reverse" each time (in reverse) 
while word: 
    reverse += word[index] 
    word = word[:index] 
    print(reverse) 

print(reverse) 
input("press enter to exit") 

Работает, чтобы создать простую программу, которая произносит слово ввода пользователя назад и отпечатывает его обратно с помощью «кражи» букв оригинала и создания из них новых строк. Проблема, с которой я столкнулся, заключается в том, что этот код возвращает строку индексной ошибки за пределами диапазона на reverse + = word [index] Помощь или лучший способ достижения такого же результата - это mucho apreciado.Начальный номер; string index out of range

+1

Положите строку 'print (index, len (word))' 'прямо перед линией' reverse + = ... 'и посмотрите, что произойдет. – Kevin

ответ

2

В то время как другие указали на несколько способов обращения вспять слов в Python, вот что я считаю проблемой с ваш код.

index всегда остается неизменным. Допустим, пользователь вводит четырехбуквенное слово, например abcd. Индекс будет установлен в три (index = len(word) - 1). Затем во время первой итерации петли word будет уменьшен до abc (word = word[:index]). Затем, во время следующей итерации цикла, на первой строке внутри него (reverse += word[index]) вы получите сообщение об ошибке. index все еще три, поэтому вы пытаетесь получить доступ к index[3]. Однако, поскольку word был прерван, больше нет index[3].Вы должны уменьшить index одной каждую итерацию:

while word: 
    reverse += word[index] 
    word = word[:index] 
    index -= 1 

А вот еще один способ обратить вспять слово в Python (Wills код опрятный, хотя):

reverse = "".join([word[i-1] for i in range(len(word), 0, -1)]) 

Счастливое кодирование!

3

реверс слова в питоне проще:

reversed = forward[::-1] 

Я бы не использовать цикл, это дольше и менее читаемое.

+0

Строки Python не имеют функции 'pop'. – DJMcMayhem

+0

Как смущающе, я всегда делаю строки в виде списков. Исправлено, спасибо! – Will

1

Вы хотите использовать функцию "range".

range(start, stop, step) 

Возвращает список с начала, чтобы прекратить увеличивать (или уменьшать) шаг за шагом. Затем вы можете перебирать список. Все вместе, это будет выглядеть примерно так:

for i in range(len(word) -1, -1, -1): 
    reverse += word[i] 
    print(reverse) 

Или проще всего было бы использовать string slicing чтобы изменить слово непосредственно и затем итерацию через это. Как так:

for letter in word[::-1]: 
    reverse += letter 
    print(reverse) 

с тем, как это написано сейчас, это будет не только печатать слово в обратном направлении, но он также будет печатать каждую часть обратного слова. Например, если пользователь ввел «Hello» будут печататься

o 
ol 
oll 
olle 
olleH 

Если вы просто хотите, чтобы напечатать слово назад, лучший способ это просто

print(word[::-1]) 
1

Это потому, что вы не изменяя значение модификации на index

:

while word: 
    reverse += word[index] 
    word = word[:index] 
    index-=1 
print(reverse)` 

, то есть вам нужно уменьшить индекс каждый раз, когда вы прокручиваете, чтобы получить текущую последнюю букву word

Смежные вопросы