Betreff führt zweite und dritte If anweisung nicht aus

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.
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Hallo liebes Forum bin noch neu was den Umgang mit Python angeht habe aber schon Java Programmiert bin also kein Anfänger mehr leider habe ich folgendes Problem bei meinem python Programm. Es führt die zwei letzten elif Anweisungen nicht aus habe den Code eingerückt das Python erkennt das jetzt eine Anweisung kommt aber er übersprint immer die Ausgabe. über Hilfe würde ich michs ehr freuen :)


hier mein Code:

Code: Alles auswählen

 # -*- coding: cp1252 -*-
print "Wir suchen Spielerinnen für eine Fußballmannschaft"
geschlecht = raw_input("Welches Geschlecht bist du?")
name = raw_input("Wie ist dein Name: ")
alter = int(raw_input("Gib dein Alter an: "))
geschlecht ='m'
geschlecht ='w'
if geschlecht == 'w':
     if alter > 10 and alter <=12:
        print "Du darfst in der Mannschaft spielen", name
     elif alter < 10 and alter > 12:
        print "Du kannst leider nicht in die Mannschaft", name
elif geschlecht == 'm':
    print "Du bist ein Junge kannst leider nicht in die Mannschaft", name

BlackJack

@Snake19: Du *bist* Anfänger denn das sind zwei ganz grundlegende und zwei ganz einfache Logikprobleme, welche Du bei einem Java-Programm exakt genau so hättest.

Beantworte mal bitte zwei Fragen:
1. Bei welchem Programmablauf sollte Deiner Meinung nach das ``elif geschlecht`` ausgeführt werden?
2. Nenne mir ein Alter das kleiner als 10 und grösser als 12 ist!?
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Ja wenn ich 'm' auswähle dann sollte er die Print Anweisung ausführen weil ja nur Mädchen in die Mannschaft dürfen. Als mit dem alter das sollte so sein wenn die 9 Jahre alt oder 13 Jahre alt sind können sie nicht in die Mannschaft.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Snake19 hat geschrieben:Ja wenn ich 'm' auswähle dann sollte er die Print Anweisung ausführen weil ja nur Mädchen in die Mannschaft dürfen.
Guck doch mal in die Zeile über dem 1. if und überlege warum es völlig egal ist was du auf "Welches Geschlecht bist du?" antwortest.
Als mit dem alter das sollte so sein wenn die 9 Jahre alt oder 13 Jahre alt sind können sie nicht in die Mannschaft.
Wenn du "oder" meinst, warum schreibst du im Programm dann "und"?
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Ah hab es verstanden man was für ein dummer Fehler oder muss ich nehmen und wenn das erste nicht zutrifft brauche ich nur else verstehe.:)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Snake19 hat geschrieben:Ah hab es verstanden man was für ein dummer Fehler oder muss ich nehmen und wenn das erste nicht zutrifft brauche ich nur else verstehe.:)
„Punkt, Punkt, Komma, Strich – fertig ist das Mondgesicht.“ :roll:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

habe jetzt das and durch or ersetzt und elif durch else aber erführt die anweisungen immernoch nicht aus .
Benutzeravatar
/me
User
Beiträge: 3558
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Snake19 hat geschrieben:habe jetzt das and durch or ersetzt und elif durch else aber erführt die anweisungen immernoch nicht aus .
Bitte zeige den kompletten geänderten Code.
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

hier der geänderte Code :

Code: Alles auswählen

 # -*- coding: cp1252 -*-
print "Wir suchen Spielerinnen für eine Fußballmannschaft"
geschlecht = raw_input("Welches Geschlecht bist du?")
name = raw_input("Wie ist dein Name: ")
alter = int(raw_input("Gib dein Alter an: "))
geschlecht ='m'
geschlecht ='w'
if geschlecht == 'w':
     if alter > 10 or alter  <=12:
        print "Du darfst in der Mannschaft spielen", name
     elif alter < 10 or alter > 12:
        print "Du kannst leider nicht in die Mannschaft", name
else:
    print "Du bist ein Junge kannst leider nicht in die Mannschaft", name
Benutzeravatar
/me
User
Beiträge: 3558
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Geh bitte einmal langsam den Code von oben nach unten durch und überlege, unter welchen Voraussetzungen die Abfrage if geschlecht == 'w' nicht zutreffen könnte.

