Python #2: pyta i odpowiada

Rozwiązywanie zadań z poprzedniego tematu na początku nowego powinno być dobrą powtórką. Odpalam zatem pythona w konsoli.

Zadanie 1 – BMI
Coś takiego jeszcze powinno gdzieś się zachować w pamięci:

>>> print("Twoje bmi wynosi:",BMI)
Twoje bmi wynosi: 20.703124999999996

Rozwiązanie w jednej linii – wewnątrz funkcji print():

>>> print("Twoje bmi wynosi:", 53.0 / (1.6 ** 2))
Twoje bmi wynosi: 20.703124999999996

Zadanie 2 – dzienne zapotrzebowanie kaloryczne
Istnieją dwa wzory na obliczenie swojej podstawowej przemiany materii, którą należy przemnożyć przez nasz styl życia.

PPM: 10 x masa ciała + 6.25 x wzrost w cm – 5 x wiek  + S
współczynnik S: dla kobiet = -161, dla mężczyzn= +5

Jako przykład obliczymy dzienne zapotrzebowanie kaloryczne dla 25-letniej kobiety o wzroście 1.7m i wadze 63kg, która uprawia sport kilka razy w tygodniu czyli jej współczynnik wynosi 1.6

>>> wzrost = 170
>>> waga = 63
>>> wiek = 25
>>> S = -161
>>> PPM = 10 * waga + 6.25 * wzrost + 5 * wiek + S
1656.5

Do tego miejsca podstawiliłam nasze dane do wzoru na podstawową przemianę materii, teraz pozostaje przemnożyć wynik przez współczynnik wynikający ze stylu życia czyli 1.6

>>> print("Dzienne zapotrzebowanie kaloryczne wynosi:", PPM * 1.6, "kcal")
Dzienne zapotrzebowanie kaloryczne wynosi: 2650.4 kcal

To teraz czas na coś nowego 😉

Funkcje wbudowane w Pythonie

Gdyby ktoś, dziś kazał Ci wytłumaczyć słowo „funkcja” zupełnie bez kontekstu prawdopodobnie byłoby to dość problematyczne. Zostawiając próby z „przykładami z życia” najprościej mówiąc: coś ma swoją funkcje – tzn, że spełnia określone zadanie. To jest bardzo dobre wytłumaczenie i można je przenieść do Pythona.

  • funkcja – to fragment kodu, który wykonuje jakąś sekwencje poleceń. Może przyjmować argumenty.
  • argumenty – dane niezbędne do wykonania funkcji

Do tej pory na pewno znasz już funkcję print(), która wyświetla treści oraz przypadkiem pokazałam funkcję str(), która przekształca inne typy np. liczby w napisy czyli stringi. Czy można ten proces odwrócić? Oczywiście do zmiany napisu w liczbę wystarczy funkcja int()

Może też bawiąc się konsolą, ktoś zwrócił uwagę, że Python zachęca. by skorzystać z funkcji help() wyświetlającej pomoc do Pythona. Jeśli chcecie uzyskać więcej szczegółowych informacji o konkretnej funkcji to możecie zapytać – np. help(print). By zamknąć Pythona w konsoli wystarczy użyć funkcji quit().

Funkcją, która będzie działała odwrotnie od wyświetlania będzie odczytywanie input(). Funkcja input() wprowadzone przez użytkownika znaki z klawiatury zapisuje jako string.

>>> input()
Przykładowe zdanie z klawiatury
‚Przykładowe, zdanie z klawiatury’

Python czekał aż wpisałam „Przykładowe zdanie z klawiatury”, a następnie je wyświetlił – funkcja wykonała się, a efektem było zapisanie tego zdania.

>>> herbata = input()
zielona z jaśminem
>>> print("Moja ulubiona herbata to", herbata
‚Moja ulubiona herbata to zielona z jaśminem’

Po zczytaniu przez funkcje input() co wprowadziłam z klawiatury zamiast od razu wyświetlić, Python zapamiętał to w zmiennej o nazwie herbata. Dopiero przez użycie print() wyświetlił zawartość zmiennej.

Mam nadzieję, że do tej pory wszystko wydaje się jasne? 😀

Spróbujmy z liczbami:

>>> input()
365
‚365’
>>> liczba = input()
45
>>> print(liczba)
’45’
>>> print(liczba + 3)
File „”, line 1, in
TypeError: must be str, not int

Oho! Ten błąd nie powinien nikogo zaskoczyć – skoro input() zczytuje dane z klawiatury jako napisy, nic dziwnego, że do napisu „45” nie możemy dodać 3. Wspomniana wcześniej funkcja int() pomoże wykonując konwersję string do int.

>>> print(int(liczba) + 3)
48

Funkcję tę można by było umieścić też wcześniej zaraz po zczytaniu liczby:

>>> liczba = input()
45
>>> print(liczba)
’45’
>>> liczba = int(liczba)
>>> print(liczba)
45

Widzisz różnicę? Liczba przestała wyświetlać się w apostrofie, więc wiemy, że nie mamy już do czynienia z napisem.

Lub od razu traktować jako liczbę:

>>> liczba = int(input())
45
>>> print(liczba)
45

Jeśli jeszcze pamiętasz w typie liczbowym znajdują się również liczby zmiennoprzecinkowe – float. Jak się można domyśleć dla nich funkcja będzie wyglądać float() i działać analogicznie do int().

Funkcji wbudowanych w Pythonie jest znacznie więcej, ale nie ma co się na początek przemęczać 😛 Mamy co ćwiczyć na dziś.

Zamknij Pythona w konsoli poleceniem quit(). Konsolę możesz zminimalizować.

W dowolnym folderze utwórz nowy plik o dowolnej nazwie i rozszerzeniu .py. Możesz użyć utworzonego po instalcji hello.py.

W treści umieść:

>>> print("Hej!")

Z pierwszego wpisu wiesz jak uruchomić skrypt z poziomu IDLE.

Teraz zrobimy to z konsoli (chcę Cię trochę z nią oswoić).

Uruchamianie skryptu z konsoli

Możesz to zrobić na dwa sposoby.

1) python \ścieżka-do-pliku

