Kalkulacija u Jupyter-u¶
Sada ćemo kod koji je generisao ChatGPT sami izvršiti u okviru JupyterLab-a.
Za početak, pokrenimo JupyterLab i otvorimo svesku pod nazivom prva-sveska.ipynb, koju smo kreirali na kraju lekcije o instalaciji. Ako to želite, možete slobodno otvoriti i novu svesku.
Potrebna nam je prazna ćelija na kraju sveske. Ako je već nemamo, praznu ćeliju kreiramo tako što miš najpre postavimo malo ispod poslednje ćelije, nakon čega se pojavljuje Click to add cell, a zatim kliknemo na to:
Sada ćemo u praznu ćeliju kopirati kod koji je generisao ChatGPT. U principu, kod možemo kopirati iz teksta lekcije ili iz odgovora koji je dao ChatGPT. U oba slučaja, postoji dugme kojim celo parče koda kopiramo u clipboard, što nam olakšava kopiranje, jer ne moramo da selektujemo kod pa da pritiskamo Ctrl + C. Ono što smo kopirali u clipboard lepimo u ćeliju na uobičajen način, tako što najpre uđemo u editovanje ćelije, a potom pritisnemo Ctrl + V.
Kod koji smo uneli u ćeliju izvršavamo koristeći Ctrl + Enter. Rezultat je prikazan na sledećoj slici.
Vidimo da je izvršavanje ćelije vratilo vrednost 121765.83, što je rezultat koji smo očekivali.
Tek nakon što smo razumeli i samostalno reprodukovali kod koji je generisao ChatGPT, možemo verovati rezultatu.
Izvršavanja i vraćene vrednosti¶
Obratimo pažnju na broj koji je ispisan u uglastim zagradama sa leve strane svake ćelije. To je redni broj izvršavanja i on se povećava svaki put kada izvršimo ćeliju u svesci. Izvršeni kod i vraćena vrednost imaju isti redni broj. Pokazaćemo vam u narednoj lekciji kako da resetujete sva izvršavanja tako da brojanje krene od početka.
Sada ćemo objasniti čemu služi poslednja linija koda, u kojoj piše nova_cena. Pogledajmo šta će se desiti ako uklonimo tu liniju koda i ponovo izvršimo ćeliju:
Ovog puta nemamo vraćenu vrednost ćelije. Međutim, promenljiva koju smo definisali ostaje upamćena. Da bismo dobili vrednost promenljive, ukucaćemo njen naziv u ćeliju:
Naime, kao što smo mogli da primetimo i u ranijem primeru, naziv promenljive koji je naveden na kraju ćelije određuje vrednost koju vraća ćelija. Jupyter primenjuje pravilo prema kom vrednost poslednjeg izraza predstavlja vraćenu vrednost ćelije. Budući da je u ovom slučaju izraz koji se poslednji izračunava nova_cena, vrednost tog izraza postaje vrednost koju nam ćelija vraća.
Isti rezultat smo mogli da dobijemo i da smo na kraju ostavili samo izraz pocetna_cena + poskupljenje:
Budući da se izraz pocetna_cena + poskupljenje poslednji izračunava, vrednost tog izraza postaje vrednost koju vraća izvršavanje ćelije.
Generativna veštačka inteligencija i programiranje¶
Razmislimo sada o pitanju koje se često može čuti u različitim formulacijama: „Da li vas ChatGPT oslobađa potrebe za programiranjem?”
S jedne strane, nismo morali da znamo ništa o programiranju u Python-u da bismo dobili kod koji funkcioniše. S druge strane, ipak smo morali da pogledamo kod i da ga razumemo.
Imajući to u vidu, možemo da kažemo u odgovoru da nam je ChatGPT pojačao potrebu za razumevanjem programiranja u Python-u, ali da nam je istovremeno olakšao kreiranje našeg prvog koda.
Pismenost se definiše kao sposobnost čitanja i pisanja i ne meri se količinom teksta koju je osoba u životu otkucala ili rukom napisala. U tom smislu, značaj programerske pismenosti se u dobu generativne veštačke inteligencije čak i povećava.
ChatGPT vam može pomoći i ako mu postavite pitanje u vezi sa programskim kodom, kao na primer:
Vidimo da ChatGPT-u možemo i da nalepimo deo slike ekrana, kao i to da ChatGPT ume da prepozna šta je na slici.
Brojevi, formatiranje i stringovi¶
Pokušajmo da u Jupyter svesci izvršimo kalkulaciju koju smo prethodno obavili u kalkulatoru i u Excel-u. Naime, potrebno je da izračunamo novu cenu proizvoda koji je pre poskupljenja od \(20\%\) koštao \(230.50\) dinara.
Budući da u svesci već imamo celokupnu računicu samo sa drugim brojevima, dovoljno je da editujemo kod u ćeliji tako što ćemo uneti potrebne brojeve. Izvršavanjem ćelije dobijamo sledeći rezultat:
Ovo ilustruje jednu od prednosti korišćenja programskog jezika − čak i kad su složenija izračunavanja u pitanju, lako možemo uneti izmenu u neki od koraka izračunavanja i iznova izvršiti kod.
Na ovom mestu ćemo povući paralelu između programskog koda i Excel-a, budući da i Excel nudi mogućnost korišćenja formula i automatskog preračunavanja. Na primer, vešt korisnik Excel-a će kurs valuta uvek držati u posebnim ćelijama kako bi se cela kalkulacija troškova automatski preračunavala prilikom promene kursa. Reč je o, suštinski, nekom obliku programiranja kroz formule Excel-a. Štaviše, Excel podržava i formule u Python-u, ali o tome ćemo govoriti kasnije u posebnom segmentu.
Kao što vidimo na prethodnoj slici, vraćena je vrednost 276.6. Ako želimo da vraćena vrednost bude formatirana na dve decimale i da uz to sadrži tekst (npr. Nova cena je 276.60 dinara), onda u poslednjoj liniji koda treba da stoji:
f'Nova cena je {nova_cena:.2f} dinara'
Tekstualni podaci se u programskom jeziku Python stavljaju pod navodnike koji mogu biti jednostruki ili dvostruki. U Python-u, kao i u većini programskih jezika, tekstualne podatke nazivamo stringovima. U poslednjem primeru vidimo da je vraćena vrednost ispisana pod navodnicima jer je u pitanju string, a ne broj kao što je to bio slučaj u prethodnom primeru.
Ako se pitate čemu služi f ispred otvorenog navodnika u poslednjoj liniji koda, probajte da ga uklonite, a zatim uporedite rezultat:
Kada želimo da u string umetnemo formatirane brojeve korišćenjem vitičastih zagrada, koristimo f ispred otvorenog navodnika. Takav string zovemo f-string.
Kada obrišemo f, vitičaste zagrade u stringu se tretiraju kao i svaki drugi karakter, što smo mogli da vidimo u poslednjem primeru.
Termin karakter koristimo kao opšti naziv za slova, brojeve, razmake, znakove interpunkcije, kao i za sve ostalo što može da se pojavi u stringu.
Ostaje nam da objasnimo šta znači deo {nova_cena:.2f}. Naime, na tom mestu u stringu biće umetnuta vrednost promenljive nova_cena, formatirana kao broj na dve decimale. Nećemo ulaziti u detalje i sve varijante specifikacije formata. Uostalom, ako već koristite ChatGPT, možete mu postaviti pitanje koje počinje sa: „kako u f-stringu da formatiram…” Primer je dat na sledećoj slici.
Objašnjenje koje je dao ChatGPT nije sasvim tačno jer dvotačka služi tome da se nađe između vrednosti koja se formatira i specifikacije formata. Takođe, u objašnjenju se navodi funkcija print, koju još uvek nismo pomenuli u ovom kursu. Ipak, bez obzira na to, možete lako zaključiti da, umesto {nova_cena:.2f}, treba da stavite {nova_cena:,.2f} ako želite da zapetom razdvajate grupe od tri cifre.
ChatGPT može biti neprecizan i pomenuti nešto sa čime se još niste susreli, ali odgovor koji je generisao vam i dalje može biti koristan.
Ispisana i vraćena vrednost¶
Funkcija print se u Python-u koristi za ispis vrednosti. Naime, izvršavanjem ćelije možemo dobiti kako vraćenu, tako i ispisanu vrednost. Na primer:
Gore prikazani rezultat izvršavanja sastoji se od teksta koji je ispisan pomoću funkcije print i vrednosti koja je vraćena na kraju. Međutim, ako vam to više odgovara, u rezultatu možete imati i samo tekst ispisan pomoću print. Na primer, funkcija print vam može biti od koristi kada treba više toga da ispišete jer će ispise poređati jedne ispod drugih:
Premda predstavlja termin koji je pozajmljen iz matematike, funkcija u našem kontekstu nosi drugačije značenje. U Python-u, poziv funkcije može da ima usputni efekat (npr. ispis teksta), što se ne uklapa u definiciju funkcije u matematici. Ipak, susrešćemo se i sa funkcijama koje su sličnije funkcijama u matematici.
Na primer, funkcija min je sličnija onome što smo navikli da predstavlja funkciju u matematici: