2016-06-08 10 views
-1

Die Aufgabe ist:Warum funktioniert mein Front_back-Programm in Python nicht?

einen String gegeben, geben einen neuen String, wo die erste und letzte Zeichen ausgetauscht wurden.

def front_back(str): 

    if len(str)<=0: 
    return str 

    else: 
    front=str[0] 
    back=str[-1] 
    new = str.replace(str[0], back) 
    print new 
    new_2=new.replace(new[-1], front) 
    print new_2 

front_back("code") 
+0

Was ist das Problem? –

+0

Willkommen bei StackOverflow. Sieht so aus, als hättest du selbst eine Hausaufgabe und benötigst Hilfe? Ich würde vorschlagen, dass Sie Ihren Lehrer fragen oder in Ihrem Lernmaterial nachschlagen und nicht nach einer vollständigen Antwort auf die Interwebz suchen. Aber wenn Sie das tun, erklären Sie bitte, welcher Teil des Codes für Sie nicht funktioniert, was das gewünschte Verhalten ist, vielleicht sogar eine Stack-Trace, die den aufgetretenen Fehler zeigt und ** am wichtigsten ist: Was Sie? Ich habe versucht, dieses Problem zu lösen. – Torxed

+0

Das Problem ist in der zweiten 'Ersetzen': Es ersetzt alle Zeichen, nicht nur die letzten. –

Antwort

2

Warum?

Es wird nicht funktionieren, weil .replace() alle Vorkommen dieses Zeichens ersetzen wird, nur nicht unbedingt das erste und letzte

Nachfolgend finden Sie eine Lösung, die die Zeichenfolge mit dem ersten, Körper und letzten Teilen

Konstrukte
text = 'code' 
first, body, last = text[0], text[1:-1], text[-1] 
result = last + body + first 
# 'eodc' 
1

Stringliterale kann in Scheiben geschnitten und hinzugefügt:

>>> s = "hello world" 
>>> s[-1] + s[1:-1] + s[0] 
'dello worlh' 

P.S. str ist in Python integriert, so dass es als Variablenname eine schlechte Idee ist.

0

Zuerst nie rufen Sie eine Variable str. Warum? Weil das der Name der Klasse für Python-Strings ist. Wenn Sie denselben Namen verwenden, verlieren Sie ihn. Ich benutze txt.

Ihr Test mit der Länge ist sinnvoll, aber die untere Grenze kann erhöht werden (ein einzelnes Zeichen wäre albern).

Aber str.replace() ist nicht möglich. Warum? Nun, es könnte in Ihrem Testfall funktionieren, aber nur weil jedes Zeichen einzigartig ist. str.replace() ersetzt alle Vorkommen der angegebenen Zeichenfolge. Wenn also das erste oder letzte Zeichen an anderer Stelle wiederholt wurde, würde das auch geändert werden.

Sie können slicing verwenden, wobei das erste Zeichen (ganz links) 0 (Null) ist. Sie können auch von rechts mit negativen Zahlen indizieren, also -1 ist das letzte (am weitesten rechts stehende) Zeichen. Der Zeichenbereich reicht vom Anfang bis zum Zeichen nach dem letzten Zeichen. So geht [1:-1] vom zweiten Zeichen zum vorletzten.

def front_back(txt): 

    if len(txt) <= 1: 
    return txt 
    else: 
    new_txt = txt[-1] + txt[1:-1] + txt[0] 
    return new_txt 

print front_back("code") 

Ich benutze return in der Funktion, da dies die normale Art und Weise der Verarbeitung von Text wäre, und das ist gefragt in Ihrer Frage.

Verwandte Themen