2017-01-05 2 views
2

Благодарим вас за ответы. Я понял, почему мой код ошибочен.Отменить предложение в python

Пожалуйста, не предоставляйте мне решения, потому что у меня есть несколько, но потом я хочу понять, что мой код не работает.

Я думаю, что это связано с while x <= -len(split_result):", но затем я думаю, что логика правильная. Что не так с моим кодом?

O_string = ("Me name is Mr_T") 
split_result = O_string.split() 
print(split_result) 

x=0 
list=[] 

while x <= -len(split_result): 
    list.append(split_result[x-1]) 
    x = x-1 

result=" ".join(list) 
print (result) 
+2

' '.join (' Hello world'.split() [:: - 1]) ' –

+1

Вы проверяете, является ли значение' x' меньше или равно отрицательному значению после инициализации как 'x = 0', поэтому вы 'никогда не войду в цикл 'while' – asongtoruin

ответ

1

может использовать обратной функции, а также str.join

O_string = ("Me name is Mr_T") 
split_result = O_string.split() 
split_result.reverse() 
print " ".join(split_result) 
0

Вы можете попробовать:

>>> O_string = ("Me name is Mr_T") 
>>> O_list = O_string.split() 
>>> O_list.reverse() 
>>> " ".join(O_list) 
'Mr_T is name Me' 
5

Вы можете отменить список с [::-1]:

print(' '.join(O_string.split()[::-1])) 

Выход:

'Mr_T is name Me' 

Здесь [::-1] означает принимать все от начала до конца с размером шага минус один.

В качестве альтернативы, вы можете использовать встроенную функцию reversed:

>>> ' '.join(reversed(O_string.split())) 
'Mr_T is name Me' 

Об алгоритме. По-моему, в негативных показателях всегда сложно думать. Я бы предложил пойти положительным:

O_string = ("Me name is Mr_T") 
split_result = O_string.split() 

res = [] 
x = len(split_result) - 1 
while x >= 0: 
    res.append(split_result[x]) 
    x = x-1 

result=" ".join(res) 
print (result) 

Выход:

'Mr_T is name Me' 

Здесь:

x = len(split_result) - 1 

дает последний индекс списка. Мы начинаем индексирование с 0. Поэтому вам нужно вычесть 1 из длины списка.

Вы считаете его вниз:

x = x-1 

и остановится, как только вы получите отрицательный индекс:

while x >= 0: 

Подсказка: Не используйте list в качестве имени переменной. Он является встроенным и не должен использоваться для обозначения собственных объектов. Если вы это сделаете, вы больше не сможете использовать list() (в том же пространстве имен).

0

Вы можете использовать обратный отменить приговор:

o_string = "Me name is Mr_T" 
words = sentence.split() 
o_string = " ".join(reversed(words)) 
print(o_string) 
1

В питона, list[::-1] даст вам список, в котором все элементы списка, хранящегося в перевернутом положении индекса. т.е..) reverseList1=list1[::-1] использование это.

1

Чтобы ответить «Что не так с моим кодом?», Давайте посмотрим на то, что происходит в оболочке:.

>>> O_string = ("Me name is Mr_T") 
split_result = O_string.split() 
print(split_result) 
['Me', 'name', 'is', 'Mr_T'] 
>>> x=0 
>>> len(split_result) 
4 
>>> -len(split_result) 
-4 
>>> x 
0 
>>> 0 <= 4 
True 
>>> 0 <= -4 
False 
>>> x <= -len(split_result) 
False 
>>> while False: print('this will not get printed') 

Таким образом, ваше состояние в то время как петля никогда не будет истинным, и цикл никогда не произойдет Вот пример того, что работает:

x = -1 
while x >= -len(split_result): 
    list.append(split_result[x]) 
+0

Скажем, я установил x = 0 в начале, – Alexis

+0

@Alexis хорошо, тогда вам нужно внести другие корректировки, чтобы компенсировать:' x> = -len (split_result) + 1' и 'split_result [ х-1] '. –

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