Ścieżkę można zobaczyć w nazwie okna w IDLE, ale nie o to chodzi 😉
Ścieżka do pliku to miejsce, gdzie dokładnie znajduje się nasz plik. W Windowsie czy w Linuxie wystarczy na wybrany plik kliknąć prawym przyciskiem i zobaczyć właściwości. W Mac’u należy wybrać Plik > Informacje.

Z tego wynika, że mój plik znajduje się na pulpicie, a jego ścieżka to C:\Users\Rita\Desktop\hello.py.

W Mac’ach trzeba zwrócić uwagę na kierunek slashy, są odwrócone „/” względem windowsowych „\”.
Może tłumaczę rzeczy zupełnie banalne, ale lepiej, żeby nie było wątpliwości, by nikt nie stresował się, że nie wie jak zrobić kolejny krok.

Mam ścieżkę, więc mogę uruchomić plik poleceniem:

python C:\Users\Rita\Desktop\hello.py

(ścieżka bezwzględna do pliku)
W uproszczeniu

python .\Desktop\hello.py

(ścieżka względna do pliku)

Ponieważ w momencie uruchamiania znajduję się w katalogu C:\Users\Rita, to nie muszę podawać całej ścieżki, tylko ścieżkę względem tego katalogu, „w którym jestem”. Kropka przed \Desktop oznacza dosłownie „tutaj \wybierz Desktop\ wybierz plik hello.py”.

2) python nazwa_pliku.py

Żeby uruchomić plik bez podawania ścieżki musisz znajdować się w tej samej lokalizacji co plik.

Jak to zrobić?

W konsoli wpisujesz cd \ścieżka-do-folderu, w którym znajduje się plik i klikasz enter. W moim przypadku:

cd .\Desktop

Jestem teraz w katalogu Pulpitu, a w takim razie wystarczy wpisać python hello.py, aby skrypt zadziałał.

Zadanie 1
Teraz chcemy, tak aby skrypt:

  • Zapytał o Twoje imię
  • Powitał Cię po imieniu
  • Zapytał o Twój wiek
  • Zapytał o peron z Harrego Potter’a
  • Odpowiedział (dowolnie łącząc wiek i peron), czy jest sens jechać do Hogwartu 😉

Korzystając tylko z tego co już wiesz jesteś w stanie napisać taki skrypt:

Spróbuj napisać własny kod.

Aby zapobiec błędom związanym z różnym kodowaniem znaków ascii, na poczatku skryptu dodaj nagłówek:
# -*- coding: utf-8 -*-

Normalnie znak # rozpoczyna linię komentarza, czyli nasze uwagi do kodu, które nie wpływają sam kod i nie są nigdzie wyświetlane. W tym wypadku jednak nagłówek informuje interpreter, że kodowanie znaków jest ustawione na utf-8 – czyli kodowanie zawierające również polskie znaki takie jak ą, ę, ć etc. Mimo to nie używaj polskich znaków w nazwach zmiennych, a jedynie stosuj je w wyświetlanych napisach.

Przykładowe rozwiązanie masz tutaj:

# -*- coding: utf-8 -*-
print("Jak masz na imię?")
imie = input()
print("Cześć", imie, "miło Cię poznać")
print("Ile masz lat?")
wiek = input()
print("Z jakiego peronu dostaniesz się do Hogwartu?")
peron = input()
print("W wieku", wiek, "lat chyba już nie ma sensu jechać na peron", peron)

Możesz też go znacznie skrócić. W swoim kodzie dwie pierwsze linie usuń i zmień na: imie = input("Jak masz na imię?")
Jak podoba Ci się ta zmiana? 😉

Zadanie 2 – kalkulator BMI
Zapisz kalkulator BMI, który wcześniej był w konsoli do pliku, tak aby pytał użytkownika o potrzebne do obliczeń dane.

Zadanie 3
Ty jeszcze tutaj i chcesz jeszcze zadań?
Spróbuj to samo z kalkulatorem kalorii. Dla uproszczenia przyjmij, że jest to kalkulator dla kobiet lub dla mężczyzn 😉