2013-08-19 10 views
5

Mój program losowo pomija litery! Na przykład 'coolstory' staje się 'yrotsloc' i 'super' staje się 'mosewa'Program do odwrócenia wyrazów losowo pomija litery?

Oto kod:

def reverse(text): 
    length = len(text) 
    reversed_text = [] 
    for i in range(0,length + 1): 
     reversed_text += [''] 
    original_list = [] 
    for l in text: 
     original_list.append(l) 
     new_place = length - (original_list.index(l)) 
     reversed_text[new_place] = l 
    return "".join(reversed_text) 
+3

To bardzo zawiły sposób na odwrócenie ciągu znaków! 'text [:: - 1]' zrobiłoby lewę. – Ben

+1

To nie jest takie losowe. To jest na powtarzających się literach ... Używasz indeksu ... – MakeCents

+1

Po co to robię, to daje mi 'yrtsloc'', a nie' yrotsloc'. Czy twój opis jest błędny, czy nie jest to twój rzeczywisty kod? – abarnert

Odpowiedz

2

Spróbuj

def reverse(text): 
    return text[::-1] 
7

Dzieje się tak, gdy masz duplikatów liter, ponieważ

będzie zawsze zwracać tę samą wartość dla tego samego l. Tak więc new_place będzie takie samo dla dwóch z tych samych liter w różnych lokalizacjach.

Jeden wspólny sposób, aby odwrócić ciągi w Pythonie jest z krojenia:

>>> s = "hello" 
>>> s[::-1] 
'olleh' 

Można również użyć reversed(), ale zwraca reversed object (nie łańcuch). Jest to lepsza opcja, jeśli chcesz powtórzyć ciąg znaków w kolejności odwrotnej:

>>> for c in reversed(s): 
...  print c 
... 
o 
l 
l 
e 
h 
+0

To z pewnością wygląda na to, że powinienem być błędem, ale nie rozumiem, jak wyjaśnia on przykłady podane w pytaniu? –

+0

@JackAidley, 'reversed_text [new_place] = l' ustawia istniejącą pozycję o tym samym znaku – leon

+0

Aye, więc w jaki sposób tworzy' yrotsloc' z 'coolstory'? –

Powiązane problemy