{
"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
}