provare solo:
reverse(hello)
Infatti con
print reverse(hello)
si stampa il valore di ritorno di inversione. E quel valore di ritorno è Nessuno.
Lasciate che vi dia qualche generale consiglia:
reverse() nel codice è una funzione con effetti collaterali (stampa). Si dovrebbe evitare di funzioni con effetti collaterali quando non è necessario, chiedere a reverse() restituendo la parola invece di stamparlo:
def reverse(letters):
backwards = ""
i = len(letters) - 1
while i >= 0:
backwards = backwards + letters[i]
i = i - 1
return backwards
print (reverse("hello"))
Inoltre
i = len(letters) - 1
while i >= 0:
backwards = backwards + letters[i]
i = i - 1
non è facile da mantenere e se aggiungi funzionalità al ciclo il decremento i = i-1 sarà lontano dal luogo in cui dovrebbe essere "concettualmente".Si dovrebbe preferire avere decremento insieme con il controllo:
for i in xrange(len(letters)-1,-1,-1):
backwards = backwards + letters[i]
Quando sono pigro scrivo
myString = myString + fewChars
così posso capire che tu sia pigro. Ma l'aggiunta di pocheChar non modifica myString ma ne crea uno nuovo. Se si aggiungono molti caratteri in modo iterativo, raramente il modo più efficace è aggiungerne uno alla volta. Prendi in considerazione l'utilizzo di join(). Per esempio
letters = 'word'
lettersList = [letters[i] for i in xrange(len(letters)-1,-1,-1)]
myReversed ''.join(lettersList)
ok Io sono d'accordo non è leggibile e probabilmente non ancora più veloce, ma per le stringhe più grandi si scale meglio di un newString = oldString + oneChar approccio.
Detto questo, più divinatorio avvicina
letters[::-1]
già suggerito da qualcuno più veloce di me in genere funziona molto meglio e sono facili da essere letti da programmatori Python.
possibile duplicato di [Restituisci elementi dalla lista in funzione. Python] (http://stackoverflow.com/questions/18990977/return-items-from-list-in-function-python) – Freddie