Začátky v python3

Doufám, že Vážený návštěvník, který zavítá na tyto stránky, se nenaštve, když teď zjistí, že se nejedná o žádný výukový seriál. Je to prostě jen takový zápisek toho, jak jsem se začal učit programovat a to v jazyce Python. Ano začátečníci, kteří na tom jsou stejně jako já, zde určitě najdou nějaké rady. Jenže, nezaručuji, že mnou napsané postupy jsou tak čisté, jak by měli být.

Proč programuji?

Dobrá otázka. Dlouhá léta byl mým cílem, stát se programátorem. Je to takové hezké, umět si napsat vlastní program. Jenže praxe je horší, než plány. Dlouhá léta jsem také ani nevěděl, co chci programovat. Prostě něco. Nejdříve se naučit a pak už to půjde samo. To je ovšem, alespoň v mém případě, opravdu mylná představa. A tak to trvalo několik let,
Jak již jsem napsal v jiném příspěvku, začal jsem si dělat kurz osobního fitness trenéra a dietologa. Také jsem již i nastínil, jakým způsobem se provádí základní výpočty a možná i napíši, jak se sestavuje výživový plán, tak i plán cvičební. Ale zpět k tomu proč programovat. Prostě jsem se rozhodl si to nějak ulehčit. Jsem hračička a člověk trošku líný. Základem není si ulehčit zas až tak výpočty, ale hlavně správu jednotlivých klientů. Co si budeme nalhávat, pokud budu chtít opravdu v tomto oboru pracovat, budu muset vést nějakou databázi že?
První předpoklad byl, že si to udělám hezky v nějaké webové aplikaci. To ovšem nějak nedopadlo, protože ASP.NET mě neoslovil. Proč co a jak teď neřešme, ale třeba se k tomu ASP.NET vrátím, a prosím, nepište mi tu, že přece je tu PHP :-) Já o něm vím. Pak ale jsem měl slabší chvíli a čirou náhodou se mi do ruky dostala kniha Python 3 Ponořme se. Tato kniha je volně ke stažení na stránkách sdružení cznic (nic.cz). Ne že bych z této knihy byl ze začátku nějak moudrý. To vůbec ne, ale nakoplo mě to začít si hrát s pythonem.

A začal jsem programovat

Trpké začátky programování. Takže s čím jsem to začal? V prvé řadě jsem si určil základní cíl, co by můj soubor fitness.py měl umět. Poprvé mi stačí ke štěstí, aby ta moje aplikace uměla vypočítat BMI ze zadaných údajů. Takže si tedy vytvořím proměnné.

jmeno=
vyska=
vaha=
vek=
BMI=

toto jsou názvy a k nim můžu přiřadit údaje. Ze začátku tedy natvrdo:

jmeno= Tomáš
vyska=188
vaha=98,7
vek=29

to jsou vstupní hodnoty a BMI to se vypočítá.

BMI=vaha/(vyska/100)**2

Python se mi v tomhle opravdu líbí, že je to tak jednoduché. V lidské řeči, to co jsem napsal znamená, že BMI je váha děleno výška v metrech na druhou.
Ano mohl jsem výšku dát natvrdo v metrech, tedy 1,88 m, ale jelikož vím, že častěji budu potřebovat výšku v cm… Ale dá se to řešit i novou proměnnou:

print('BMI:', BMI)

tak program vypíše
BMI: hodnota
Jak jednoduché. Ale já to chtěl lepší. Chtěl jsem, aby se hodnoty zadávali interaktivně. A tak po dlouhém bádání jsem napsal následující kód:

jmeno= input("Zadejte své jméno: ")
vyska= int(input("Zadejte svou výšku v cm: "))
vaha=  float(input("Zadejte svou váhu v kg: "))
vek= int(input("Zadejte svuj vek: "))

Při sčítání BMI mi to dělalo neplechu. Musel jsem tedy říci, co budou celá čísla a co jsou čísla s desetinou čárkou.

Celá čísla jsou in a s desetinou čárkou float. (a už jsem zvědavý, jak mě někdo za tohle svým způsobem špatně napsané dělení seřve. Ale takhle to chápu já)
Jenže já jsem chtěl víc. Začal jsem řešit, jak program vypíše, podle hodnoty BMI, že člověk má nadváhu atd. Stálo mě to opravdu dvě, nebo tři hodiny čistého času přemýšlení a zkoušení. Ve skutečnosti to bylo na tři dny, protože jsem se vždy naštval po hodině a nechal to být. Nakonec jsem vymyslel toto:

if BMI>18.5:
print('Podváha. Nebezpečí anoregixe')
elif BMI>25 and BMI<29.9:
print('Nadváha. Středně vysoké zdravotní riziko')
elif BMI>29.9 and BMI<39.9:
print('Obézita. Zdravotní riziko vysoké')
elif BMI>39.9:
print('Těžká obézita. Zdravotní riziko velmi vysoké')
else:
print('Normální váha. Zdravotní riziko minimální')

Ale jak říkám, bylo to hodně těžké. V prvé řadě bylo důležité přijít na elif. To pak už šlo samo. Pak jsme zjistil, že se vždy vypisuje, že mám Nadváhu, přestože bych už podle tabulek, měl mít Obézitu. Důvodem byl tento zápis

