• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

python - proszę o sprawdzenie poprawności kodu/czytelności...wszystko działa mimo tego jest jakiś błąd?

Object Storage Arubacloud
0 głosów
482 wizyt
pytanie zadane 1 marca 2021 w Python przez q Nowicjusz (150 p.)

witam, od kilku dni uczę się programowania w pythonie. napisałem program który pobiera od użytkowania informacje odnośnie wagi i ilości wypitych filiżanek kawy. Pierwotnie program stworzyłem w takiej wersji [1] ale stwierdziłem ,że nie jest to poprawne mimo tego ,że działa i zmieniłem pare rzeczy. Program [2] działa poprawnie i wyświetla to co chciałem ale są dodatkowe informacje(wyróżnione na końcu [2])  w konsoli których nie rozumiem. prosiłbym o pomoc głównie jeśli chodzi o czytelność kodu [1] jak i [2]  oraz czym jest błąd wyróżniony na końcu  [2]

kod [1] 

import math


waga = float(input("podaj swoją wagę [KG]: "))
ile_filizanek = float(input("ile filiżanek kawy dziś spożyłeś? [250ml]: "))


def ilosc_filizanek(ile_filizanek):
    pomiar = ile_filizanek * kofeina
    print()
    print("wypiłeś:", pomiar, "mg kofeiny")


def ile_wazysz(waga):
    pomiar2 = waga * 6
    print()
    print("przy twojej wadze maksymalna dzienna ilość kofeiny to:", pomiar2, "[mg]")


kofeina = 100
pomiar = ile_filizanek * kofeina
pomiar2 = waga * 6
pomiar3 = pomiar2-pomiar
pomiar4 = pomiar3 / 100


if ilosc_filizanek(ile_filizanek):
    print(ilosc_filizanek())


if ile_wazysz(waga):
    print(ile_wazysz())

if pomiar3 > 0:
    print()
    print("do spożycia pozostało:", pomiar3, "[mg] prawidłowej dziennej dawki kofeiny =", math.floor(pomiar4), "filiżanki kawy ")
else:
    print()
    print("przekroczyłeś dozwolony dzienny limit kofeiny o:", (-pomiar3), "[mg]", "za dużo o", round((-pomiar4)),"filiżanki")

kod [2] 

import math

# dane do wprowadzenia

waga = float(input("podaj swoją wagę [KG]: "))
ile_filizanek = float(input("ile filiżanek kawy dziś spożyłeś? [250ml]: "))

# pomiary

kofeina = 100
pomiar = ile_filizanek * kofeina
pomiar2 = waga * 6
pomiar3 = pomiar2-pomiar
pomiar4 = pomiar3 / 100


# klasy ilości filiżanek i wagi wprowadzającego

class ilosc_filizanek:
    kofeina = 100
    pomiar = ile_filizanek * kofeina
    print()
    print("wypiłeś:", pomiar, "mg kofeiny")



class ile_wazysz:
    pomiar2 = waga * 6
    print()
    print("przy twojej wadze maksymalna dzienna dawka kofeiny to:", pomiar2, "[mg]")

# wydruk klas ilości filiżanek i wagi

print(ilosc_filizanek)
print(ile_wazysz)

# warunek jeśli ilość spożīwanej kofeiny jest odpowiedni dla wagi... wyświetla ... jeśli nie wyświetla nadmiar

if pomiar3 > 0:
    print()
    print("do spożycia pozostało:", pomiar3, "[mg] prawidłowej dziennej dawki kofeiny =", math.floor(pomiar4), "filiżanki kawy ")
else:
    print()
    print("przekroczyłeś dozwolony dzienny limit kofeiny o:", (-pomiar3), "[mg]", "za dużo o", round((-pomiar4)),"filiżanki")


# czym jest ten błąd ?????

 <class '__main__.ilosc_filizanek'>
# <class '__main__.ile_wazysz'> 

????????

1 odpowiedź

+3 głosów
odpowiedź 1 marca 2021 przez adrian17 Ekspert (344,860 p.)
wybrane 1 marca 2021 przez q
 
Najlepsza

OK, to powiem dość twardo... pierwszy kod ma trochę błędów wskazujących że jeszcze nie do końca rozumiesz jak działają zmienne i co robią funkcje, ale drugi ma znacznie, znacznie mniej sensu i nie wiem skąd wytrzasnąłeś żeby w taki sposób użyć klasy.

Po kolei, w pierwszym:

def ilosc_filizanek(ile_filizanek):
    pomiar = ile_filizanek * kofeina
    print()
    print("wypiłeś:", pomiar, "mg kofeiny") 
 
kofeina = 100

Nie do końca rozumiem, czemu mieszasz tutaj argument do funkcji `ile_filizanek` z wartością globalną `kofeina`.  Jak już, to bierz obie przez argument?

Po drugie, przypisujesz do `pomiar`. Ale to jest zmienna lokalna, a nie ten sam `pomiar` co na zewnątrz funkcji. Poczytaj o zwracaniu wartości z funkcji.

if ilosc_filizanek(ile_filizanek):
    print(ilosc_filizanek())

Pierwsza linia jest dziwna, bo robisz warunek na wartości zwracanej przez funkcję... ale przecież nic z tej funkcji nie zwracasz, to co ten `if` ma robić? A na drugiej linii (która nigdy się nie wywołuje), wywołujesz tą samą funkcję, ale bez argumentu.

Drugi kod:

class ilosc_filizanek:
    kofeina = 100
    pomiar = ile_filizanek * kofeina
    print()
    print("wypiłeś:", pomiar, "mg kofeiny")

Tak się nie pisze klas. To nie ma żadnego związku z używaniem klas. Poważnie, nie wiem co to ma robić. Najpierw poczytaj podstawy o funkcjach, a potem przejdź do klas.

# czym jest ten błąd ?????

 <class '__main__.ilosc_filizanek'>

To nie błąd, to robi dokładnie o co poprosiłeś:

print(ilosc_filizanek)

Prosisz o wypisanie `ilosc_filizanek`, które jest klasą, więc print() wypisuje "to jest klasa o nazwie ilosc_filizanek".

Tak samo jak gdybyś chciał wypisać inne typy:

print(int) # <class 'int'>
print(float) # <class 'float'>

 

1
komentarz 1 marca 2021 przez q Nowicjusz (150 p.)
edycja 2 marca 2021 przez q

dziękuję bardzo, teraz widzę te wszystkie błędy i bezsensowne linijki. dużo pracy przede mną

Podobne pytania

0 głosów
0 odpowiedzi 544 wizyt
0 głosów
5 odpowiedzi 1,504 wizyt
pytanie zadane 3 sierpnia 2020 w Python przez Igorek Mądrala (6,290 p.)

92,568 zapytań

141,420 odpowiedzi

319,620 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...