Sadə riyazi əməllər

   Python dilində sadə riyazi əməlləri həyata keçirən hesab operatorları aşağıdakı cədvəldə verilmişdir:

Operator Təyinatı
+ soldakı operandla sağdakı operandı cəmləyir (a+b) 
soldakı operanddan sağdakı operandı çıxır (a-b) 
* soldakı və sağdakı operandı bir-birinə vurur (a*b)
/ soldakı operandı sağdakı operanda bölür (a/b) 
// soldakı operandı sağdakı operanda tam bölür (a//b)
% soldakı operandı sağdakı operanda qalıqlı bölür (a%b)
** soldakı operandı sağdakı operand dəfə qüvvətə yüksəldir (a**b)
abs(a) verilmiş a ədədinin modulunu hesablayır

   İndi isə gəlin bu operatorları nümunələr üzərində nəzərdən keçirək:

>>> a=5
>>> b=2
>>> c=a+b
>>> print("Cəm=",c)
Cəm=7
>>> c=a-b
>>> print("Fərq=",c)
Fərq=3
>>> c=a*b
>>> print("Hasil=",c)
Hasil=10
>>> c=a/b
>>> print("Qismət=",c)
Qismət=2.5
>>> c=a//b
>>> print("Tam hissə=",c)
Tam hissə=2
>>> c=a%b
>>> print("Qalıq=",c)
Qalıq=1
>>> c=a**b
>>> print("Qüvvət=",c)
Qüvvət=25
>>> a=-5
>>> abs(a)
5
>>>

    Bu proqramda fərqli ədədlərdən istifadə edərək eyni əməlləri bir daha sınaqdan keçirin. 

   Riyazi operatorlardan başqa Python dilinin math modulunda bir sıra riyazi funksiyalar da nəzərdə tutulmuşdur.

Tiplərin müəyyən edilməsi

   Bildiyiniz kimi proqramlarda istifadə edilən qiymət və dəyişənlər hökmən bir tipə aid olmalıdır. Bəzən bu verilənlərin hansı tipə mənsub olduğunu öyrənmək lazım gəlir. 

  Bunun üçün type() funksiyasından istifadə olunur:

>>> type("Salam Azərbaycan")
<class 'str'> 
>>> paytaxt = "Bakı"
>>> type(paytaxt) 
<class 'str'> 
>>> n = 9600000 
>>> type(n) 
<class 'int'> 
>>> n = 86.6 
>>> type(n) 
<class 'float'> 
>>>

   Gəlin nümunələri incələyək. Əvvəlcə biz “Salam Azərbaycan” qiymətinin tipini soruşduq. Növbəti sətirdə ekrana bu tipin str (sətir) olduğu haqda məlumat çıxdı. Sonra biz paytaxt dəyişəninə “Bakı” qiymətini mənimsətdik və bu dəyişənin tipini soruşduq. Məlum oldu ki, paytaxt dəyişəni də str tipindədir. Daha sonra biz n dəyişəninə 9600000 qiymətini verib onun tipini müəyyən etdik. Ekrana çıxan məlumatdan gördük ki, n dəyişəni int (tam ədəd) tipindədir. Və nəhayət ən sonda biz həmin n dəyişəninə bu dəfə 86.6 qiymətini mənimsətdik və tipini soruşduq. Bu dəfə məlum oldu ki, n dəyişəni öz tipini dəyişərək indi də float (həqiqi ədəd) tipinə mənsub olub. Bu ona görə baş verdi ki, n dəyişəninə ikinci dəfə qiymət olaraq həqiqi ədəd mənimsətmişdik. 

Çox danışan vəzir

   Qədim əyyamlarda Xoşbəxtlər adlı bir ölkə var idi. Ölkənin adı ona görə belə adlandırılmışdı ki, burada yaşayan hər bir kəs içtimai statusundan asılı olmayaraq öz fikir və düşüncələrini rahat şəkildə ifadə edə bilirdi.

Screen Shot 2018-12-31 at 02.36.52

   Bu rahatlıq da insanlara özlərini xoşbəxt hiss etməyə imkan verirdi. Çünki hər söylənən fikir və təklif, eləcə də irad və şikayət dövləti idarə edən məmurlar tərəfindən hər zaman diqqətə alınırdı. Hətta padşahın özü gününün üçdə ikisini vətəndaşları qəbul edib dinləmək üçün ayırırdı. Dövlət də beləcə günü-gündən inkişaf edir və çiçəklənirdi.

   Bu fikir və düşüncə azadlığı saray daxilində də hökmran idi. Padşahın vəzir vəkilləri də dövlətin idarə olunmasında öz təklif və təşəbbüslərini sərbəst şəkildə irəli sürürdülər. Bu məsələdə sarayın baş vəziri xüsusilə seçilirdi. Baş vəzir hər zaman ağıllı təkliflərlə çıxış edərdi. Amma onun bir mənfi cəhəti var idi ki, yaman çox danışardı və öz nitqində bəzən çox qısa, bəzən də çox uzun əndrəbadi sözlərdən istifadə edərdi. Baş vəzirin bu cəhəti təmkinli padşahı qətiyyən narahat etməzdi. Hətta padşaha vəzirinin bu uzun nitqləri əyləncəli gəlməyə başlamışdı. Hər dəfə baş vəzirin çıxışından sonra padşah öz-özünə belə sual verərdi: “Görəsən baş vəzirin bu nitqində söylədiyi ən uzun və ən qısa söz hansıdır?”. Amma vəzir hər dəfə o qədər uzun danışırdı ki, padşah bu sualının cavabını tapa bilmirdi.

   Günlərin bir günü padşah sarayın proqramçısı Famili hüzuruna çağırır və baş vəzirin öz nitqində səsləndirdiyi ən uzun və ən qısa sözləri müəyyən edən proqram tərtib etməsini əmr edir. Hə, bu arada unutmadan qeyd edək ki, vəzirin bütün nitqləri sarayın katibi tərəfindən qələmə alınırdı. Proqramçı ondan tələb olunan proqramı yazır. Onun alqoritminə baxmadan öncə bu proqramı özünüz tərtib etməyə çalışın.

   Giriş verilənlərinə nümunə:

Zülm ilə abad olanın aqibəti bərbad olar

   Çıxış verilənlərinə nümunə:

aqibəti ilə

   Bu da Familin proqramı:

Screen Shot 2018-12-31 at 02.38.21

Rezerv sözlər

   Hər bir proqramlaşdırma dilində olduğu kimi Python dilində də xüsusi təyinatlı sözlər mövcuddur.  Bu cür sözlər dilin operatorları, proqram bölmələri və digər elementləri rolunda çıxış edir və rezerv sözlər (bəzən də açar sözlər) adlanırlar. Rezerv sözləri əzbərləməyə ehtiyac yoxdur əlbəttə ki. Sadəcə məlumatınız olsun yetər.

False  class finally is return
None continue for lambda try
True  def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise

Qeyd: Dəyişənlərə ad verərkən rezerv sözlərdən istifadəyə yol verilmir.

Dəyişənlərin adlandırılması

   Bildiyiniz kimi, dəyişənlərdən proqramlaşdırmada geniş surətdə istifadə olunur. Proqramçı kimi bu dəyişənlərə ad verməkdə sərbəstsiniz. Lakin müəyyən tövsiyyələrə əməl edib bir neçə məhdudiyyətlərə də riayət etməlisiniz. 

Bunlar aşağıdakılardır:

  • Dəyişənlərə mənalı adlar vermək daha yaxşıdır; 
  • Dəyişənlərə ad verilərkən mütləq latın əlifbasının hərflərindən istifadə olunmalıdır;
  • Dəyişənlərin adları ixtiyari uzunluqda ola bilər, lakin qısa adlardan istifadə etmək məsləhətdir;
  • Dəyişənlərin adları rəqəm ilə başlaya bilməz, lakin ortada və sonda rəqəm istifadə oluna bilər; (məs. point1, p2p)
  • Dəyişənlərin adları  _ (altxətt) simvolu ilə başlaya bilər; (məs. _order)
  • Dəyişənlərin adları bir neçə sözdən ibarət ola bilməz, sözləri ayırmaq üçün _ (altxətt) simvolundan istifadə olunmalıdır; (məs. my_book, day_of_week və s.)
  • Dəyişənlərə ad verilərkən rezerv sözlərdən (proqramlaşdırma dilinin xüsusi təyinatlı sözləri) istifadə oluna bilməz;
  • Python proqramlaşdırma dilində dəyişənlərin adında böyük və kiçik hərflərin fərqi var (məs. msgMsg ayrı-ayrı dəyişənlər hesab olunur).

Olimpiada iştirakçılarının sayı

   Məlum olduğu kimi, qədim yunan alimi Pifaqor neçə şagirdinin olması sualına belə cavab vermişdi: “Şagirdlərimin yarısı riyaziyyatı öyrənir, dörddə biri təbiəti öyrənir, yeddidə biri vaxtını susub düşünməklə keçirir, qalan hissəsi isə 3 qızdır”.

1BNuFElBu8CE1z6O6

   Olimpiadanın məsul katibi “İnformatika üzrə olimpiadada neçə iştirakçı qeydiyyatdan keçib?” sualına Pifaqor kimi belə cavab verdi: “İştirakçıların k-cı hissəsi birinci, m-ci hissəsi ikinci, n-ci hissəsi isə üçüncü məsələni həll etməyə başlayıb. Eyni zamanda d sayda iştirakçı ”Nədən başlamalı?” problemini həll edir. Sizin vəzifəniz olimpiada iştirakçılarının s sayını müəyyənləşdirmək və ya məsul katib səhv edibsə, çıxışa -1 verməkdir.

Giriş verilənlərinin formatı

   Bir sətirdə aralarında boşluq simvolu olmaqla knmd (1 ≤ knmd ≤ 1000) ədədləri verilir.

Çıxış verilənlərinin formatı

   Çıxışa olimpiada iştirakçılarının s sayı və ya katib öz məlumatında səhv edibsə, 1 verilir.

Nümunə

2 4 7 3 

28

   Proqramı özünüz tərtib etməyə çalışın. Əgər alınmasa, aşağıdakı həll ilə tanış olun:

Screen Shot 2018-12-29 at 01.01.55

Mənbə: http://informatika.edu.az

Generatorlar

   Generatorlar hər iterasiya (təkrarlanan əməliyyat) zamanı müəyyən bir qiyməti qaytaran funksiyalardır. Proqramlaşdırmada generatorlara təmbəl iteratorlar da deyilir. Belə ki, generatorlar yalnız onlardan tələb olunduğu zaman qiymət qaytarırlar. Adi funksiyalardan fərqli olaraq generatorlar qiyməti yield açar sözü ilə qaytarırlar. Generatorlarda funksiyadan çıxış nöqtəsi (daxili dəyişənlərin cari qiymətləri) yadda saxlanılır və növbəti müraciət zamanı funksiyanın işi qaldığı yerdən davam edir.

   Gəlin tələb olunan sayda Fibonaçi ədədlərini əldə etmək üçün generator funksiyadan istifadə edək. Riyaziyyatdan da bildiyiniz kimi ilk iki Fibonaççi ədədləri 0 və 1-dir. Sonra gələn ədəd özündən əvvəlki ilk iki qonşusunun cəminə bərabərdir: 0, 1, 1, 2, 3, 5, 8, 13… Bəzi mənbələrdə sıranın ilk ədədi 0 yox, 1 götürülür.

def fibonacci(n):
    fib1, fib2 = 0, 1
    print('Generasiya başladı...')
    for i in range(n):
        fib1, fib2 = fib2, fib1+fib2
        yield fib1
    print(end='\n')	
    print('Generasiya sona çatdı.')