Danach überlege dir, bei welchem Alter die Abfrage if alter > 10 or alter <=12 fehlschlagen kann. Dafür brauchst du nicht einmal den kompletten Code zu betrachten, die Zeile mit der Abfrage reicht schon.
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Ich stehe gerade total auf dem Schlauch irgendwie.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Zeile 6 & 7 stehen auch ziemlich auf der Leitung.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Überlege doch mal, welchen Wert `geschlecht` in jeder Zeile Deines Scriptes annimmt bzw. annehmen kann:

Code: Alles auswählen

In [1]: foo = 42

In [2]: if foo == 42:
   ...:     True
   ...:     
   ...:     
Out[2]: True
Was passiert wohl, wenn ich vor [1] dieses einbaute: `foo = raw_input()`
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Ah hab den vorher schon zwei werte zugewiesen verstehe. Aber das mit der if anweisung ist mir noch ein rätsel.

Code: Alles auswählen

 # -*- coding: cp1252 -*-
print "Wir suchen Spielerinnen für eine Fußballmannschaft"
geschlecht = raw_input("Welches Geschlecht bist du?")
name = raw_input("Wie ist dein Name: ")
alter = int(raw_input("Gib dein Alter an: "))
if geschlecht == 'w':
     if alter > 10 or alter  <=12:
        print "Du darfst in der Mannschaft spielen", name
     elif alter < 10 or alter > 12:
        print "Du kannst leider nicht in die Mannschaft", name
else:
    print "Du bist ein Junge kannst leider nicht in die Mannschaft", name

Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn jemand 8 Jahre alt ist, ist man dann jünger als 12? Ich denke mal ja ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3558
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Snake19 hat geschrieben:Ah hab den vorher schon zwei werte zugewiesen verstehe.
Ehe das später zu Missverständnissen führt sollten wir hier die Aussage besser korrigieren. Du hast nicht zwei Werte zugewiesen, du hast zweimal einen Wert zugewiesen. Noch präziser wäre die Aussage, dass du zweimal nacheinander einen Wert an den selben Namen gebunden hast.
Snake19 hat geschrieben:Ah hab den vorher schon zwei werte zugewiesen verstehe. Aber das mit der if anweisung ist mir noch ein rätsel.

Du hast die Bedingung if alter > 10 or alter <=12. Der Gesamtausdruck wird True, sobald auch nur einer der beiden Teilausdrücke wahr ist. Jetzt überlege dir, was jeweils bei Werten von 8, 12 und 16 passiert. Wann tritt der Fall ein, dass beide Teilausdrücke falsch sind und damit ein False als Gesamtergebnis liefern? Liefere eine Beispielzahl bei der das so ist und wir können das intensiver durchgehen.
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Ok da stimmt will es aber so machen das Mädchen zwischen 10 und 12 Jahren nru da rein kommen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau doch mal...

Code: Alles auswählen

0...9 | 10...12 | 13.....
   A         B         C
Überlege doch mal, welche Bedingungen Zahlen in den drei Bereichen erfüllen müssen. Anschließend kann man dann überlegen, wie man ggf. Bereich A und C von den Bedingungen her zusammenführen kann.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3558
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Snake19 hat geschrieben:Ok da stimmt will es aber so machen das Mädchen zwischen 10 und 12 Jahren nru da rein kommen.
Ich zitiere und formatiere: "[...] Mädchen zwischen 10 und 12 Jahren [...]"

Das Wissen um die Bedeutung der Worte "und" und "oder" setze ich momentan noch als bekannt voraus.
Snake19
User
Beiträge: 9
Registriert: Sonntag 20. November 2011, 13:25

Hab es hinbekomen sry stand voll auf dem Schlauch wenn man mal wo hängt und die ganze zeit drüber krübelt kommt man nicht mehr drauf. :-)

Code: Alles auswählen

 # -*- coding: cp1252 -*-
print "Wir suchen Spielerinnen für eine Fußballmannschaft"
geschlecht = raw_input("Welches Geschlecht bist du?")
name = raw_input("Wie ist dein Name: ")
alter = int(raw_input("Gib dein Alter an: "))
if geschlecht == 'w':
       if alter >= 10 and  alter <=12:
        print "Du darfst in der Mannschaft spielen", name
       else:
        print "Du kannst leider nicht in die Mannschaft", name
else:
    print "Du bist ein Junge kannst leider nicht in die Mannschaft", name

Antworten