Kalkulator BMI - funkcja. pętla

0

Cześć mam tutaj kawałek tego kodu

def getbmi(m, h):
    return m / (h ** 2)

print("Podaj masę ciała w kg: ")
m = float(input())
print("Podaj wzrost w m: ")
w = float(input())
bmi = getbmi(m, w)
if bmi < 18.5:
    print("niedowaga")
elif 18.5 <= bmi <= 24.9:
    print("norma")
elif 25 <= bmi < 30:
    print("nadwaga")
else:
    print("otyłość")

Powie mi ktoś jak to zapętlić bez nadawania wartość chodzi mi właśnie o pętla while by była możliwość powrotu lub koniec programu ?

2

najbardziej sensowne zwyczajnie zapętlić a przy podaniu ujemnej masy skończyć pętle.

0
_13th_Dragon napisał(a):

najbardziej sensowne zwyczajnie zapętlić a przy podaniu ujemnej masy skończyć pętle.

Czyli jeśli zrobię to tak while bmi <=0 potem { wklejam ten kod } else bmi >0 breake ?

0

Nie bmi, zaś m i w

0
_13th_Dragon napisał(a):

Nie bmi, zaś m i w

Chyba coś popsułem nie ogarniam w ogóle while jak by i wyszło mi coś takiego
screenshot-20220701003721.png

_13th_Dragon napisał(a):

Nie bmi, zaś m i w

_13th_Dragon napisał(a):

Nie bmi, zaś m i w

0

Prosiłbym gdzie powinienem to ustawić by program się powtórzył? screenshot-20220701010126.png

1

while True:
Wybierz opcje

  1. oblicz bmi
  2. wyjscie
    if odpowiedz == 1:
    obliczenia bmi
    elsif odpowiedz == 2:
    break

while True - wchodzi ci w nieskonczona petle.
break -> przerywa petle i jesli nic NIE MA poza petla, konczy program.

PS. Nie pisz po privach, tylko od razu na forum. Szybciej otrzymasz odpowiedz.

47
def getbmi(m, h):
    return m / (h ** 2)

def main():
    print("Podaj masę ciała w kg: ")
    m = float(input())
    print("Podaj wzrost w m: ")
    w = float(input())
    bmi = getbmi(m, w)
    if bmi < 18.5:
        print("niedowaga")
    elif 18.5 <= bmi <= 24.9:
        print("norma")
    elif 25 <= bmi < 30:
        print("nadwaga")
    else:
        print("otyłość")

if __name__ == "__main__":
    while True:
        if choice := input("0 - wyjdz, 1-licz bmi: ") == "0":
            break
        main()

0
ledi12 napisał(a):
def getbmi(m, h):
    return m / (h ** 2)

def main():
    print("Podaj masę ciała w kg: ")
    m = float(input())
    print("Podaj wzrost w m: ")
    w = float(input())
    bmi = getbmi(m, w)
    if bmi < 18.5:
        print("niedowaga")
    elif 18.5 <= bmi <= 24.9:
        print("norma")
    elif 25 <= bmi < 30:
        print("nadwaga")
    else:
        print("otyłość")

if __name__ == "__main__":
    while True:
        if choice := input("0 - wyjdz, 1-licz bmi: ") == "0":
            break
        main()

Dziękuje ślicznie zgadza się :) Mam jeszcze pytanie formatowanie obszaru wydruków z koniecznością użycia elementów formatujących typu %f, %s, %d co to znaczy w sensie o co z tym chodzi ? Czytanie definicji średnio mi pomaga z dokumentacji technicznej chciałbym się dowiedzieć na chłopski rozum o co z tym chodzi ?

2

Dawno, dawno temu formatowanie w Pythonie wymagało (1) %-formatting lub (2) str.format(). Python 3.6 wprowadził dużą zmianę w postaci f-strings i nie ma sensu stosowanie (1) i (2). Powinieneś korzystać z materiałów do nauki, które nie mają dziesięciu lat ;-). Linia 4 = %-formatting, linia 6 = str.format(), linia 8 = f-strings.

