Probleme bei einer ''if'' Abfrage.

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Hallo!

Ich wollte gerade mein Programm zum ausrechnen der BMI um etwas ergänzen. Eine altersabfrage. Das wollte ich wiefolgt lösen:

Code: Alles auswählen

gewicht = raw_input('Geben Sie Ihr Körpergewicht in Kg an: ')
groesse = raw_input('Geben Sie Ihre Körpergröße in Meter an: ')
alter = raw_input('Geben Sie bitte Ihr Alter an oder schreiben sie "nein": ')

gewicht = float(gewicht.replace(',', '.')) #Ersetzt das Komma durch einen Punkt
groesse = float(groesse.replace(',', '.'))

bmi = gewicht / (groesse*groesse)

# Auf Alter hinweisen
if alter == 'nein' or 'Nein' or 'n':
    print 'Sie sollten Ihr alter angeben. Nur dann ist ein exakter Vergleich moeglich.'
    alterFrage = raw_input('Bitte geben Sie Ihr alter an oder schreiben Sie wieder "nein": ')
    if alterFrage == 'nein' or 'Nein' or 'n':
        alter = 'nein'
    else:
        alter = alterFrage
else:
    print 'Danke das Sie ihr Alter angegeben haben hier nun die Ausgabe:'
        
Nun ist das Problem das selbst wenn ich bei der ersten Abfrage mein Alter eingebe trotzdem noch einmal nachfragt. Aber ich habe doch mit ''else'' angegeben was geschehen soll wenn
Beim Alter eben nicht ''nein'' oder 'Nein' oder 'n' eingeben wurde.

Irgentwo muss ich etwas übersehen haben. Könnt ihr mir helfen, wo mein Problem liegt?

Ich freu mich auf die Antwort ;)


MfG ChrissiG
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Ich habe mein Problem selbst gefunden ;)

Sorry!

Das Problem lag darin das ich statt ''or'' ''and'' verwenden musste. Nur so wurde alles geprüft ;)

Na Ja...

MfG ChrissiG
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Ich würde, um der Usability willen, die Alterfrage so gestalten, dass der User auch einfach nix eingeben kann. Wenn er jetzt z.B. no schreibt, dann würdest du mit dem Alter no rechnen.
Und dann gehts auch mit der If leichter und kürzer:
if alter: Das sagt dir dann ob das Alter angegeben würde oder nich :wink:

Greetz
BlackJack

``or`` verknüft das was links davon steht, mit dem was rechts davon steht. Du verknüpfst also das Ergebnis von (alter == 'nein') mit 'Nein' und dann nochmal mit 'n'. Da nichtleere Zeichenketten "wahr" sind, ist der Ausdruck immer wahr. Du hättest auch schreiben können ``(alter == 'nein') or True or True``.

Also entweder Du verknüpfst drei vollständige Vergleiche

Code: Alles auswählen

alter == 'Nein' or alter == 'nein' or alter == 'n'
oder etwas kürzer:

Code: Alles auswählen

alter.lower().startswith('n')
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Wenn er jetzt z.B. no schreibt, dann würdest du mit dem Alter no rechnen.
Is wahr. Das sollte man auch beachten
Und dann gehts auch mit der If leichter und kürzer:
if alter: Das sagt dir dann ob das Alter angegeben würde oder nich Wink
Das sagt mir obs angegeben wurde oder nicht. Ok. Aber ich kenne Personen die trotz das ich sage. Nichts eingeben. Trotzdem ein ''nein'' eingeben. Dann haben wir hier auch wieder ein Problem.

Gäbe es eine Möglichkeit herauszufinden ob Zahlen oder Buchstaben angegeben wurden? Das würde das Problem ganz einfach lösen. Wenn Buchstabe oder gar nichts ist das ein ''nein''. Und wenn eine Zahl ist das das Alter. Gäbe es so eine Möglichkeit?

Und zu der extrem kurzen Lösung von BlackJack:

Code: Alles auswählen

