{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. час: Увод у Џупајтер (_Jupyter_)\n", "\n", "На овом часу ћеш научити:\n", "1. шта је Џупајтер (_Jupyter_), како се крећеш кроз Џупајтер радну свеску (_Jupyter Notebook_) и како се Џупајтер радна свеска користи за рачунање израза;\n", "2. како се у Џупајтеру користе променљиве и како се радна свеска користи покретање мањих Пајтон (_Python_) програма; и\n", "3. шта су библиотеке функција и како се позивају функције из стандардних библиотека." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.1. Џупајтер (_Jupyter_) уме да рачуна\n", "\n", "Џупајтер (_Jupyter_) је интерактивна радна свеска у коју можеш да уносиш текст (као текст ког управо читаш), да рачунаш, да покрећеш једноставније Пајтон програме, да обрађујеш податке, да приказујеш податке у виду табеле и дијаграма, и још много тога.\n", "\n", "Свака Џупајтер _радна свеска_ се састоји из низа ћелија, а свака ћелија може да садржи текст, математички израз или низ Пајтон наредби. За сада нећемо објашњавати како се у Џупајтер ћелију уноси текст, већ ћемо пажњу усмерити на рачунање израза и извршавање Пајтон наредби.\n", "\n", "Када се у Џупајтер ћелију унесе неки израз или Пајтон наредба садржај ћелије се може израчунати тако што се кликне на дугме **Run** при врху стране:\n", "\n", "![Дугме за извршавање ћелије](slike/JupyterMenuRun.jpg)\n", "\n", "Кликни на ћелију испод да се активира (_активна ћелија има ***зелени*** или ***плави*** оквир, зависи где си кликнуо/ла_), и онда кликни на дугме **Run**:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "3 * 19" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Треба да добијеш одговор система који изгледа овако:\n", "\n", "`Out[1]: 57`\n", "\n", "Џупајтер је израчунао вредност израза `3 * 19`, што је `57`.\n", "\n", "Хајде, сада, у ћелију испод унеси `(12 + 51) * 14` и онда кликни на дугме **Run** при врху стране:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(12 + 51) * 14" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Треба да добијеш одговор 882.\n", "\n", "Сада кликни _поново на горњу ћелију,_ унеси у њу неки други израз и кликни на дугме **Run** при врху стране. Слободно се играј са разним изразима. Пробај, рецимо, да израчунаш $2^{5^3}$ тако што ћеш укуцати `2**(5**3)`\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.2. Џупајтер уме да користи променљиве и да извршава Пајтон команде\n", "\n", "Понекад је згодно именовати вредности, поготово ако се ради о компликованим бројевима, тако да касније можемо да их користимо тако што наведемо само име. На пример, према попису из 2011. године у Србији живи 7.186.862 становника. Наредба\n", "\n", "`StSrb_2011 = 7186862`\n", "\n", "ће у систем увести нову променљиву `StSrb_2011` којој ће бити додељена вредност `7186862`. Да се подсетимо: имена променљивих у Пајтону морају да почну словом и могу да садрже слова, цифре и специјални знак `_` (доња црта).\n", "\n", "Да пробамо! Изврши садржај у следећој ћелији (клик на ћелију, па на дугме **Run** при врху стране):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "StSrb_2011 = 7186862" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Видимо да систем није вратио никакав одговор. Просто је запамтио да променљива `StSrb_2011` има вредност 7.186.862.\n", "\n", "Деца узраста 0-14 година чине 14,27% укупног броја становника. Хајде да израчунамо колико је, према попису из 2011. године, у Србији било деце наведеног узраста (клик на ћелију испод, па на дугме **Run** при врху стране):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "StSrb_2011 * 14.27 / 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Приметимо да се приликом записивања децималних бројева у Пајтону користи _децимална тачка_, а не децимални зарез, како је то прописано нашим правописом!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Хајде, сада, да решимо један задатак за 4. разред основне школе.\n", "\n", "Ана, Бојан и Влада су купили чоколадице. Ана је купила 3 чоколадице, Бојан за две више од Ане, а Влада два пута више од Ане и Бојана заједно. Колико чоколадица су заједно купили Ана, Бојан и Влада?\n", "\n", "Ево како се овај задатак може записати као низ Пајтон наредби (изврши наредну ћелију):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Ana = 3\n", "Bojan = Ana + 2\n", "Vlada = (Ana + Bojan) * 2\n", "Ana + Bojan + Vlada" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Прве три наредбе су наредбе доделе: неким променљивим додељујемо неке вредности. Последња наредба садржи само математички израз. Пошто радимо у интерактивном окружењу (што значи да Џупајтер одмах даје одговоре на питања која му поставимо), ако је последња наредба у ћелији само израз систем ће вратити вредност тог израза као резултат извршавања ћелије.\n", "\n", "Претходни програм смо могли да напишемо и овако (изврши наредну ћелију):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Ana = 3\n", "Bojan = Ana + 2\n", "Vlada = (Ana + Bojan) * 2\n", "print(Ana + Bojan + Vlada)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Овај пут наредба `print` _исписује_ вредност израза, а систем _ништа не враћа као резултат извршавања ћелије_ (примети да након извршавања ћелије систем није вратио одговор у облику `Out[ ]:`).\n", "\n", "При раду са интерактивним окружењима згодно је усвојити следећи манир: наредбу `print` користимо само у ситуацијама у којима треба да прикажемо вредности неколико израза, или ако желимо да испис мало улепшамо. На пример овако:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Ana = 3\n", "Bojan = Ana + 2\n", "Vlada = (Ana + Bojan) * 2\n", "print(\"Ана, Бојан и Влада заједно имају\", Ana + Bojan + Vlada, \"чоколадице.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Следећи задатак уради сам у ћелији испод.\n", "\n", "Ако једна чоколадица кошта 5 динара, колико новца је потрошила Ана, колико Бојан, а колико Влада? _(Немој рачунати у глави! У ћелији испод напиши мали Пајтон програм; употреби три `print` наредбе.)_" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.3. Библиотеке функција" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "У модерним програмским језицима, а Пајтон је један од њих, могу да се ураде невероватне ствари зато што долазе са обиљем _функција_ које су већ испрограмиране. Тако се кориснику система (или програмеру) умногоме олакшава живот: већина ствари које просечном кориснику требају су већ испрограмиране, само треба наћи одговарајућу функцију!\n", "\n", "Да би се корисници лакше снашли у овом обиљу, све функције које долазе уз програмски језик (односно, одговарајуће окружење) су груписане у _библиотеке функција_.\n", "\n", "Рецимо, библиотека математичких функција се зове `math`. Она садржи функције као што су `sqrt` (која рачуна _квадратни корен_), `sin` (која рачуна _синус_ угла) и `cos` (која рачуна _косинус_ угла), али и математичке константе као што је `pi` (која представља добру апроксимацију броја $\\pi$).\n", "\n", "На пример, програм који рачуна обим круга датог полупречника изгледа овако (изврши ћелију да видиш како програм ради):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import pi\n", "r = float(input(\"Unesi poluprecnik kruga: \"))\n", "obim = 2 * r * pi\n", "print(\"Obim kruga je:\", obim)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Први ред у овом програму је једина новина за тебе. Он показује како се из неке библиотеке може увести функција или константа која нам је потребна:\n", "\n", "`from math import pi`\n", "\n", "дословно значи: из библиотеке `math` увези појам `pi`. Тиме смо у програм увели име `pi` и слободно можемо да га користимо.\n", "\n", "Ево још једног примера. Написаћемо Пајтон програм који одређује хипотенузу $c$ правоуглог троугла ако знамо његове катете $a$ и $b$. (Да се подсетимо, према Питагориној теореми је $c = \\sqrt{a^2 + b^2}$.)\n", "\n", "За овај програм ће нам требати функција `sqrt` која рачуна корен неког броја и која се такође налази у библиотеци `math`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import sqrt\n", "a = float(input(\"Unesi katetu a: \"))\n", "b = float(input(\"Unesi katetu b: \"))\n", "c = sqrt(a**2 + b**2)\n", "print(\"Hipotenuza c je:\", c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Претходна два примера представљају комплетне мале програме: податке смо учитали наредбом `input`, обрадили смо их на одговарајући начин, и резултате смо исписали наредбом `print`.\n", "\n", "Рад са интерактивним окружењима нам омогућује да уместо целих програма пишемо \"парчиће кода\" које можемо да мењамо како нам одговара и да их извршавамо коликогод пута желимо. Тако се лакше експериментише са подацима (што је важан део модерног разумевања обраде података и о томе ћемо причати касније), и штеди време. Тада углавном не користимо наредбу `input` већ директно у код унесемо вредности које нас интересују.\n", "\n", "На пример, претходни проблем (рачунање хипотенузе правоуглог троугла) можемо у интерактивном окружењу да решимо и овако (изврши следећу ћелију):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import sqrt\n", "a, b = 3, 4\n", "sqrt(a**2 + b**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Наредба `a, b = 3, 4` значи да ће `а` добити вредност 3, а `b` вредност 4. Резултат извршавања ћелије је вредност израза `sqrt(a**2 + b**2)`.\n", "\n", "Сада се врати, унеси неке друге вредности за `a` и `b` и поново изврши ћелију." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.4. Задаци" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задатак 1.** Према попису из 2011. године Србија има 7.186.862 становника. Процењује се да сваке године наша земља изгуби око 35.000 становника (што због исељавања, што због негативног прираштаја -- више људи умре него што се роди деце). Колики је био процењени број становника Србије у 2014. години? (Помоћ: У ћелију испод унеси одговарајући израз, па нека Пајтон рачуна за тебе!)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задатак 2.** Горан, Дејан и Ђорђе скупљају сличице фудбалера. Горан је скупио 746 сличица, Дејан има дупло мање од Горана, а Ђорђе два пута више од Горана и Дејана заједно. Колико сличица је скупио Дејан, а колико Ђорђе? (Помоћ: Упосли Пајтон да рачуна за тебе!)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задатак 3.** Напиши Пајтон програм који учитава полупречник круга, а онда рачуна и штампа његову површину. (Помоћ: `pi` се налази у библиотеци `math`.)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задатак 4.** Растојање две тачке дате у равни својим координатама $A(x_1, y_1)$ и $B(x_2, y_2)$ може се израчунати помоћу формуле\n", "\n", "$$d(A, B) = \\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}$$\n", "\n", "Напиши Пајтон програм који учитава координате две тачке у равни и потом рачуна и штампа њихово растојање. (Помоћ: `sqrt` се налази у библиотеци `math`; ако ти ова формула делује застрашујуће не брини: то само прерушена Питагорина теорема!)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задатак 5.** _Факторијел_ броја $n$ је производ свих бројева од 1 до $n$ и означава се овако:\n", "\n", "$$n! = 1 \\cdot 2 \\cdot 3 \\cdot \\dots \\cdot n.$$\n", "\n", "Израчунај број 200! и утврди са колико нула се завршава. (Помоћ: библиотека `math` има функцију `factorial`.)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задатак 6.** Користећи парче кода наведено у ћелији испод нађи још један пар целих бројева $a$ и $b$ такав да је хипотенуза правоуглог троугла са катетама $a$ и $b$ целобројна. Уместо `3, 4` унеси неки други пар целих бројева, изврши ћелију и експериментиши! (Такве тројке целих бројева се зову _Питагорине тројке_.)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import sqrt\n", "a, b = 3, 4\n", "sqrt(a**2 + b**2)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }