Seite 1 von 2
String verarbeiten, erster und letzter Buchstabe
Verfasst: Samstag 2. Mai 2009, 20:34
von username
Hallo zusammen,
ich mache gerade meine ersten Schritte mit Python und hab nun folgendes Problem: Ich möchte aus einem beliebigen Wort den Anfangs- und Endbuchstaben auslesen.
Code: Alles auswählen
name = "Egal"
width_str = len(name)
ges = name[0]
ges_last = name[width_str]
print " Der erste Buchstabe ist ", ges, ",der letzte Bustabe ist ", ges_last, "."
Das eigentliche Problem kommt glaub ich in der 4. Zeile auf, ich bin dankbar für jede Hilfe.
Gruß username
Verfasst: Samstag 2. Mai 2009, 20:42
von Mawilo
Das letzte Element kannst du mit -1 ausgeben
Code: Alles auswählen
name = "Egal"
width_str = len(name)
ges = name[0]
ges_last = name[-1]
print " Der erste Buchstabe ist ", ges, ",der letzte Buchstabe ist ", ges_last, ".
Mawilo
Verfasst: Samstag 2. Mai 2009, 20:42
von BlackJack
Versuch's doch mal mit -1 als Index.
Verfasst: Samstag 2. Mai 2009, 20:42
von Nocta
name[width_str] wird nicht klappen, da dann ein IndexError kommt.
Die länge ist immer um 1 größer als die Anzahl der Elemente einer Liste/eines Strings, da die Indizes bei 0 anfangen und nicht bei 1.
Für den letzten Buchstaben müsste es also name[width_str-1] heißen und für den ersten name[0].
Allerdings bietet sich da auch an, name[-1] zu schreiben.
Und man sollte Variablen keinen Variablentyp (zb width_str) als Namen anhängen oder so, da Python keine statische Programmiersprache ist und sich dies auch einfach mal ändern kann und es teilweise auch irgendwo irrelevant ist.
Verfasst: Samstag 2. Mai 2009, 20:52
von username
Vielen Dank für die vielen schnellen Antworten, dass hab ich echt nicht erwartet! Ich hab es jetzt so gelöst wie empfohlen:
Code: Alles auswählen
name = "Egal"
width_str = len(name)
ges = name[0]
ges_last = name[-1]
print " Der erste Buchstabe ist ", ges, ",der letzte Bustabe ist ", ges_last, ".
Gruß username
Verfasst: Samstag 2. Mai 2009, 22:33
von cofi
Soo und nu ohne den unnötigen Kram und zukunftskompatibel(tm)
Code: Alles auswählen
name = "Egal"
print "Der erste Buchstabe ist: {first}, der letzte aber ist: {last}".format(first=name[0], last=name[-1])
Verfasst: Samstag 2. Mai 2009, 23:22
von busfahrer
Und für schreibfaule,die um jeden Buchstaben kämpfen
Code: Alles auswählen
name = "Egal"
print "Der erste Buchstabe ist {0} und der letzte ist {1}".format(name[0], name[-1])
Gruß...busfahrer
Verfasst: Samstag 2. Mai 2009, 23:23
von Nocta
Naja das str hast/hattest du noch im Namen drin

Verursacht natürlich keinen Fehler oder sowas aber das hat eben mit dem Programmierstil in Python zu tun.
Verfasst: Samstag 2. Mai 2009, 23:37
von Leonidas
busfahrer hat geschrieben:Und für schreibfaule,die um jeden Buchstaben kämpfen
... gibt es ab Python 3.1 auch
Code: Alles auswählen
name = "Egal"
print "Der erste Buchstabe ist {} und der letzte ist {}".format(name[0], name[-1])
Verfasst: Sonntag 3. Mai 2009, 02:34
von bremer
?
Code: Alles auswählen
s = "string"
print("Der erste Buchstabe ist", s[0], "und der letzte ist", s[-1] + ".")
Verfasst: Sonntag 3. Mai 2009, 10:18
von Dill
Verfasst: Sonntag 3. Mai 2009, 10:24
von BlackJack
Doch das geht weiterhin.
Verfasst: Sonntag 3. Mai 2009, 10:55
von hendrikS
Wozu dann eigentlich das format attribute. Ist das nicht wieder was, was eigentlich kein Mensch braucht?
Verfasst: Sonntag 3. Mai 2009, 11:01
von Dill
na dann:
Code: Alles auswählen
s = "string"
print("Der erste Buchstabe ist %s und der letzte ist %s." % (s[0], s[-1]))
Verfasst: Sonntag 3. Mai 2009, 11:05
von DasIch
hendrikS hat geschrieben:Wozu dann eigentlich das format attribute. Ist das nicht wieder was, was eigentlich kein Mensch braucht?
Du findest es also elegant den Modulo Operator zu missbrauchen?
Verfasst: Sonntag 3. Mai 2009, 11:06
von Leonidas
hendrikS hat geschrieben:Wozu dann eigentlich das format attribute.
Naja, weil da einige dagegen waren die printf-Syntax rauszunehmen (das war ursprünglich geplant). Generell ist aber das neue Format idR. zu bevorzugen. Ist ja auch klarer.
Verfasst: Sonntag 3. Mai 2009, 11:16
von hendrikS
DasIch hat geschrieben:
Du findest es also elegant den Modulo Operator zu missbrauchen?
Das ist doch kein Mißbrauch. % ist halt in Zusammenhang mit verschiedenen Typen auch verschieden anzuwenden.
Genauso bei +. Summe oder Konkatinieren. Zwei paar Schuhe. Oder willst Du Strings/Listen zukünftig nicht mehr mit + verbinden können dürfen.
Verfasst: Sonntag 3. Mai 2009, 11:25
von Leonidas
hendrikS hat geschrieben:Das ist doch kein Mißbrauch. % ist halt in Zusammenhang mit verschiedenen Typen auch verschieden anzuwenden.
Genauso bei +. Summe oder Konkatinieren. Zwei paar Schuhe. Oder willst Du Strings/Listen zukünftig nicht mehr mit + verbinden können dürfen.
Doch ist es. Unter einer Listenaddition würde man das Verbinden von Listen verstehen (oder eventuell eine komponentenweise Addition), aber was wäre semantisch der Rest der Division von einem String durch einen String oder ein Tupel?
Verfasst: Sonntag 3. Mai 2009, 11:42
von Dill
also wirklich man kanns ja auch übertreiben.
ich finde die printf syntax sehr angenehm und schlüssig.
Verfasst: Sonntag 3. Mai 2009, 11:46
von DasIch
hendrikS hat geschrieben:Zwei paar Schuhe.
Exakt dass ist es. Wenn ich Sequenzen mit + verbinden kann ist dass durchaus noch logisch und nachvollziehbar aber was bitteschön ergibt Modulo für Strings und wenn Modulo geht was bewirkt dann erst eine Division?
Hier wurde einfach der nächst beste Operator genommen und missbraucht.
Ein Glück dass das demnächst deprecated wird.