alter.lower().startswith('n')
Versteh ich in soweit das es prüft ob der Inhalt von ''alter'' mit ''n'' anfängt.
Aber was macht das ''.lower()''?

Danke schon mal für die Hilfe.

MfG ChrissiG
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

lower() macht den wandelt den String in Kleinbuchstaben um.
Wenn alter mit einem n anfängt kann das für no,nein,nee,nnöhö usw stehen.

Code: Alles auswählen

if type(alter) == 'int':
damit weißt du, obs ein Integer is, aber das bringt dir nichts, da raw_input einen String zurückliefert, also rat ich dir zu einer try...except Überprüfung, ob du den String in ein Int umwandeln kannst. Damit kannst du dir auch die if Abfrage sparen :wink:

Code: Alles auswählen

try:
  int(alter)
except ValueError:
  #Frage wegen des Alters
else:
  alter=int(alter)
Soweit verstanden?
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

könntest auch

Code: Alles auswählen

if alter.isalnum() == True:
    #mach irgend was
else:
    #nach Alter fragen
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

...try...except Überprüfung...

Code: Alles auswählen

try:
  int(alter)
except ValueError:
  #Frage wegen des Alters
else:
  alter=int(alter)
schaun wa ma ;)

Also ver versucht alter in eine Zahl umzuwandeln. Sollte das nicht gehen ''except'' gibt es den ''ValueError'' und das heißt das Buchstaben angegeben wurden.
Nun kann ich nach dem Alter nochmal fragen.
Und wenn man ''alter'' in eine Zahl umwandelt kann tut er es.
Das wäre dann das ''else'' usw.

richtig verstanden? Wenn ja ;) schän wie kurtz man das machen kann ;)

Danke!

MfG ChrissiG
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

DatenMetzgerX hat geschrieben:könntest auch

Code: Alles auswählen

if alter.isalnum() == True:
    #mach irgend was
else:
    #nach Alter fragen
Wenn dus kurz willst, nimm diese Methode. Ich kannte die Methode isalnum() noch gar nich, is aber ne feine Sache :wink:
Die Methode überprüft ob der String nur Alfanummersiche "Daten" enthält. Wenn ja und wenn mindestens ein Wert in dem String steht, dann spuckt die Methode True aus - ansonsten False.
Eigentlich ne ganz feine Sache.
Quelle:
http://docs.python.org/lib/string-methods.html#l2h-185
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

CrackPod hat geschrieben:
DatenMetzgerX hat geschrieben:könntest auch

Code: Alles auswählen

if alter.isalnum() == True:
    #mach irgend was
else:
    #nach Alter fragen
Wenn dus kurz willst, nimm diese Methode. Ich kannte die Methode isalnum() noch gar nich, is aber ne feine Sache :wink:
Die Methode überprüft ob der String nur Alfanummersiche "Daten" enthält. Wenn ja und wenn mindestens ein Wert in dem String steht, dann spuckt die Methode True aus - ansonsten False.
Eigentlich ne ganz feine Sache.
Quelle:
http://docs.python.org/lib/string-methods.html#l2h-185
Is wirklich ne feine Sache ;)

Im Moment habe ich das ganze so eingebaut:

Code: Alles auswählen

# Auf Alter hinweisen
try:
    int(alter)
except ValueError:
    alter = raw_input('Bitte geben Sie Ihr Alter ein, es ist wichtig! Eingabe: ')
else:
    alter = int(alter)
Klappt ohne Probleme.

Doch die andere Version mit

Code: Alles auswählen

if alter.isalnum() == True:
schaut auch gut aus. Ob besser entscheide ich dann ;)

Jedoch klappt das nicht ganz so wie ich das wollte.

mal schaun ich habe das wie folgt eingebaut:

Code: Alles auswählen

# Auf Alter hinweisen
if alter.isalnum() == True:
    print 'Sie haben das Alter angegeben, die Auswertung wird gleich folgen'
else:
    raw_input('Bitte geben Sie Ihr Alter an. Es wird benoetigt!: ')
