2013-08-19 11 views
5

Il mio programma continua a saltare le lettere a caso! Per esempio, 'coolstory' diventa 'yrotsloc' e 'impressionante' diventa 'mosewa'Il programma per l'inversione di parole salta casualmente le lettere?

Ecco il codice:

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

Questo è un modo molto contorto di invertire una stringa! 'text [:: - 1]' farebbe il trucco. – Ben

+1

Non è così casuale. È sulle lettere ripetute ... Stai usando l'indice ... – MakeCents

+1

Perché lo eseguo, mi dà "yrtsloc", non "yrotsloc". La tua descrizione è errata o non è questo il tuo codice vero? – abarnert

risposta

2

Prova

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

Questo succede quando si ha le lettere duplicati perchè

original_list.index(l) 

sarà sempre tornare lo stesso valore per la stessa l. Quindi new_place sarà lo stesso per due delle stesse lettere in luoghi diversi.

Un modo comune per le stringhe in Python invertire è con affettare:

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

È inoltre possibile utilizzare reversed(), ma che restituisce un reversed object (non una stringa). Questa è un'opzione migliore se si desidera eseguire un'iterazione su una stringa in ordine inverso:

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

Questo sembra sicuramente _should_ essere l'errore ma non riesco a vedere come spiega gli esempi forniti nella domanda? –

+0

@JackAidley, 'reverseed_text [new_place] = l' imposta una posizione esistente con lo stesso carattere – leon

+0

Aye, quindi come produce' yrotsloc' da 'coolstory'? –

Problemi correlati