String verarbeiten, erster und letzter Buchstabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
username
User
Beiträge: 2
Registriert: Samstag 2. Mai 2009, 20:10

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
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
Zuletzt geändert von Mawilo am Samstag 2. Mai 2009, 20:44, insgesamt 1-mal geändert.
BlackJack

Versuch's doch mal mit -1 als Index.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

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.
username
User
Beiträge: 2
Registriert: Samstag 2. Mai 2009, 20:10

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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])
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Und für schreibfaule,die um jeden Buchstaben kämpfen :wink:

Code: Alles auswählen

name = "Egal"
print "Der erste Buchstabe ist {0} und der letzte ist {1}".format(name[0], name[-1])
Gruß...busfahrer
Alles wird gut ;-)
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

busfahrer hat geschrieben:Und für schreibfaule,die um jeden Buchstaben kämpfen :wink:
... 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])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

?

Code: Alles auswählen

s = "string"
print("Der erste Buchstabe ist", s[0], "und der letzte ist", s[-1] + ".")
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Code: Alles auswählen

"geht %s nicht mehr in zukunft?" % "das"
http://www.kinderpornos.info
BlackJack

Doch das geht weiterhin.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Wozu dann eigentlich das format attribute. Ist das nicht wieder was, was eigentlich kein Mensch braucht?
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

na dann:

Code: Alles auswählen

s = "string" 
print("Der erste Buchstabe ist %s und der letzte ist %s." % (s[0], s[-1]))
http://www.kinderpornos.info
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

also wirklich man kanns ja auch übertreiben.

ich finde die printf syntax sehr angenehm und schlüssig.
http://www.kinderpornos.info
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Antworten