Das heißt ja dann eigentlich das wenn die Variable ''alter'' gefüllt ist und Zahlen enthällt kommt die Ausgabe, das man es eingegeben hat.
Das klappt! Insoweit, das die Ausgabe kommt wenn man Zahlen eingegeben hat.

Gut aber was ist wenn da jmd. ''nein'' hinschreibt? Das wollte ich auch abdecken. Es müsste ja eigentlich dann die ''else'' Klausel abgearbeitet werden oder sehe ich da was falsch? Da ''alter'' ja nicht aus Zahlen besteht kommt ja ein ''False'' heraus.

Aber es klappt nicht. Wenn ich nichts eingebe, kommt die Abfrage nach dem alter einwandfrei, aber wenn ich z.B. ''Nein'' eingebe sagt er das ich das Alter eingegeben habe.
Was habe ich falsch gemacht bzw. woran liegt das?

MfG ChrissiG
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

alter.isalnum() prüft auf alphanumerische Zeichen, also auch Buchstaben. alter.isdigit() prüft auf zahlen, dass müsste das gewünschte Ergebniss liefern.

Code: Alles auswählen

# Auf Alter hinweisen
if alter.isdigit() == True:
    print 'Sie haben das Alter angegeben, die Auswertung wird gleich folgen'
else:
    raw_input('Bitte geben Sie Ihr Alter an. Es wird benoetigt!: ')
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

hätte man auch selber drauf kommen können ;)

Danke!

So funktioniert nun alles einwandfrei.

So und nun gehts zur nächsten Aufgabe.

Ich möchte dem Benutzer am Ende ausgeben, was er machen muss. Zunehmen oder Abnehmen oder eben eine Erfolgsmeldung.

Sobald ich damit Fertig bin, stelle ich das mal wieder hier hinein, unter eure Meinung ;)

Bis Hierher... schonmal Danke!


mfG ChrissiG
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Hilfe!
CrackPod hat geschrieben:

Code: Alles auswählen

if type(alter) == 'int':
ist falsch, da "type" ein Typobjekt zurückliefert und keinen String. Es muss also heißen

Code: Alles auswählen

if type(alter) is int:
CrackPod hat geschrieben:

Code: Alles auswählen

try:
  int(alter)
except ValueError:
  #Frage wegen des Alters
else:
  alter=int(alter)
Das ist umständlich. Man kann "alter = int(alter)" gleich in den try-Block schreiben.
DatenMetzgerX hat geschrieben:

Code: Alles auswählen

if alter.isalnum() == True:
    #mach irgend was
else:
    #nach Alter fragen
Man prüft die Rückgaben von Methoden, die einen Bool zurückgeben, nicht nochmal explizit auf True.
ChrissiG hat geschrieben:

Code: Alles auswählen

try:
    int(alter)
except ValueError:
    alter = raw_input('Bitte geben Sie Ihr Alter ein, es ist wichtig! Eingabe: ')
else:
    alter = int(alter) 
Das ist auch nicht gut, weil danach "alter" entweder ein Int oder ein String ist.

Außerdem musst du die Frage nach dem Alter in eine Schleife einbauen. Wer sagt dir, dass der Benutzer beim zweiten Mal ein gültiges Alter eingibt?
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Außerdem musst du die Frage nach dem Alter in eine Schleife einbauen. Wer sagt dir, dass der Benutzer beim zweiten Mal ein gültiges Alter eingibt?
Stimmt schon. Aber das löse ich so das das Programm dem benutzer einfach eine Tabelle heraussucht und er sich das selber zusammensuchen muss ;)

Der der brav sein Alter eingibt bekommt gesagt ob er Abnehmen muss, zunehmen muss oder eben ein Erfolgsergebnis. (<--das ist gerade in Arbeit)

Weil ich bin der Meinung. Wer sein Alter beim 2. Mal nicht eingibt wird es nie eingeben. Zumindest würde ich das so machen.

Ich habe das ganze ja nun wie folgt gelößt:

Code: Alles auswählen

