22 август 2008

Първи стъпки в програмирането с Python. част 4.Ужаст и страхопаника

Index:
1.Интродукция
2.В началото бе словото
3.Ю толкинг ту ми?


4.Ужаст и страхопаника

Започваме със примитивните типове данни. Числа и низове, вчера говорихме малко за низове(ако летете това в същия ден в който четохте предишната глава, не е било вчера, а преди малко). След като говорим за числата и низовете, ще говорим за променливите и имената, после за сложните типове данни, като списъци и речници. Трябва да свърша с това бързо, за разлика от други книги и туториъли няма д се занимавам много със подробностите, има си още туториъли и книги които ще трябва да прочетете, от един блог програмист не се става. Причината поради която ще ви начаткам всичко това на веднъж е че искам да имам повече време за по интересните части, това не е много интересно. ще ви прехвърля на бързо през типовете данни и операциите, след това в следващия пост на бързо ще минем през синтаксиса и някой други оператори и ще преминем към интересната част, интересни програми, или скучни програми ако не харесвате математика :D

Да минем отново през низовете. Имаме низ:

"shishe", той е същия като низът 'shishe', това че имат различни кавички не е важно, важното е да не се смесват. можете да ги събирате

'shi'+'she' -> 'shishe'

или умножавате

'shi' * 5 -> 'shishishishishi'

по късно ще ви покажа още няколко готини номера с тях.

Сега да видим числата. Те както предполагам знаете може да са цели и дробни, в програмирането дробните числа се наричат числа с плаваща запетая, или float, а целите се наричат int. Има още няколко вида, но те няма да ви трябват за сега. Да видим примери

5 е цяло число, но 5.0 е float, можем да ги съберем

5 + 5.0 -> 10.0 както виждате това връща float. А ако ги умножим:
5 * 5.0 -> 25.0 отново float, можем и да ги разделим
5 / 5.0 -> 1.0 а ако ги извадим
5 - 5.0 -> се получава един фънки резултат 0.0, това е магия

можем да преобразуваме типове, да речем искаме числото 5.0 да стане цяло:

int(5.0) -> 5 готово, ако напишем float(5) ще получим обратно 5.0, а ако направим някое друго число например 5.5 на int ще получим отново 5, забравете какво са ви учили в даскало при закръглянето.

При деленето обаче се получават интересни резултати. Искаме да разделим да речем 5 на 2:

5 / 2 -> 2, странно нали? Този проблем се отстранява лесно, като се използват float-ове:
5.0/2.0 -> 2.5 ето това вече е по добре. Проблемът остава със делене на по големи числа:
2 / 3 -> 0 отново със float се решава проблемът:
2.0/3.0 -> 0.66666666666666663 Това число всъщност е безкрайно, но компютърът го реже в определен момент, едва ли ще ни трябва някога по голяма точност, а ако ни трябва, има инструменти за това.

Можем също така да получаваме остатък със оператора % :

5 % 2 -> 1 това е остатъкът от делението.
4 % 2 -> 0 тук няма остатък
2 % 3 -> 2 тук остатъкът е 2

Оправихме до известна степен числата. Сега да се занимаваме малко с променливите. В python а и в програмирането като цяло е прието = да означава присвояване, а не равно, равно е ==, когато казваме x=5 обикновено се разбира че x има стойност 5, а не че x е равно на 5, ако кажем че x=5, и после кажем че x==5, това ще бъде вярно, защото x вече Е равно на 5, но чак след като сме му дали стойност 5, преди това е просто празна променлива. на променливи можем да присвояваме почти всичко, каквото се сетите. Да видим сега няколко интересни примерчета:

x='shi'
y='she'
z=x+y
сега z е 'shishe'
сега можем да кажем например
a=z*5
сега а е 'shisheshisheshisheshisheshishe'
сега можем да променим променливите с други стойности, да речем искамe:
x=a
сега х е 'shisheshisheshisheshisheshishe'
y=5
a=3
сега y и a са цели числа, сега можем да комбинираме това цялото:
z=x*(y+a)
сега z e

'shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe
shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe
shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe
shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe'

