23 август 2008

Първи стъпки в програмирането с Python. част 5.Императорът и дракона

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


5.Императорът и дракона

Днес ще говорим за императивното програмиране. Нали се сещате, онова в което казваш на компютъра стъпка по стъпка какво да прави. Заповядваш му, казваш му да направи нещо. Ти си императорът. Имаш неограничена власт, единственото ограничение което имаш е словото ти. Владението на езикът ти е единственото ограничение на властта ти. Да ти дадем малко власт. Конструкциите на езика и синтаксисът са днешните ни теми. Нямам много встъпителни думи освен само че с властта идва и отговорността. Вече не си дете което се мъчи да разбере сложната материя на програмирането, а си император на света, и думите ти са закон, подбирай си думите мъдро.

Ако,ако,ако...

if, else конструкциите са най известните в програмния свят, почти всеки истински език ги има(дори LOLcode if can has chezeburger?) Това дава много мощ. Ето как изглежда:

if bored:
kill kittens
else:
not kill kittens

Ето как работи: Имаме ключовата дума if следвана от израз, ако изразът е верен(например ако bored е вярно) да изпълни действието на следващия ред(да убие котета). На следващия ред има else това се изпълнява ако bored е грешно, дано не ви е скучно, защото ако ви е скучно ще убия котката ви!!! Така след това отклонение да се върнем на въпроса. Забелязвате че втория и четвъртия ред са подредени малко по на дясно от другите, това е защото в python не харесваме фигурните скоби {} и ги ползваме само за речници. Вместо да слагате изразите си в скоби просто конструирайте блоковете си с интервали. Не използвайте табове, ако редакторът ви е настроен да слага интервали вместо табове, ок, НО НЕ ИЗПОЛЗВАЙТЕ ТАБОВЕ, също така използвайте ако можете 4 интервала, или 2, ако работите за Гугъл, ако не работите 4!!! Всички структури в Python се конструират със интервали, така знаеш кога нещо принадлежи на нещо друго, а и е по четимо, няма фигурни скоби, и всичко е подредено, красиво е, чисто е, ако не ти пука за чистотата на кода ти ще убия кот.. та ето още един по практичен пример:

if 5 in [1,2,3,4,5]:
print '5 e vuv spisukut'
else:
print '5 ne e v spisukut'

просто е нали? Ето още една готина конструкция elif това е съкратено от else if и се използва ако трябва да проверите повече от 1 нещо:

if 5 in [1,2,3,4,5]:
print '5 e vuv spisukut'
elif 4 in [1,2,3,4,5]:
print '4 e vuv spisukut, no 5 ne e'
else:
print '5 i 4 ne sa v spisukut'


това е еквивалентно на:

if 5 in [1,2,3,4,5]:
print '5 e vuv spisukut'
else:
if 4 in [1,2,3,4,5]:
print '4 e vuv spisukut, no 5 ne e'
else:
print '5 i 4 ne sa v spisukut'

Кое е по четимо и просто? Разбира се първото, следователно ако предпочитате второто сте тъпи и грозни, и нямате вкус към красотата. Да продължим.

Какво е 5 in [1,2,3,4,5]? Това е израз който връща една от двете стойности вярно или невярно, ако 5 е в списъкът връща вярно, ако не е, връща невярно. Сега ще ви разкажа за един човек наречен Бул. Бул бил блестящ математик и измислил буленовата логика. Край. Не ви ли хареса? Не съм по приказките, на кратко буленовите типове са два истина и неистина, пир python всичко е истина освен нулата и неистината(пише се False) Ако напишете примерно:

5==0 ще получите False защото 5 не е 0, освен ако не сте надрусани, но ако сте надрусани ви е забранено на програмирате, по добре да се качите да карате, щетите ще са по малки, виждали ли сте winamp напоследък? Точно когато си мислех че тази програма не може ад стане по скапана и хвърлих един поглед днес, не пийте/друсайте докато програмирате за доброто на всички ни.

ако напишем:

if 5==0:
нещо си
else:
нещо друго

тук ще се изпълни само другото нещо след else-а, но ако напишем

if (5==0)==False:
нещо си

винаги това нещо ще се изпълни, защото 5==0 винаги е грешно. Това се нарича буленова логика, има смисъл нали? 5 НЕ Е 0 никога!!!

Ако напишете:

if 0:
нещо си

също нямад а се изпълни това нещо, защото 0 е грешно, но ако напишете:


if 0==False:

тук вече ще получите отговор вярно(True)

нулата е грешна? това вече не е особено логично, но карай, логиката не е основата на нашата вселена, погледнете MTV за доказателство.

Продължаваме със следващата конструкция while. Ето как изглежда:

while not bored:
not kill kittens
else:
kill kittens

чете се докато не е скучно, не убивай котета, ако това не е вярно, убивай котенца(повтарям, не скучайте, защото умират котета)

Тук е почти същото, имаме буленов израз който се проверява и се изпълнява нещо, след като се изпълни се проверява отново дали изразът е правилен, и ако е се изпълнява отново, ако не е се изпълнява else-а, а ако няма такъв се прекратява изпълнението на цикълът. Ето един по практичен пример:

x=0
while x != 5:
x=x+1
print x
else:
print "x is now 5"

Тук имаме операторът за неравенство != който е обратен на == и означава 'не е равно на'
Това връща следния резултат:

1
2
3
4
5
x is now 5

Виждате ли каква мощ имате сега императоре? Вместо да пишете нещо от рода на:

x=0
print x
x=1
print x
x=2
print x
x=3
print x
x=4
print x
x=5
print x
print 'x is now 5'

може да напишете този малък цикъл и да не се занимавате с глупости. Това е красота, а горното е ГРОЗНО!!!Дори изглежда грозно на вид Ъгфхх!!!

Сега да видим какво ни остава от днешния списък със задачки. for цикълът!! Да!! любимия ми! Ето как изглежда той

for x in [1,2,3,4,5]:
print x

чете се за всяко х във списъкът [1,2,3,4,5] принтирай х, при всяко преминаване на цикълът, х ще приема някоя стойност от списъкът, първия път е 1, втория 2 и т.н. до края на списъкът, това работи и с редици и низове и общо взето всички последователности.

Вече имате малко мощ, и знаете малко повече за синтаксисът. Не навлизах в дълбочина в темите които разглеждахме до сега. Не знаете много за низовете, нто за списъците, нито за речниците, нито за буленовите типове, нито за if-овете, нито за while-овете, нито за for-овете. НО знаете достатъчно за сега. Медитирайте над всичко това, от утре ще преобразуваме начина ви на мислене, защото ще разглеждаме функциите. Ще видите магии, и ще видите как тези магии изчезват и вие започвате да разбирате магьосническите ми номера. ще видите мистерии и решения. ще видите чудеса и ще видите че светът и властта която ви дадох днес не са вчичко, а има и скрита мъдрост в езикът и словото, която трябва да се намери.

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