if alter.isdigit() == True:
    print 'Sie haben das Alter angegeben, die Auswertung wird gleich folgen'
else:
    alter = raw_input('Bitte geben Sie Ihr Alter an. Es wird benoetigt!: ')
    if alter.isdigit() == True:
        print 'Sie haben Ihr Alter angegeben, Danke. Die Auswertung folgt.'
    else:
        print 'Sie muessen Ihren BMI-Wert selbst vergleichen!'
Klappt auch einwandfrei.

Gäbe es an dieser Lösung auch etwas anders zu machen? Wenn ja was?

MfG ChrissiG
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Was passiert wenn ich -856 eingebe? :)

mfg tlb
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

ChrissiG hat geschrieben: Gäbe es an dieser Lösung auch etwas anders zu machen? Wenn ja was?
Das "== True" raus, und dann passt es. Vergiss aber nicht hinterher einen Integer draus zu machen.

@thelittlebug: "-".isdigit() ist False.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Was passiert wenn ich -856 eingebe?
LoL... ;) ich ahbe erst gerätselt ;) Aber birkenfeld hats gut gesagt ;9 Das Lässt er net durch... da di da dup ;)

Und stimmt ;) Das ''== True'' ist ja im Prinziep doppelt gemoppelt ;)

Aber am Anfang bei der Entwicklung ansich besser zu lesen... Ist das schlechter Programmierstil oder ist das einfach nur unschön? In welche Kategorie gehört das? :D

MfG ChrissiG


##EDIT##

Ich habe mein Script nun wieder etwas erweitert. Und zwar wird nun dem Alter entsprechen ein BMI-Wert angegeben, welcher nicht über/unterschritten werden sollte.

Das ganze habe ich wiefolgt gelößt und wollte mal eure Meinung dazu hören:

Die Prüfung ob das Alter angegeben ist oder nicht sieht wiefolgt aus:

Code: Alles auswählen

# Auf Alter hinweisen
if alter.isdigit():
    print 'Sie haben das Alter angegeben, die Auswertung wird gleich folgen'
    alter = int(alter) #alter zum Rechnen umwandeln
else:
    alter = raw_input('Bitte geben Sie Ihr Alter an. Es wird benötigt!: ')
    if alter.isdigit() == True:
        print 'Sie haben Ihr Alter angegeben, Danke. Die Auswertung folgt.'
        alter = int(alter) #alter zum Rechnen umwandeln
    else:
        alter = 'nein'
        print 'Sie muessen Ihren BMI-Wert selbst vergleichen!'
Ich bin mir nicht sicher ob es hierdran schon liegt aber später taucht ein Fehler auf. Darüber später dann mehr.

Die Ausgabe habe ich wiefolgt gestaltet:

Code: Alles auswählen

# Auswertung 
print
print 'Sie haben einen BMI von %.2f' % bmi
print 'gerundet müssten Sie einen BMI-Wert von %.f haben' % bmi
print
if alter < 24:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 19 und 24 liegen.'
elif alter < 34 and alter > 24:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 20 und 25 liegen.'
elif alter < 44 and alter > 34:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 21 und 26 liegen.'
elif alter < 54 and alter > 44:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 22 und 27 liegen.'
elif alter < 64 and alter > 54:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 23 und 28 liegen.'
elif alter > 64:
    print 'Wenn Sie älter als 64 Jahre sind sollte Ihr BMI-Wert eine Groesse von 29 nicht ueberschreiten!'
else:
    print 'Sie haben Ihr Alter nicht angegeben. Daher müssen Sie selbst Ihren Wert mit der folgenden Tabelle vergleichen.'

if alter == 'nein':
    print
    print 'Zum Vergleich. So sind die BMI Normalwerte dem Alter nach geordnet:'
    print '19-24 Jahre    19-24'  # 1
    print '25-34 Jahre    20-25'  # 2 
    print '35-44 Jahre    21-26'  # 3
Usw... (möchte nicht so viel Posten!)