for fib in fibonacci(10):
    print(fib, end=' ')

    Proqramı incələyək. Əvvəlcə fibonacci() adlı generator təyin edilir. Daha sonra sayğaclı dövrdə dövr ardıcıllığı kimi bu generatordan arqument (10) göndərilərək istifadə edilir. Gördüyünüz kimi dövrdə hər dəfə fibonacci() generator funksiyasına müraciət olunur. Və hər müraciətin nəticəsində generator bir qiymət qaytarır. Generatora ilk müraciətdə əvvəlcə ekrana Generasiya başladı məlumatı çıxarılır. Diqqət yetirin ki, bu sətir yalnız bir dəfə çap olunur. Generatorun daxilində sayğaclı dövr qurularaq Fibonaçi ədədi tapılır və yield açar sözü ilə qiymət olaraq qaytarılır. Burada yield operatorunun istifadəsi generator funksiyanın işində pauza verir və daxili dəyişənlərin (i, fib1, fib2) cari qiymətləri yadda saxlanılır. Bununla da generatorun qaytardığı ilk qiyməti (1) proqramdakı sayğaclı dövrün idarəetmə dəyişəni olan fib qəbul edir və ekranda çapa verilir. Biz burada print() funksiyasında end=’  parametrindən istifadə edirik. Bunu ona görə edirik ki, növbəti Fibonaçi ədədi eyni sətirdə çıxsın. İlk Fibonaçi ədədi ekrana çıxdıqdan sonra dövrdə yenidən fibonacci() generatoruna müraciət olunur və generator öz işinə qaldığı yerdən davam edir. Proses bu minvalla o vaxta qədər davam edir ki, generator daxilindəki sayğaclı dövrün i parametri sonuncu qiymətini (9) almış olsun. Bundan sonra proqramdakı dövrdə yenidən generatora müraciət edildiyi zaman (generator daxilindəki sayğaclı dövr öz işini yekunlaşdırdığına görə) kursor növbəti sətrə keçirilir və ekrana Generasiya sona çatdı məlumatı çıxarılır.

Generasiya başladı...
1 1 2 3 5 8 13 21 34 55 
Generasiya sona çatdı.

Python ilə yazılmış 10 ən məşhur sayt

  Python proqramlaşdırma dilinin universal bir dil olması onu gündən günə daha da populyar edir. Xüsusilə də veb layihələrin hazırlanmasında Python dili əvəzsiz rola malikdir. Bu məqaləmizdə Python ilə yazılmış 10 ən məşhur saytdan bəhs edəcəyik.

Top10PythonApp

Google
Bu gün dünyanın 1 nömrəli axtarış motoru olan Google‘u tanımayan yoxdur. Amma çox adam bilir ki, Google’un gücünə güc qatan məhz Python’dur. Həm axtarış motoru, həm də onun əlavə tətbiqləri Python dilinin hesabına ərsəyə gəlmişdir.

YouTube
Alexa reytinqinə görə dünyada ikinci ən məşhur sayt YouTube‘dur. Necə məşhur olmasın ki, Python ilə yazılan bu video paylaşım saytına hər dəqiqə 400 saatlıq video yüklənir, gün ərzində izlənən videoların müddəti isə artıq bir milyard saatı keçib. Yenə  Python, yenə uğur!

Quora
Bilgi toplamağın ən asan yolu sual verməkdir. Sual verməyin ən uyğun yeri də Quora‘dır. Bu Quora elə bir məkandır ki, insanlar burada suallarını verir, başqaları onları cavablandırır və Quora’nın üzvləri də bütün bunları düzənləyir. Python ilə yazılan bu saytın bu gün 100 milyondan çox istifadəçisi vardır.

DropBox
Xatırlayırsızsa, vaxt var idi, hansısa qeyd və məlumatları bloknota yazar, cibimizə qoyardıq. Kompüterlər həyatımıza daxil olandan sonra bu bloknotları əvvəlcə CD/DVD-lər, sonra da fleş disklər əvəz etdilər. Günümüzdə isə sonunculardan da imtina edib bulud yaddaşlardan istifadə etməyə başladıq. Bulud texnologiyasına əsaslanan DropBox xidməti fayllarımızı yadda saxlamağa, onları digər insanlarla paylaşmağa və dünyanın istənilən yerindən və istənilən cihazdan bu məlumatlara giriş əldə etməyə imkan verir. DropBox da Python ilə yazıldığına görə qürur duyur!

Yahoo!
Google’un ən böyük rəqibi Yahoo! da özünün əsas proqram təminatlarını Python dilində işləyib hazırlamışdır. Xüsusilə də pulsuz kartoqrafiya xidməti olan Yahoo! Maps xəritələri var olmalarını Python dilinə borcludur. Yahoo Maps lokasiyaları tapmaq, istiqamətləri təyin etmək, məkanlar haqda məlumat vermək və s. kimi funksional imkanlara malikdir.

Reddit
Sualınız var, nəyisə müzakirə etmək, ya da maraqlı bir xəbəri paylaşmaq istəyirsiniz? O zaman Reddit tam Sizə görədir. Reddit’i qısa şəkildə sosial xəbər saytı da adlandırmaq olar. İnternet dünyasının ən geniş açıq icmalarından biri sayılan Reddit də Python ilə yazılıb.

