if elif else

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.
Antworten
Ellen
User
Beiträge: 2
Registriert: Montag 23. Mai 2022, 12:20

Hallo Zusammen,

ich komme einfach nicht auf die Lösung von dieser Aufgabe. Wer kann mir helfen? Sorry, ich bin blutige Anfängerin.

Aufgabe:
Auf dem letzten Zettel, den sie finden, steht der folgende Satz: "Du Suchender hast Mut und wirst die linke Allee nicht einschlagen sondern den Schatz entdecken sonst haben wir ihn gefunden". Zusätzlich befindet sich eine Anweisung darauf: Gib nur die Wörter aus, die an der zweiten Stelle (Index = 1) ein „e“ enthalten oder eine gerade Anzahl an Buchstaben verwenden. Kannst du den Freunden helfen?

Tipp 1: Um zu überprüfen, ob ein Wort eine gerade Anzahl an Buchstaben besitzt, könnt ihr die Funktion buchstabenanzahl_ist_gerade(wort) aus der Bibliothek funktionen verwenden. Dieser übergebt ihr einen String und erhaltet dann einen Boolean zurück, der euch sagt, ob der String eine gerade oder ungerade Anzahl an Buchstaben hatte. Für den Aufruf buchstabenanzahl_ist_gerade("Beispiel") wäre das also True.

Tipp 2: Es könnte hilfreich sein, den Satz zunächst in eine Liste zu zerlegen.


Mein Vorschlag:

from funktionen import buchstabenanzahl_ist_gerade

satz = "Du Suchender hast Mut und wirst die linke Allee nicht einschlagen sondern den Schatz entdecken sonst haben wir ihn gefunden."
geteilter_satz = satz.split()
print(geteilter_satz)
for wort in geteilter_satz:
if wort[1] == "e":
print(wort)
elif buchstabenanzahl_ist_gerade (wort) == True:
print(wort)
else:
print("Sonst haben wir ihn gefunden.")

Dann erhalte ich leider dieses Ergebnis:

['Du', 'Suchender', 'hast', 'Mut', 'und', 'wirst', 'die', 'linke', 'Allee', 'nicht', 'einschlagen', 'sondern', 'den', 'Schatz', 'entdecken', 'sonst', 'haben', 'wir', 'ihn', 'gefunden.']
Du
Sonst haben wir ihn gefunden.
hast
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
den
Schatz
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
Sonst haben wir ihn gefunden.
gefunden.

Wieso schreibt er so oft "Sonst haben wir ihn gefunden." ?

LG
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na das else bedeutet doch, dass wenn der Buchstabe an der zweiten Stelle nicht e ist, und das Wort auch keine gerade Anzahl hat, dann soll das passieren, was dann im else-Block steht. Und da schreibst du mit print("Sonst haben wir ihn gefunden") eben diesen Satz fuer jedes Wort, dass nicht einer der beiden Bedingungen genuegt, hin.

Die else-Klausel kannst du als ganzes auch einfach weglassen, dann sollte das doch passen.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ellen: Anmerkungen: `geteilter_satz` ist als Name IMHO ein bisschen lang aber auch ungenau. Die Liste enthält Worte und damit wäre `worte` ein Name der das deutlicher ausdrückt.

Das ``wort[1]`` funktioniert, also das es keine Worte gibt die kürzer als zwei Buchstaben sind, stimmt zwar für den vorgegebenen Satz, aber der Code wäre robuster gegen Veränderungen wenn man vor dem Zugriff prüfen würde, ob die Mindestlänge tatsächlich erfüllt ist. Falls man das beispielsweise in eine andere natürliche Sprache übersetzen wollen würde, gibt es ja Sprachen in denen Worte vorkommen, die nur aus einem Buchstaben bestehen. Oder falls jemand eine Ziffer oder ein Emoji in die Eingabedaten einbauen möchte.

Man vergleicht nicht mit literalen Wahrheitswerten. Bei einem Test gegen `True` kommt am Ende wieder `True` heraus wenn man das mit `True` vergleicht und `False` sonst, da kann man also gleich den Wert nehmen mit dem man verglichen hat. (Um auf das Gegenteil zu testen gibt es den ``not``-Operator.)

Also konkret:

Code: Alles auswählen

# statt
if is_odd(number) == True:
    ...

# einfach
if is_odd(number):
    ...
Statt das mit zwei Zweigen abzuhandeln in denen jeweils eine der Bedingungen geprüft, dann aber in beiden Zweigen genau das gleiche getan wird, reicht *ein* ``if`` wo man die beiden Bedingungen mit dem entsprechenden Operator verknüpft.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten