Zaokrąglenie do dwóch liczb

0

Witam ponownie. Na swój sposób stworzyłem sobie kalkulator BMI we funkcjach. I tu mam jedno pytanie, w jaki najłatwiejszy sposób (bez zbędnego rozszerzania kodu) można w koncowym obliczeniu wskaznika BMI zaokręglić do dwóch liczb, tzn: przykładowo 33.2 , zamiast jak mi pokazuje 33.25874652 ? Ostatnie pytanie, czy macie jakię uwagi do mojego kodu, tak z ciekawości pytam...

def dane_wyjsciowe(dane):
    while True:
        try:
            wyjscie = float(input(f'Podaj {dane}'))
            return wyjscie
        except ValueError:
            print('Wprowadziles zla wartość danych. Wprowadz poprawną wartość')

def wskazniki_obliczen():
    bmi = masa_ciala / wzrost**2
    print(f'Twoj wskaznik bmi wynosi: {bmi}')
    if bmi > 16.0 and bmi <=17.0:
        print('Jesteś wychudzony')
    elif bmi >17.0 and bmi <= 18.5 :
        print('Masz niedowagę')
    elif bmi > 18.5 and bmi <= 25.0:
        print('Wartosc prawidlowa')
    elif bmi >25 and bmi <= 30.0:
        print('Nadwaga')
    elif bmi > 30.0 and bmi <= 35.0:
        print('I stopień otyłości')
    elif bmi > 30.0 and bmi <= 40.0:
        print('II stopien otylosci')
    elif bmi > 40:
        print('III stopien otyłości')
    else:
        print('wyglodzenie')

while True:
    masa_ciala = dane_wyjsciowe('masę ciala w kg:')
    wzrost = dane_wyjsciowe('wzrost(w metrach):')
    dane = wskazniki_obliczen()
    


Może czegoś za mało, czy za dużo jest, a może krótszy kod ....? Pozdrawiam ekipę :)

1
pythonowiec74 napisał(a):

Ostatnie pytanie, czy macie jakię uwagi do mojego kodu, tak z ciekawości pytam...

def wskazniki_obliczen():
    bmi = masa_ciala / wzrost**2

Funkcja, która jedzie po zmiennych globalnych.
To tak, jakby jej nie było (z punktu widzenia modularyzacji, izolacji i kilku innych)

Ja bym z niej zwracał string, bo przecież funkcja może być użyta w róznym kontekście, np w serwerze webowym, apce GUI itd, gdzie print() nie ma sensu.
A drukował bym w miejscu wywołąnia

0

@J.Muzykant
Funkcja, która jedzie po zmiennych globalnych.
To tak, jakby jej nie było (z punktu widzenia modularyzacji, izolacji i kilku innych)
Ja bym z niej zwracał string, bo przecież funkcja może być użyta w róznym kontekście, np w serwerze webowym, apce GUI itd, gdzie print() nie ma sensu.
A drukował bym w miejscu wywołąnia

@J.Muzykant Kombinowałem i wykombinowałem poprawkę. Mam nadzieję ,ze nie przekombinowałem z kodem. Poprawiłem twoje "uwagi" co dałeś wyżej. Daj znać , czy co chodziło o takie "poprawki"
mniej więcej jak wyzej. I czy ten kod wygląda dobrze pod względem przejrzystości kodu , jak i działania...


def dane_wyjsciowe(dane):
    while True:
        try:
            wyjscie = float(input(f'Podaj {dane}'))
            return wyjscie
        except ValueError:
            print('Wpisałeś niewłaściwy format znaków.Wpisz cyfry')
           
def wskazniki_obliczen(masa_ciala,wzrost):
    try:
        bmi = masa_ciala / wzrost**2
        print (f'Twoj wskaznik bmi wynosi: {round(bmi,1)}')
        if bmi > 16.0 and bmi <=17.0:
            print ('Jesteś wychudzony')
        elif bmi >17.0 and bmi <= 18.5 :
            print('Masz niedowagę')
        elif bmi > 18.5 and bmi <= 25.0:
            print('Wartosc prawidlowa')
        elif bmi >25 and bmi <= 30.0:
            print('Nadwaga')
        elif bmi > 30.0 and bmi <= 35.0:
            print('I stopień otyłości')
        elif bmi > 30.0 and bmi <= 40.0:
            print('II stopien otylosci')
        elif bmi > 40:
            print('III stopien otyłości')
        else:
            print ('wyglodzenie')
    except ZeroDivisionError:
        print('Nie dzielimy przez 0')
    

while True:
    masa_ciala = dane_wyjsciowe('masę ciala w kg: ')
    wzrost = dane_wyjsciowe('wzrost(w metrach): ')
    dane = wskazniki_obliczen(masa_ciala,wzrost)

Wszelkie uwagi, spostrzeżenia przyjmuję bez żadnego ale :) Jestem ciekawy waszych opinii :), wiem ze bez funkcji kod byłby "mniejszy" :)

0

@pythonowiec74:

prawdziwa nazwa funkcji by była drukuj_wskazniki_obliczen() (skądinąd wysoce dziwnie ją nazwałeś pod względem językowym)
Czujesz już pewną ułomność?
Co zrobisz, jak nie chcesz drukować, ale przetwarzać to dalej?

Sądzę, ze większość programistów by napisała
print_bmi_result(mass,height),

**a bardziej **w wersji niedrukujacej

def bmi_result(mass,height):

i drukowali by

 print(bmi_result(mass,height))

Dziwne te if'y, nie sądzisz?

        elif bmi > 30.0 and bmi <= 35.0:
            print('I stopień otyłości')
        elif bmi > 30.0 and bmi <= 40.0:
            print('II stopien otylosci')

0

Dzięki za wskazówki . Biorę się za następne zadania. Mam ich ponad 7 jeszcze ,taki łatwo/średni poziom. Z czasem przejdę do obiektówki i na słownictwo angielskie w kodzie. Są gotowce niby w sieci niektórych zadan, ale postanowiłem bez podpatrywania sam pisać po swojemu swój kod. Błędy wyłapuję przynajmniej :) A jak to skonczę, to zaczynam naukę automatyzacji, analizy danych,webscraping, Z tego wybieram swoją "działkę" , na przyszły czas, na czym się będę skupiał 100%. Waham się między automatyzacją a analizą danych. Nie wiem jak to czasowo ogarnę, ale daję sobie na dobre przyswojenie i praktykę tego wszystkiego do 2 lat nauki. Przy moim trybie pracy i wolnego. Jeśl coś możecie mi doradzić od "siebie" jeśli chodzi o te dwie "działki" , które wymienilem jaką wybrać .... Tak się pytam z ciekawości. Bo i tak mój wybór będzie. Plan swój mam i tego się bedę trzymał cholernie mocno. O ile coś mi nie "popieprzy" tych planów. Życie jest nieprzewidywalne. Pozdrawiam

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