Instagram
Şəkil və videoları paylaşmaq heç bu qədər əyləncəli olmamışdır. Yəgin ki, söhbətin Instagram‘dan getdiyini anladınız. Şəkli çək, xüsusi effektlər ver və paylaş. Dostların da gəlsin, bəyənsin və rəy yazsın. 2010-cu ildən şəkil və video paylaşım sosial şəbəkəsi kimi fəaliyyət göstərən Instagram da Python ilə ərsəyə gətirilmişdir.

Spotify
Musiqi striminqi (audio-axını) olan Spotify xidmətindən bu gün dünyanın 80-ə yaxın ölkəsində istifadə edirlər. Spotify bəyəndiyiniz musiqi parçalarını kompüter və ya mobil qurğunuza endirmədən dinləməyə imkan verən platformadır. Belə bir xidmətin meydana gəlməsi Python dilinin hesabına mümkün olmuşdur.

Survey Monkey
Onlayn sorğu deyəndə ilk ağla gələn Survey Monkey portalıdır. Survey Monkey ilə istədiyiniz anketləri hazırlayıb geniş kütlələlərə çatdıra bilərsiniz. Hazırda bu portalın 25 milyon istifadəçisi vardır. Survey Monkey bu istifadəçilərə gün ərzində 20 milyon suala cavab tapmaqda kömək edir. Bu uğurlu layihə də Python dili ilə hazırlanmışdır.

Hipmunk
Əgər Siz səyahət etməyi sevirsinizsə, yəgin ki, Booking, Expedia, Kayak kimi saytların xidmətindən çox istifadə etmisiniz. Bu kimi saytlar bizə ucuz bilet və hotel tapmaqda çox kömək edir. Səyahətimizi planlayarkən adətən bir neçə belə sayta müraciət etməli oluruq, sonra da ən münasib variantın üzərində dayanırıq. Hipmunk isə bizi bu əziyyətdən xilas edir. Hipmunk bilet, hotel, avto-kirayə təqdim edən nə qədər sayt varsa, hamısını ələk-vələk edirək bizə ən ucuz qiymətləri tapıb təqdim edir. Vaxtımıza və pulumuza qənaət etdirən Hipmunk da Python ilə yazılmışdır.

Fatmanisənin sandığı

   İndiki gənclər bilməz, amma əvvəllər qızlar gəlin köçərkən əsas cehiz əşyası kimi sandıq aparardılar. Daha doğrusu qızın adına alınan cehizlik əşyalar həmin sandığa yığılardı. Xüsusi sənətkarlar tərəfindən müxtəlif ölçüdə hazırlanan sandıqların səthi zərif həndəsi və nəbati naxışlarla bəzədilərdi.

table-antique-old-store-metal-box-1059885-pxhere.com

   Bu sandıqların içinə bəzək şeyləri, qiymətli əşyalar, bir-birindən gözəl libaslar yerləşdirilərdi. Qız ərə veriləndə bəyin qohumlarına vermək üçün sandığa hədiyyələr də qoyulardı. Ər evində bu sandıq artıq o evin xanımına məxsus bir əşyaya çevrilirdi. Gəlin ana olduqdan sonra öz qızı və ya oğlu üçün aldığı nişan və cehizlik əşyalarını buraya yığır və beləcə sandıq nəsildən – nəslə ötürülürdü. Ehh, nə gözəl əyyamlar var idi…

   Fatmanisə də gənc və gözəl bir qız idi. Artıq elçilər qapıya dayanmışdı. Amma atası hələ tələsmirdi. Qızının təhsilini tamamlaması bu ailə üçün əhəmiyyətli bir məsələ idi. Nəhayət Fatmanisə məzun oldu və evlilik təkliflərini dəyərləndirməyə başladı. Bu ağıllı qız namizədləri bir-bir nəzərdən keçirdi. Onun üçün əsas şərtlər qarşı tərəfdə əxlaq, ağıl və anlayış idi. Fatmanisə bu kriteriyalara uyğun gələn üç nəfərin üzərində durdu. Seçim etmək onun üçün çox çətin idi. Hətta seçimini püşk atmaqla etməyi düşünməyə başlamışdı.

  Günlərin bir günü yenə dərin düşüncələrə qərq olarkən birdən onun gözünə cehizlik sandığı sataşdı. Fatmanisənin ağlına anidən belə bir ideya gəldi. Gənc qız ona aşiq olan bu üç gəncdən birini belə bir yolla seçməyi qərara aldı:

   Fatmanisənin sandığı a × b × c ölçüsündədir. Bu sandığı namizəd bəylərdən hansının evindəki x × y ölçülü əsas qapıdan keçirmək mümkün olarsa, Fatmanisə ona ərə gedəcək.