>>> pacjent = "Jan z podkrakowskiej gminy Czernichów"
>>> wiek = 95
>>> bmi = 44
>>> "Karta Pacjenta: %s. Wiek: %s. BMI: %s." % (pacjent, wiek, bmi)
>>> 'Karta Pacjenta: Jan z podkrakowskiej gminy Czernichów. Wiek: 95. BMI: 44.'
>>> "Karta Pacjenta: {}. Wiek: {}. BMI: {}.".format(pacjent, wiek, bmi)
>>> 'Karta Pacjenta: Jan z podkrakowskiej gminy Czernichów. Wiek: 95. BMI: 44.'
>>> f"Karta Pacjenta: {pacjent}. Wiek: {wiek}. BMI: {bmi}."
>>> 'Karta Pacjenta: Jan z podkrakowskiej gminy Czernichów. Wiek: 95. BMI: 44.'
0
Templar Crusader napisał(a):

Dawno, dawno temu formatowanie w Pythonie wymagało (1) %-formatting lub (2) str.format(). Python 3.6 wprowadził dużą zmianę w postaci f-strings i nie ma sensu stosowanie (1) i (2). Powinieneś korzystać z materiałów do nauki, które nie mają dziesięciu lat ;-). Linia 4 = %-formatting, linia 6 = str.format(), linia 8 = f-strings.

>>> pacjent = "Jan z podkrakowskiej gminy Czernichów"
>>> wiek = 95
>>> bmi = 44
>>> "Karta Pacjenta: %s. Wiek: %s. BMI: %s." % (pacjent, wiek, bmi)
>>> 'Karta Pacjenta: Jan z podkrakowskiej gminy Czernichów. Wiek: 95. BMI: 44.'
>>> "Karta Pacjenta: {}. Wiek: {}. BMI: {}.".format(pacjent, wiek, bmi)
>>> 'Karta Pacjenta: Jan z podkrakowskiej gminy Czernichów. Wiek: 95. BMI: 44.'
>>> f"Karta Pacjenta: {pacjent}. Wiek: {wiek}. BMI: {bmi}."
>>> 'Karta Pacjenta: Jan z podkrakowskiej gminy Czernichów. Wiek: 95. BMI: 44.'

Co popsułem tym razem ?
backtick
backtick
backtick

backtick
backtick
backtick

def getbmi(m, h):
return m / (h ** 2)

def main():
print("Podaj masę ciała w kg: ")
m = float(input())
print("Twoja masa ciała wynosi %f."% m)
print("Podaj wzrost w m: ")
w = float(input())
bmi = getbmi(m, w)
if bmi < 18.5:
print("niedowaga")
elif 18.5 <= bmi <= 24.9:
print("norma")
elif 25 <= bmi < 30:
print("nadwaga")
else:
print("otyłość")

if name == "main":
while True:
if choice := input("0 - wyjdz, 1-licz bmi: ") == "0":
break
main()
backtick
backtick
backtick

Jak zastosować tak by ten % działał?
backtick
backtick
backtick

0

Jedna max dwie liczby po przecinku .

1

Zauważ, że Python zaokrągla wartości automatycznie w górę lub w dół.

In [59]: m = 56.78
In [60]: print(f"Twoja masa ciała wynosi {m:.1f} kg.")
Twoja masa ciała wynosi 56.8 kg.
In [61]: m = 56.54
In [62]: print(f"Twoja masa ciała wynosi {m:.1f} kg.")
Twoja masa ciała wynosi 56.5 kg.
In [63]: print(f"Twoja masa ciała wynosi {m:.2f} kg.")
Twoja masa ciała wynosi 56.54 kg.
In [64]:
0
Templar Crusader napisał(a):

Zauważ, że Python zaokrągla wartości automatycznie w górę lub w dół.

In [59]: m = 56.78
In [60]: print(f"Twoja masa ciała wynosi {m:.1f} kg.")
Twoja masa ciała wynosi 56.8 kg.
In [61]: m = 56.54
In [62]: print(f"Twoja masa ciała wynosi {m:.1f} kg.")
Twoja masa ciała wynosi 56.5 kg.
In [63]: print(f"Twoja masa ciała wynosi {m:.2f} kg.")
Twoja masa ciała wynosi 56.54 kg.
In [64]:

Czy jest sposób by ograniczyć te wartości by nie było one ujemne ?

1

Dla czytelności kodu, w treści postu wpisuj 3x "backtick" twój kod 3x "backtick", jak poniżej, a propos postu datowanego z godziny 17:09.

Screenshot 2022-07-03 at 18.10.23.png

1
def getbmi(masa, wzrost):
    """Kalkulator bmi"""
    return masa / wzrost ** 2


def main():
    """Program obliczający bmi"""
    while True:
        val = input("Podaj masę ciała w kg: ")
        try:
            masa = float(val)
            if masa <= 0:
                print("Spróbuj jeszcze raz.")
                continue
            break
        except ValueError:
            print("Program akceptuje tylko cyfry!")

    print(f"Twoja masa wynosi {masa:.1f} kg.")

    wzrost = float(input("Podaj wzrost w centymetrach: "))
    print(f"Twój wzrost wynosi {wzrost:.1f} cm.")

    bmi = getbmi(masa, wzrost)

    if bmi < 18.5:
        print("\nNiedowaga.\n")
    elif 18.5 <= bmi <= 24.9:
        print("\nNorma.\n")
    elif 25 <= bmi < 30:
        print("\nNadwaga.\n")
    else:
        print("\nOtyłość.\n")


"""Kod inicjujący skrypt."""
if __name__ == "__main__":
    while True:
        if (
            choice := input(
                "Wybierz 0, aby wyjść z programu\nWybierz 1, aby rozpocząć obliczanie.\nWybór: "
            )
            == "0"
        ):
            break
        main()
0

Dziękuje jeszcze raz przepraszam za tłumaczenie łopatologiczne . Ale niestety wolno umiem się uczyć i ogarniać .

0
igo xteam napisał(a):

Dziękuje jeszcze raz przepraszam za tłumaczenie łopatologiczne . Ale niestety wolno umiem się uczyć i ogarniać .

Templar Crusader napisał(a):
def getbmi(masa, wzrost):
    """Kalkulator bmi"""
    return masa / wzrost ** 2


def main():
    """Program obliczający bmi"""
    while True:
        val = input("Podaj masę ciała w kg: ")
        try:
            masa = float(val)
            if masa <= 0:
                print("Spróbuj jeszcze raz.")
                continue
            break
        except ValueError:
            print("Program akceptuje tylko cyfry!")

    print(f"Twoja masa wynosi {masa:.1f} kg.")

    wzrost = float(input("Podaj wzrost w centymetrach: "))
    print(f"Twój wzrost wynosi {wzrost:.1f} cm.")

    bmi = getbmi(masa, wzrost)

    if bmi < 18.5:
        print("\nNiedowaga.\n")
    elif 18.5 <= bmi <= 24.9:
        print("\nNorma.\n")
    elif 25 <= bmi < 30:
        print("\nNadwaga.\n")
    else:
        print("\nOtyłość.\n")


"""Kod inicjujący skrypt."""
if __name__ == "__main__":
    while True:
        if (
            choice := input(
                "Wybierz 0, aby wyjść z programu\nWybierz 1, aby rozpocząć obliczanie.\nWybór: "
            )
            == "0"
        ):
            break
        main()

Ogólnie problem jeden rozwiązałem nie wiedziałem czemu jest ciągle niedowaga ale rozumiem już sens że pytanie się zmienia a wzór jak by ten sam będzie nawet jeśli jest przedstawiony w innej formie czyli najpierw podaje np 1 i to jest metr a po . czyli 1.50 to cm w związku z powyższym problem rozwiązałem również modyfikując zdeka bmi moje pytanie brzmi jeszcze gdzie w tym kodzie mogę zastosować to formatowanie obszaru wydruków z koniecznością użycia elementów formatujących typu %f, %s, %d od razu mówię nie wymyśliłem tego ja sam niestety ale to potrzebuje kombinowałem z %m i %w ale niestety mi to nie wychodzi plis pomocy :)

0

Wyskakuje mi błąd że zdeklaracją zmiennych jak dałem dwa printy z f stringami .

1 użytkowników online, w tym zalogowanych: 0, gości: 1