т.е. 40 шишета, това вече се нарича тежко пиянство.

Продължаваме със следващата страхотия, това е списъкът, или list. Той се пише между две квадратни скоби ето така: [], и може да съдържа всякакви работи, дори и други списъци.

[1,2,3,4,5] това е списък от числа
['tova','e','spisuk','ot','nizove']
[1,'niz',['spisuk v spisukut']]

Както виждате тук списъкът може да съдържа много работи. Сега да видим някой готини трикчета с него.

x=[1,2,3,4,5]
x[0] -> 1

какво стана тук? просто поискахме първия елемент от x който е 1, при списъците броенето на елементите почва от 0, тоест първия елемент(0) е 1,втория елемент(1) е 2. Малко е объркващо, но сеща ще обясня, списъците, наредените n-торки, и низовете броят елементите си от 0. ето:

[1,2,3,4,5]
0 1 2 3 4

виждате индексът на всеки елемент. При списъците можем да променяме елементи:

x[0]=0

сега х е:
[0,2,3,4,5]

можем също така да 'режем' части от списъкът, да речем искаме първите 3 елемента:
x[0:2] ще върне:
[0,2,3]

тук използваме един готин трик [0:2] се нарича slice(слайс) това казва 'дай ми всички елементи от първия до 3-тия. Можем да кажем също така и [3:] което ще рече 'дай ми всички елементи от четвъртия до последния, което в случая на x е [4,5]. Можем да го направим и в обратна посока [-1:-2] ще върне същия резултат, това се чете 'върни ми всички елементи от последния, до предпоследния. Забелязвате че когато ползваме отрицателни индекси се брои от -1, а не от -0. Това е важно да се запомни, ако искаме да копираме даден списък можем да поискаме [:] което означава 'дай ми всички елементи от първия до последния'. както виждане нулата може да се изпуска [:2] е същото като [0:2]. Тези трикчета могат да се използват и за низове:

x='12345'
x[:2] -> '123'
x[3:] -> '45'

Красота! Има един проблем обаче, низовете не могат да се променят. т.е ако напиша x[0]='0' това няма да работи. За целта трябва да приложим малко други трикчека:

x='0'+x[1:] това ще върне x='02345' , ако искаме да променим нещо по средата, ето номера

x=x[:1]+'SHISHE'+[3:] това ще върне '02SHISHE45'

Ако това беше списък, това щеше ад бъде много по лесно:

x=[1,2,3,4,5]
x[2]='SHISHE'
x -> [1,2,'SHISHE',4,5]

Но така е било писано. Да видим следващото мъчение за мозъците ви:

Сега да видим едни подобни на списъците обекти наречени наредени n-торки, аз ги наричам редици за кратко, на английски tuple. Те са като списъците, но използват кръгли скоби (1,2,3,4,5) За разлика от списъците те не могат да се променят и да се разширяват, имат постоянен размер и постоянни членове, но могат да имат всякакви елементи в себе си. и отново [:] и подобните работят, просто не можете да присвоявате стойности, също както низовете. Няма да влизам в подробности тук, в продължение на цялата поредица ще виждате допълнителни трикчета и методи свързани с тези структури и обекти, за сега това ви стига. Останаха само речниците. На английски dict. Те са просто хеш таблици(сякаш очаквам да знаете какво е хеш-ове) Та при тях имаме двойки от ключ и стойност. да речем нещо от рода на

x={1:'a', 2:'b', 3: 'c'}

сега по ключ можем да достигнем до дадена стойност:
x[1] връща 'a', а ако дадем
x[1]='aa' сега речникът ще е такъв
{1:'aa', 2:'b', 3: 'c'}

за сега това трябва да знаете, би трябвало да ви стига. По късно когато разглеждаме по сложни конструкции ще разгледаме още трикове с речниците.

И така оцеляхте. Това е просто формално запознаване със основните структури и типове в Python, следващия път ще разгледаме синтаксисът и конструкциите на езика. Този път не беше толкова забавно колкото предните писания, защото просто тук трябваше да обяснявам теория, не друго. Но програмирането не е само вицове за пингвини, трябва и пот.

Няма коментари: