Python Anfänger frage

Narben

Cadet 3rd Year
Registriert
Juli 2023
Beiträge
37
Hallo ich habe eine Frage. Ich wollte durch ein paar Code Zeilen von Python, versuchen den BMI wert eines Mannes heraus zu finden ob dieser Untergewichtig ist, ein Normal gewicht hat und so weiter.
Aber ich habe ein kleines Problem was ich durch eigenen denken nicht lösen kann. Ich hatte es versucht mit "if" "elif" und "else"
da aber bei "elif" der erst funktionierender wert genutzt wird weiß ich nicht was ich machen soll

Weil eine Person mit einen BIM wert von 30 ist halt mal Übergewichtig und nicht "Normal" vom gewicht wie das mein Code versucht mir zu sagen ...

1692809849817.png
 
Du könntest z.b. ganz simpel mit and arbeiten.
Also
Code:
elif bmi > xx and bmi < xy:
 
  • Gefällt mir
Reaktionen: aragorn92, madmax2010, tomgit und eine weitere Person
Die erste elif-Bedingung ist bereits wahr, wenn der BMI 30 beträgt.
Kleiner Tipp: was wäre, wenn du nicht „>18,5“ sondern „>18,5 and <= 24,9“ verwendest?
 
  • Gefällt mir
Reaktionen: aragorn92 und tomgit
Du brauchst mehr beschraenkungen an deinen elifs.

Denn wenn du einen BMI von 30 hast, dann ist er > 18.5, d.h. er wird immer an dieser Stelle schon aufhoeren und den Print ausgeben.

Du musst hier also stattdessen sagen:
Python:
if bmi > 18.5 and <= 24.8

Und so weiter.
 
Überlege mal in welcher Reihenfolge Deine Bedingungen abgearbeitet werden.
Nebenbei schließt du in den ersten beiden Zeilen 18.5 aus.
 
  • Gefällt mir
Reaktionen: zuginho
und nutze bitte die schaltfläche fuer code im forum..
Niemand liest code auf screenshots freiwillig

sieht dann so aus:

Python:
 import numpy as np

# sigmoid function
def nonlin(x,deriv=False):
    if(deriv==True):
        return x*(1-x)
    return 1/(1+np.exp(-x))
  
# input dataset
X = np.array([  [0,0,1],
                [0,1,1],
                [1,0,1],
                [1,1,1] ])
  
# output dataset         
y = np.array([[0,0,1,1]]).T

# seed random numbers to make calculation
# deterministic (just a good practice)
np.random.seed(1)

# initialize weights randomly with mean 0
syn0 = 2*np.random.random((3,1)) - 1

for iter in xrange(10000):

    # forward propagation
    l0 = X
    l1 = nonlin(np.dot(l0,syn0))

    # how much did we miss?
    l1_error = y - l1

    # multiply how much we missed by the
    # slope of the sigmoid at the values in l1
    l1_delta = l1_error * nonlin(l1,True)

    # update weights
    syn0 += np.dot(l0.T,l1_delta)

print "Output After Training:"
print l1
 
cfreak84 schrieb:
Die erste elif-Bedingung ist bereits wahr, wenn der BMI 30 beträgt.
Kleiner Tipp: was wäre, wenn du nicht „>18,5“ sondern „>18,5 and <= 24,9“ verwendest?
Das wusste ich nicht ich versuche es mal
 
wie bereits gesagt, schlägt die erste positive bedingung zu. jetzt kann man das ganze natürlich mit > und < jeweils eingrenzen oder du drehst die reihenfolge der checks einfach um:

Python:
bmi = 25.5
if   bmi > 35:
    print("ganz dick")
elif bmi > 30:
    print("zu dick")
elif bmi > 20:
    print("normal")
else:
    print("zu dünn")

# -> normal
 
  • Gefällt mir
Reaktionen: cfreak84
Wer ist Bircan und warum ist er in der Mehrzahl?
Geht es hier etwa um Hausaufgaben :-)
 
Weil?
 