if BMI<18.5:
print('Podváha. Nebezpečí anoregixe')
elif BMI>25:
print('Nadváha. Středně vysoké zdravotní riziko')
elif BMI>29.9:
print('Obézita. Zdravotní riziko vysoké')
elif BMI>39.9:
print('Těžká obézita. Zdravotní riziko velmi vysoké')
else:
print('Normální váha. Zdravotní riziko minimální')

Chvíli mi to nedocházelo, nakonec ale ano. Program jde řádek po řádku, celý kód říká toto:
Pokud je BMI menší 18.5 tak vypíšu Podváha…., pokudne ale pokud je BMI větší jak 25 tak vypíšu Nadváha… a, tady je zakopaný pes. Vždyť pokud mám BMI 30 tak ono je vlastně větší 25 a proto….
Což o to, chápu, kde ten problém je, ale jak to proboha napsat? Chvíli jsem googloval a našel to řešení. Nyní v lidské řeči můj program říká:
pokud je BMI větší jak 25 a menší, nebo rovno jak 29.9…..
To už je o něčem jiném že. A tak můj program vypisuje nejenom hodnotu BMI, ale i co ta hodnota znamená.
Poslední hodnotu, kterou jsem chtěl, aby můj program uměl, pro začátek, je výpočet Bazálního metabolismu. To je poměrně jednoduché, pokud umím zadat výpočet BMI. První návrh výpočtu vypadal asi tak nějak takhle:

bazmetM= 660 + ( 13.7 * vaha) + ( 5 * vyska) - (6.8 * vek )
bazmetZ= 655 + ( 9.6 * vaha) + (1.85 * vyska) - (4.7 * vek)

Jak vidíte udělal jsem si nové dvě proměnné. První je výpočet pro muže a druhý pro ženy. Tedy přidávám do programu i zadání hodnoty pohlaví:

pohlavi= input("Pohlaví (m / z ): ")

Jelikož zase tak blbej nejsem, vím moc dobře, že takto to napsané je neblbu vzdorné a náchylné na chybné zadání hodnoty. To v tuhle chvíli jsem neřešil, pro mě bylo důležité, aby na základě zadané hodnoty došlo ke zobrazení toho správného výpočtu. Z logiky věci jsem tedy zadal

if pohlavi==m:
print ("Váš bazální metabolismus je: "), bazmetM)
else:
print ("Váš bazální metabolismus je: "), bazmetZ)

a bohužel takto to nefunguej . Nakonec jsem po dlouhém přemýšlení na tu chybu přišel

if pohlavi=='m':
print('Váš bazální metabolimus je:' ,660 + ( 13.7 * vaha) + ( 5 * vyska) - (6.8 * vek ))
elif pohlavi=='z':
print('Váš bazální metabolismus je:', 655 +(9.6*vaha)+(1.85*vyska)-(4.7 * vek))
else:
print('Zadali jste špatně pohlaví')

Jak vidíte, tak jsem to trošku nakonec upravil a přesto jsem zadal menší chybové hlášení, pokud by člověk zadal špatně pohlaví. Jinak ale takhle to krásně zobrazí ten správný bazální metabolismus a to ten, který jsem potřeboval.
Můj program tedy umí výpočet BMI ze zadaných hodnot a dále výpočet Bazálního metabolismu v závislosti, jestli je osoba, pro kterou to vypočítává žena, nebo muž.
Program jsem trošku vylepšil a to pomocí funkcí. Funkce je vlastně taková ošatka příkazů, které nemusím znovu zapisovat. Všimli jste si, jak jsem velmi těžkopádně napsal výpočet bmi a napsání co to znamená a také výpočet bazálního metabolismu? A teď bych to měl vypisovat v programu 10x ? No a k tomu se dá funkce, kdy poté jen napíšu název funkce. Takže ukážu funkci pro BMI

#Zjištění stavu BMI
def bmih():
BMI = vaha / vyskam**2
if BMI<18.5:
print('BMI:', BMI, 'Podváha. Nebezpečí anoregixe')
elif BMI<25 and BMI>29.9:
print('BMI:', BMI, 'Nadváha. Středně vysoké zdravotní riziko')
elif BMI<29.9 and BMI>39.9:
print('BMI:', BMI, 'Obézita. Zdravotní riziko vysoké')
elif BMI<39.9:
print('BMI:', BMI, 'Těžká obézita. Zdravotní riziko velmi vysoké')
else:
print('BMI:', BMI, 'Normální váha. Zdravotní riziko minimální')

Ano ano, je to těžkopádně a určitě se to dá napsat lépe, ale já na to třeba časem příjdu. Pro mě je důležité, že mi v programu už jen stačí napsat
bmih()
a provede se výpočet BMI. Podobně mám napsaný i Bazální metabolismus.

Co je mým cílem?

Mým cílem je nejprve udělat blbuvzdorné zadání pohlaví. Tedy, aby po zadání něčeho jiného než je m nebo z to napsalo, že jsem se uklikl a bude to chtít zapsat vše znovu.
Druhé, co mi nějak nefunguje, je vyčistění obrazovky. Tedy aby se program spustil s prázdnou obrazovkou a opět jí vyčistil po zadání vstupních hodnot, aby výpis byl přehledný. Zatím, co jsem našel návody, mi prostě nefungují. Jeden fungoval pro verzi pythonu 2.6, ale ja se učím pro python3.
Tak a až tenhle zápisek uvidí, nějaký programátor, může mi vyhubovat za tu blbost, co jsem napsal. Pro jistotu dávám k dispozici zdrojový kód, aby jste si mohli prográmek vyzkoušet.

Zanechat Odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit / Změnit )

Připojování k %s