2013-04-08 2 views
0

Я пытаюсь вручную (без встроенной функции) отменить строку текста, однако код дает мне «индекс назначения списка вне диапазона» для list_rev[u] = list_[i]. Я не понимаю, почему это происходит? То, что я пытаюсь сделать, это взять текст из list_ и поместить его в list_rev в обратном порядке, а затем распечатать list_rev.Обратный текст в функции python

Спасибо!

text = raw_input("Word?") 

text = str(text) 

def reverse(text): 
    list_rev = [] 
    list_ = [] 
    length = int(len(text)) 
    k = 0 
    while k < (length): 
     list_.append(str(text)[k]) 
     k += 1 

    i = int(length-1) 
    u = 0 
    while i >= 0: 
     list_rev[u] = list_[i] 
     u += 1 
     i -= 1 
    return list_rev, 

print reverse(text) 
+5

'my_string = "Foo бар База"; reverseed_string = my_string [:: - 1] ' – MattDMo

+0

вам нужно добавить в list_rev, размер 0 и вы никогда не измените его размер. кроме этого, это ужасный код для слишком многих причин .... – 2013-04-08 17:01:32

ответ

0

Вы можете добавить символы в список:

text = raw_input("Word?") 

text = str(text) 

def reverse(text): 
    list_rev = [] 
    list_ = [] 
    length = int(len(text)) 
    k = 0 
    while k < (length): 
     list_.append(str(text)[k]) 
     k += 1 

    i = int(length-1) 
    u = 0 
    while i >= 0: 
     list_rev.append(list_[i]) 
     i -= 1 
    return list_rev, 

print reverse(text) 

Выход:

Word?qwerty 
(['y', 't', 'r', 'e', 'w', 'q'],) 
1

Вы получаете «индекс присвоения списка из диапазона» ошибка из выражения list_rev[u], так как индекс (u) находится за пределами диапазона 0 .. len(list_rev)-1. В частности, list_rev пуст, поэтому нет возможных значений u, которые ссылаются на действительный элемент list_rev.

Если вы хотите добавить новый элемент list_rev, попробуйте .append(), .extend() или .insert().

0

list_rev является пустым списком: вы должны добавить полукокс:

text = raw_input("Word?") 

text = str(text) 

def reverse(text): 
    list_rev = [] 
    list_ = [] 
    length = int(len(text)) 
    k = 0 
    while k < (length): 
     list_.append(str(text)[k]) 
     k += 1 

    i = int(length-1) 
    u = 0 
    while i >= 0: 
     list_rev.append( list_[i]) 
     u += 1 
     i -= 1 
    return list_rev 

print ''.join( str(elem) for elem in reverse(text)) 
0

Вы также можете просто решить эту проблему, как показано ниже с помощью вставки,

def reverse(text): 
    reverse_list = [] 
    for a in text: 
     reverse_list.insert(0,a) 
    return "".join(reverse_list) 

text = raw_input("Word?") 

reverse_text = reverse(text) 

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