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'>