Giriş verilənlərinin formatı

   Tək sətirdə abcxy (1 ≤ abcxy ≤ 100) tam ədədləri verilir.

Çıxış verilənlərinin formatı

   Sandığı qapıdan keçirmək mümkündürsə, çıxışa , əks halda YOX verin.

Nümunə

2 4 7 3

28

   Fatmanisəyə bir yaxşılıq edin və seçim edə bilməsi üçün tələb olunan proqramı tərtib edin. Əgər alınmasa, aşağıdakı həll ilə tanış olun:

Screen Shot 2018-12-21 at 00.14.03

   Qeyd: Burada tərs bölmə (\) simvolu uzun ifadələri sətrlərə bölmək üçün istifadə olunmuşdur.

İç-içə dövrlər

   Dövri alqoritmlərdə bir çox hallarda iç-içə dövrlərdən istifadə olunur. Dövrün içində dövr məntiqini anlamaq üçün iki misalı nəzərdən keçirəcəyik.

Vurma cədvəli

Aşağıdakı proqram vurma cədvəlini ekrana çıxarır:

print("Vurma Cədvəli\n")
for i in range(1, 11):
    for j in range(1,11):
        print(i,'*',j,'=',i*j)
    print()

   Proqram kodundan da gördüyünüz kimi burada iç-içə iki sayğaclı dövr operatorundan istifadə edilir. Əvvəlcə xarici dövr (i parametrli) öz işinə başlayaraq ilk səfər icra olunur. Bu zaman bu dövrün gövdəsində yer alan daxili dövr (j paremetrli) 10 dəfə icra olunaraq öz işini yekunlaşdırır. Daha sonra boş sətir buraxmaq üçün print() funksiyası işə düşür və bununla da xarici dövr özünün növbəti addımına keçir. Proses bu minval ilə davam edir və xarici dövrün 10-cu icrasından sonra yekunlaşır.

Bir rəqəmliyə qədər cəm

   Gəlin belə bir maraqlı proqram tərtib edək. Verilmiş natural ədədin rəqəmlərini cəmləyək, alınan cəmin rəqəmlərini də cəmləyək, və bu prosesi tək rəqəmli ədəd alınana qədər davam etdirək. Məsələ aydın olsun deyə aşağıdakı nümunəyə nəzər yetirin:

534981479385 → 5 + 3 + 4 + 9 + 8 + 1 + 4 + 7 + 9 + 3 + 8 + 5 = 66
66 → 6 + 6 = 12
12 → 1 + 2 = 3

   Məsələnin həlli üçün aşağıdakı proqramı tərtib edə bilərik:

n = int(input())
s = 0

while n>9:
    while n>0:
        s = s + n % 10
        n = n // 10
    n = s
    s = 0

print(n)

   Proqramı incələsəniz görəcəksiniz ki, biz burada iç-içə iki şərtli dövr operatorundan istifadə etmişik. Daxili dövrdə ədəd (n) rəqəmlərinə ayrılır və cəmlənir (s). Daha sonra cəm yenidən ədədə mənimsədilir və sıfırlanır. Xarici dövrdə isə şərt kimi alınan ədədin 9-dan böyük olması götürülür. Beləliklə dövri əməliyyat yekun ədəd bir rəqəmli alınanadək davam etdirilir.

  Əslində Python proqramlaşdırma dilinin hazır funksiyalarından istifadə etməklə verilmiş məsələni aşağıdakı alqoritmlə daha qısa yoldan da həll etmək olar:

n = int(input())
while n>9:
    n = sum(map(int, str(n)))
print(n)

   Təbii ki, bu halda iç-içə dövrlərin istifadəsinə ehtiyac qalmır və bir dövrlə kifayətlənmək mümkün olur.