Dannach kommt halt nur noch Ausgabe und eine ''Return'' Abfrage zum Beenden.

So und nun zu meinem Fehler. Wenn ich das Alter nicht angebe bzw. ein ''nein'' reinschreibe kommt nicht der Spruch, dass ich mein Alter nicht angegeben habe, sondern das ich älter als 64 Jahre bin. Hier ein Beispiel:
Geben Sie Ihr Körpergewicht in Kg an: 90
Geben Sie Ihre Körpergröße in Meter an: 1,89
Geben Sie bitte Ihr Alter an: nein
Bitte geben Sie Ihr Alter an. Es wird benötigt!: nein
Sie muessen Ihren BMI-Wert selbst vergleichen!

Sie haben einen BMI von 25.20
gerundet müssten Sie einen BMI-Wert von 25 haben

Wenn Sie älter als 64 Jahre sind sollte Ihr BMI-Wert eine Groesse von 29 nicht ueberschreiten!

Zum Vergleich. So sind die BMI Normalwerte dem Alter nach geordnet:
19-24 Jahre 19-24
Beim ersten Mal weißt er richtig darauf hin, das die Person selber vergleichen muss. Beim 2. Mal fehlt dieser Spruch, obwohl eingebaut (siehe oben bei Ausgabe)

Das ist im Moment das einzige Problem vor dem ich noch stehe.

Woran liegt das? Und wie kann ich das beheben? Könnt Ihr mir das bitte sagen? ;)

Und weitere Verbesserungsforschläge sind natürlich immer willkommen :D


MfG ChrissiG
BlackJack

ChrissiG hat geschrieben:Und stimmt ;) Das ''== True'' ist ja im Prinziep doppelt gemoppelt ;)

Aber am Anfang bei der Entwicklung ansich besser zu lesen... Ist das schlechter Programmierstil oder ist das einfach nur unschön?


In Python würde ich sagen schlechter Stil weil nicht nur `True` und `False` als Wahrheitswerte dienen können, sondern jedes Objekt. Und ein Objekt das als Wahrheitswert "falsch" ist ergibt beim Vergleich mit `False` wieder `False` und nicht `True`.
Das ganze habe ich wiefolgt gelößt und wollte mal eure Meinung dazu hören:

Die Prüfung ob das Alter angegeben ist oder nicht sieht wiefolgt aus:

Code: Alles auswählen

# Auf Alter hinweisen
if alter.isdigit():
    print 'Sie haben das Alter angegeben, die Auswertung wird gleich folgen'
    alter = int(alter) #alter zum Rechnen umwandeln
else:
    alter = raw_input('Bitte geben Sie Ihr Alter an. Es wird benötigt!: ')
    if alter.isdigit() == True:
        print 'Sie haben Ihr Alter angegeben, Danke. Die Auswertung folgt.'
        alter = int(alter) #alter zum Rechnen umwandeln
    else:
        alter = 'nein'
        print 'Sie muessen Ihren BMI-Wert selbst vergleichen!'
Ich bin mir nicht sicher ob es hierdran schon liegt aber später taucht ein Fehler auf. Darüber später dann mehr.
Ich würde das vereinfachen und nur einmal Fragen. Und nicht mit `isdigit()` sondern ruhig mit der Ausnahme arbeiten.

Und auch wenn es in Python möglich ist, sollte man einem Namen in einem Kontext immer nur Objekte eines Typs zuweisen, oder zumindest solche die sich entsprechend Verhalten. Also das `alter` mal Zahl und mal Zeichenkette ist, ist etwas ungünstig. Eine Ausnahme von dieser Empfehlung ist `None`, was als Platzhalter für "undefiniert" genommen werden kann.

Code: Alles auswählen

try:
    alter = float(raw_input('Bitte geben Sie ihr Alter in Jahren an: '))
except ValueError:
    print 'Sie haben kein Alter angegeben.  Bitte benutzen sie die Tabelle...'
    alter = None
Die Ausgabe habe ich wiefolgt gestaltet:

Code: Alles auswählen