Natürlich ist das ein Logikfehler. Es ist kein Tippfehler oder Syntaxfehler oder anderes, einfach Logik.
If ... Then ... Else ...
Wenn ... Dann ... Sonst ...
Und Elif ... ist kurz für Else If ...

Man kann die Anfragen auf unterschiedliche Weisen machen. Meiner Meinung nach ist die simpelste Variante hier, sich auf die Verwendung eines Gleichheitszeichens und nur ein einem der beiden Zeichen < oder > zu beschränken.

Insofern bin ich von den ersten drei Antworten hier etwas verwundert.
 
TorenAltair schrieb:
simpsonsfan schrieb:
Natürlich ist das ein Logikfehler. Es ist kein Tippfehler oder Syntaxfehler oder anderes, einfach Logik.
If ... Then ... Else ...
Wenn ... Dann ... Sonst ...
Und Elif ... ist kurz für Else If ...

Man kann die Anfragen auf unterschiedliche Weisen machen. Meiner Meinung nach ist die simpelste Variante hier, sich auf die Verwendung eines Gleichheitszeichens und nur ein einem der beiden Zeichen < oder > zu beschränken.

Insofern bin ich von den ersten drei Antworten hier etwas verwundert.
Wenn ein Logikfehler enthalten wäre, würde der Compiler spätestens bei der semantischen Überprüfung dir einen Fehler ausgeben. Bedeutet der Code ist logisch aufgebaut. Ob es jetzt Sinn ergibt nach dem ersten elif noch weitere einzubauen hat nichts mit Logik zu tun.
 
  • Gefällt mir
Reaktionen: TorenAltair
Python hat keinen Compiler.

Und natuerlich hat er einen Logikfehler. Der Code ist zwar ausführbar, aber die Logik ist nicht die, die er haben will.
 
  • Gefällt mir
Reaktionen: TorenAltair
NJay schrieb:
Python hat keinen Compiler.

Und natuerlich hat er einen Logikfehler. Der Code ist zwar ausführbar, aber die Logik ist nicht die, die er haben will.

Natürlich hat Python einen Compiler.
https://www.quora.com/Does-python-use-a-compiler
https://stackoverflow.com/questions/6889747/is-python-interpreted-or-compiled-or-both

Spielt aber auch keine Rolle, selbst wenn es nur interpretiert werden würde, wird der Code auch überprüft. Bedeutet, der Code ist immer noch logisch aufgebaut. Vielleicht sollten hier einige mal den Begriff Logik googlen.

Wenn ich 50 mal hintereinander eine Zahl durch 1 teile und bei der zweiten Operation von 50 ein anderes Ergebnis erwarte, ist der Code logisch aufgebaut aber deine Annahme etwas anderes zu erwarten ist unsinnig.

Nur weil der User den Code nicht nachvollziehen kann und er etwas anderes erwartet, ist der Code nicht unlogisch.
 
  • Gefällt mir
Reaktionen: Der Lord und ni-sc
Ich würd immer nur mit kleiner arbeiten und mich von unten nach oben durch die Grenzwerte fragen.

Oder umgekehrt, aber nicht mal so mal so, das kann nur in die Hose gehen.
 
TorenAltair schrieb:
Ohne Erklärung deines bunten Bildchen, ist das nur eine Bestätigung meiner Aussage oder was verstehst du unter Logical Errors!? Ist der Code des TE ausführbar? Ja, damit ist der Code logisch aufgebaut.

Ist 5+5 = 10 , ja weil bisher noch nicht das Gegenteil bewiesen wurde. Der TE erwartet aber für 5 + 5 = 12.
 
  • Gefällt mir
Reaktionen: cfreak84
Für mich ist das auch ein Logikfehler. Wenn es baut ist es syntaktische korrekt und klar es wird exakt der Code ausgeführt der da steht. Wenn man aber aus Versehen was anderes programmiert hat als man wollte ist es ein Logikfehler. Deine Definition, dass es kein Logikfehler ist, wenn es baut hab ich noch nie gehört.
 
  • Gefällt mir
Reaktionen: Der Lord, simpsonsfan und ni-sc
Zurück
Oben