Frage von Phreaky, 34

python string charakter löschen?

Hey ich soll einen String entgegennehmen und diesen dann Zeichenweise ausgeben lassen und zwar rückwärts.

Also aus Hallo würde dann o l l a H werden.

def function(string): while len(string) > 0: print(string[-1]) #len(string) -= 1

string = input("string eingeben: ")

function(string)

habe diese function geschrieben und will halt, dass immer der letzte charakter im String gelöscht wird. (habe das mal verdeutlicht durch das len(string) -= 1 dargestellt.

Ich weis, dass strings an sich nicht veränderbar sind und das man einen neuen string erstellen muss aber bekomme das irgendwie nicht so richtig hin.

Antwort
von offeltoffel, 13
def function(string): 
ReverseString = string[::-1]
return ReverseString

print function("Hallo")


In Python sind Strings immer unveränderlich. Wenn du also etwas an der Reihenfolge von Zeichen in einer Variable veränderst, erschaffst du immer einen neuen String. Das ist in deinem Fall nicht so wichtig, kann aber wichtig werden, wenn wir von großen Datenmengen sprechen.

Was aber funktioniert, ist das sog. "Slicing" von Strings, also dass man Teile daraus entnimmt. Du kennst sicher sowas wie:

a = "hallo"
print a[0]
>>> "h"
print a[:3]
>>> "hal"
print a[-1]
>>> "o"

genauso funktioniert mein obiges Beispiel [::-1]. Das Slicing funktioniert nach der Methode "start, stop, step". [2:9:3] würde dir also zuerst das Zeichen mit Index 2 ausgeben (also das 3. Zeichen in der Folge) ausgeben, dann mit Index 2+3 = 5, dann 5+3 = 8 und dann aufhören (weil bei 9 Schluss ist). Lässt du "Start" und "Stop" weg, bleibt nur der "Step" übrig und der ist "-1", was so viel heißt wie "rückwärts".

Eine etwas umständlichere Lösung, die evtl dein Lehrer sich erhofft (und was du versucht hast aufzubauen) ist etwas sowas:

def function(string):
ReverseString = ""
index = len(string)
while index:
index -= 1
ReverseString += string[index]
return ReverseString

print function("Hallo")



Du legst einen neuen String an ("ReverseString") und lässt ihn zunächst leer. "Index" ist der Index des Zeichens, an dem du gerade arbeitest (anfangs der letzte, daher "len(string)". Solange "Index" einen gültigen Wert hat ("while index") soll er "Index" um eins verringern und das entsprechende Zeichen dem neuen String hinzufügen.

Zuletzt gibt es noch eine Möglichkeit, das über die eingebaute Funktion "reverse" zu bewerkstelligen, wobei man auch hier tricksen muss.

def function(string):
ReverseString = ''.join(reversed(string))
return ReverseString

print function("Hallo")


Diese Variante dreht den String um und setzt ihn ohne Leerzeichen wieder zusammen.

Such dir das aus, womit du am meisten anfangen kannst und womit du deine Aufgabe am besten erfüllt siehst ;)

Kommentar von Phreaky ,

Danke für die Antwort, habe jetzt schon eine Lösung gefunden die funktioniert:

def function(string):

while len(list(string)) > 0:
string = list(string)
print(string[-1])
del string[-1]

string = input("Bitte geben Sie einen String ein: ")

function(string)

Die Aufgabe lautet aber, dass man es einmal in einer Iterativen form und einmal in einer rekursiven form schreiben soll.

Meine Frage wäre noch, ob meine Lösung eine Iterative oder eine rekursive ist (tippe mal auf iterative) und wie die jeweils andere form dazu aussehen würde.

Kommentar von offeltoffel ,

Die Funktion ist iterativ. Es gibt einen vorgeschriebenen Anfang und ein Ende...die Funktion wird so oft wiederholt, bis das Ende erreicht ist, oder die Schleife abgebrochen wird.

Eine rekursive Funktion ruft sich immer wieder selbst auf - wenn das Abbruchkriterium nicht erreicht wird tut sie das so lange, bis du das Script stoppst oder den Stecker ziehst ;)

Eine richtig schöne rekursive Variante will mir gerade nicht einfallen. Die hier funktioniert, ist aber etwas kompexer (und wahrscheinlich umständlich):

def function(string):
global ReverseString
index = len(string)
if not index < 1:
ReverseString += string[-1]
string = string[:index-1]
function(string)
else:
print ReverseString

ReverseString = ""function("Hallo")

Da du in der Funktion den "ReverseString" wiederverwendest (er also auch bei mehrmaligem Aufrufen der Funktion seinen String behalten soll), musst du sie als globale Variable deklarieren und vor Aufrufen der Funktion auf "" festlegen. Solange die Länge des eingegebenen Strings noch nicht null ist, fügt er dem "ReverseString" den letzten Buchstaben des Strings hinzu, den du der Funktion übergeben hast. Anschließend kappst du von String den letzten Buchstaben ab und übergibst den verkürzten String wieder der gleichen Funktion. Das geschieht so lange, bis string = "" ist, dann wird die Länge 0 und er gibt die finale Zeichenfolge aus

Wie gesagt, umständlich aber funktioniert.

Antwort
von TheBassHead, 16

string = "Hello"

print(*list(string[::-1]), sep=" ")

#ThinkPythonic

Kommentar von offeltoffel ,

Ich glaube, dass aus "Hallo" -> "o l l a H" werden soll, war nicht wörtlich zu verstehen. Die Leerzeichen sind vermutlich nur zur Verdeutlichung. Ansonsten natürlich vermutlich der "most pythonic way" :)

Keine passende Antwort gefunden?

Fragen Sie die Community