# Auswertung 
print
print 'Sie haben einen BMI von %.2f' % bmi
print 'gerundet müssten Sie einen BMI-Wert von %.f haben' % bmi
print
if alter < 24:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 19 und 24 liegen.'
elif alter < 34 and alter > 24:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 20 und 25 liegen.'
elif alter < 44 and alter > 34:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 21 und 26 liegen.'
elif alter < 54 and alter > 44:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 22 und 27 liegen.'
elif alter < 64 and alter > 54:
    print 'Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen 23 und 28 liegen.'
elif alter > 64:
    print 'Wenn Sie älter als 64 Jahre sind sollte Ihr BMI-Wert eine Groesse von 29 nicht ueberschreiten!'
else:
    print 'Sie haben Ihr Alter nicht angegeben. Daher müssen Sie selbst Ihren Wert mit der folgenden Tabelle vergleichen.'

if alter == 'nein':
    print
    print 'Zum Vergleich. So sind die BMI Normalwerte dem Alter nach geordnet:'
    print '19-24 Jahre    19-24'  # 1
    print '25-34 Jahre    20-25'  # 2 
    print '35-44 Jahre    21-26'  # 3
So und nun zu meinem Fehler. Wenn ich das Alter nicht angebe bzw. ein ''nein'' reinschreibe kommt nicht der Spruch, dass ich mein Alter nicht angegeben habe, sondern das ich älter als 64 Jahre bin.
Das ist ein Problem wenn man Objekte unterschiedlichen Typs miteinander vergleicht. So ein Vergleich, auch auf kleiner und grösser funktioniert in Python immer, nur ist das Ergebnis willkürlich aber konstant (zumindest in einer Interpretierersitzung). Mehr Garantien werden nicht gemacht.

Wenn man also eine beliebige Zahl mit einer beliebigen Zeichenkette vergleicht, dann ist die Zahl immer kleiner als die Zeichenkette. Oder umgekehrt. Und genau solche Vergleiche machst Du, wenn `alter` an 'nein' gebunden ist:

Code: Alles auswählen

In [150]: 'viking' > 42
Out[150]: True
Am besten prüft man am Anfang ob das Alter überhaupt angegeben wurde und geht dann entsprechend bei `if` oder `else` weiter.

Ein weiterer Verbesserungsvorschlag: Nicht so viel Quelltext wiederholen. Lieber die sich nicht wiederholenden Teile in eine entsprechende Datenstruktur herausziehen. Zum Beispiel könntest Du Dir eine Tabelle (Liste von Listen) von zwei Alterswerten (Unter-, Obergrenze) und dem minimalen BMI generieren und die dann für die Ausgaben heranziehen. Ungefähr so:

Code: Alles auswählen

def create_bmi_table():
    result = list()
    for i in xrange(6):
        result.append([14 + i * 10, 24 + i * 10, 19 + i])
    result[0][0] = 0
    result[-1][1] = sys.maxint
    return result

bmi_table = create_bmi_table()

for untergrenze, obergrenze, bmi_untergrenze in bmi_table:
    if untergrenze < alter < obergrenze:
        print ('Ihr BMI-Wert sollte Ihrem Alter entsprechend zwischen'
               ' %d und %d liegen.' % (bmi_untergrenze, bmi_untergrenze + 5))
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Sehr gute Hinweise von dir. Ich Danke dir.

Leider kann ich nicht ganz alles einbauen.

Dazu gehört unter anderem diese Tabelle die du als letztes Angesprochen hast.
Den rest habe ich bereits eingebaut.

Aber in 12 Tagen melde ich mich nochmal ;) Mit dem "vollständigen Programm" Und werde wiedermal eure Meinung abfragen :D

Und ich finde das muss mal gesagt werden. Wie viel Arbeit Ihr euch macht hier um leuten wir z.B. mir zu helfen... das verdient Lob! Großes Lob! Habt Dank!

Also dann bis in 12 Tagen ;)

cYa und by by!

MfG ChrissiG
Antworten