sorted() funksiyası

   sorted() funksiyası verilmiş ardıcıllığı (sətir, siyahı, kortej və s.) çeşidləyərək yeni bir siyahı qaytarır.

Funksiyanın sintaksisi aşağıdakı kimidir:

sorted(iterable, key=None, reverse=False)

   Burada iterable verilmiş ardıcıllıqdır, sətir, siyahı, kortej və s. tipdə ola bilər. İkinci parametr olan key isə ardıcıllığın elementlərinə çeşidlənmədən öncə tətbiq edilən funksiyadır. Default qiyməti None olaraq təyin edilib, bu halda çeşidlənmə bir-başa olaraq aparılır. Sonuncu parametr reverse isə çeşidlənmənin artan (False) yoxsa azalan (True) olduğunu göstərir, default olaraq False götürülür.

Aşağıda sorted() funksiyasının istifadəsi ilə bağlı nümunələr verilmişdir:

>>> s = "abracadabra"
>>> z = sorted(s)
>>> print(z)
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
>>>
>>> a = [1, 10, 2, 20, 3, 30]
>>> b = sorted(a)
>>> print(b)
[1, 2, 3, 10, 20, 30]
>>>
>>> vow_lets = ('e', 'a', 'i', 'u', 'y', 'o')
>>> ascending_order = sorted(vow_lets)
>>> vow_lets = ('e', 'a', 'i', 'u', 'y', 'o')
>>> asc_ord = sorted(vow_lets)
>>> des_ord = sorted(vow_lets, reverse = True)
>>> print("Ascending order:", asc_ord)
Ascending order: ['a', 'e', 'i', 'o', 'u', 'y']
>>> print("Descending order:", des_ord)
Descending order: ['y', 'u', 'o', 'i', 'e', 'a']
>>>
>>> m = ["alma", "banan", "portağal", "ananas"]
>>> print(sorted(m))
['alma', 'ananas', 'banan', 'portağal']
>>> print(sorted(m, key = len))
['alma', 'banan', 'ananas', 'portağal']
>>>

   Son nümunədə m siyahısının çeşidlənməsi iki şəkildə — birbaşa və elementlərin uzunluğuna (len funksiyası tətbiq edilərək, key = len) görə aparılır.

İkilik say sistemindən onluq say sisteminə keçid

   Nəzərinizə çatdıraq ki, əslində Python proqramlaşdırma dilində ikilik say sistemində verilmiş ədədin onluq say sisteminə çevrilməsi üçün iki parametrli int(x, b) funksiyasından istifadə etmək mümkündür. Burada x digər say sistemində (indiki halda ikilik) olan ədəddir və dırnaq arasında göstərilməlidir. İkinci parametr olan b isə verilmiş ədədin hansı say sistemində (indiki halda 2) olduğunu bildirmək üçündür:

>>> int("1001", 2)
9
>>> int("1011", 2)
11
>>>

  Bu dərsimizdə sözügedən çevrilmənin alqoritmini nəzərdən keçirəcəyik.

   Gəlin nümunə kimi 1001 ikilik ədədini onluq ədədə çevirək. Bildiyiniz kimi ikilik ədədin onluq ədədə çevrilməsi riyazi olaraq aşağıdakı qayda üzrə aparılır:

binary_to_decimal

   Əvvəlcə 1001 ikilik ədədinin sağdan başlayaraq üzərinə 0, 1, 2, 3 nömrələrini yazırıq. Sonra isə rəqəmləri 2-nin uyğun qüvvətinə vurub toplayırıq.

Python dilində bu alqoritm aşağıdakı kimi alınacaq:

n = input()
k = len(n)
s = 0

for i in range(k): 
    s = s + int(n[i])*2**(k-i-1)

print(s)

Proqram icrasının nümunələri:

10101001
169
11011010
218

Zəncirli cib saatı

   Ələsgərin babasından yadigar zəncirli cib saatı var. Bu saat hər saatın tamamında saatın göstəricisinə uyğun olaraq zəng çalır. Məsələn, saat 5-də beş dəfə, saat 10-da on dəfə zəng çalır. Hər saatın yarısında isə 1 dəfə zəng çalır.

zencirli_cib_saati

   Bir təqvim günü içində başlanğıc və son vaxtı bilməklə bu zaman aralığında ümumi zənglərin sayını hesablayan proqram tərtib edin.

Giriş verilənlərinin formatı

  Tək sətirdə başlanğıc və son vaxt verilir. Vaxtlar boşluqla ayrılmış saat (h) və dəqiqə (m) (0H23, 0M59) formatında verilir.

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

   Zənglərin sayını tək sətirdə vermək lazımdır.

Nümunə
Giriş verilənləri Çıxış verilənləri

13 30 15 10

7

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

pocket_watch

Cəbiş müəllimin sabunları

   Uzunuzadı dilətutmalardan sonra xanımı Cəbiş müəllimi sabun bişirməyə razı sala bildi. Amma Cəbiş müəllim ortaya belə bir şərt qoydu. Sabunlar üç cür qablaşdırmada satılacaq. İçində 100 sabun olan paketin qiyməti 100 manat, 20 sabun olanın qiyməti 30 manat və 1 sabun isə manatdan satılacaq.

soap

   Sizcə n ədəd belə sabun almaq üçün ən azı nə qədər pul sərf etmək lazımdır?

Giriş verilənlərinin formatı

  Tək sətirdə sabunların sayı olan n ədədi ədədi verilir.

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

   Tələb olunan ən az məbləği tək sətirdə vermək lazımdır.

Nümunələr
Giriş verilənləri Çıxış verilənləri

25
123
77

40
136
100

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

cebis_muellim

Web Proqramlaşdırma Nədir

  Proqramlaşdırmanın müxtəlif sahələri vardır. Bunlardan biri də web-layihələrin işlənməsi üçün nəzərdə tutulan web proqramlaşdırmadır. Hər gün daxil olduğumuz müxtəlif web-saytlar web proqramçılar tərəfindən işlənib hazırlanır.

Internet Concept

   WebsiteHostingRating.com saytının 1 Yanvar 2020-ci il tarixinə olan məlumatına görə dünyada 1,744,517,326 web-sayt vardır. Və bu say günbəgün deyil saatbasaat artır. Təbii ki, web-saytlara qoyulan tələblər də yüksəlir. Əgər əvvəllər istifadəçilərin ehtiyacını bəsit statik saytlar qarşılayırdısa, indi onların yerini daha mürəkkəb dinamik saytlar tutur.

Statik və dinamik saytlar

   Statik saytlar dəyişməyən səhifələrdən ibarətdir. İstifadəçilər öz brauzerlərindən belə saytları tələb etdikdə server hazır HTML-sənəd təqdim edir. Adətən belə saytlar hansısa  şəxsin və ya məhsulun tanıtımı, texniki dokumentasiyanın təqdimatı üçün tərtib olunurlar. Günümüzdə az da olsa statik saytlara rast gəlmək mümkündür.

   Dinamik saytlar isə dəyişən səhifələrdən ibarətdir. Belə səhifələr serverdə hazır şəkildə saxlanmırlar, istifadəçilərin sorğu və tələblərinə uyğun olaraq hər dəfə yenidən tərtib olunurlar. Daha funksional olan dinamik saytlara nümunə kimi internet-mağazalar, elan saytları, forumlar, istifadəçi kontentinə əsaslanan saytları göstərə bilərik.

İstifadə olunan texnologiyalar

   Web proqramlaşdırma skriptlər adlandırılan xüsusi proqram vasitələrinin hazırlanması ilə həyata keçirilir. Bu proqram vasitələri serverkliyent olmaq üzərə iki əsas növə ayrılır. Server skriptləri server tərəfində, yəni saytın yerləşdiyi kompüterdə icra olunur. Bu skriptlərin icrası sayt istifadəçinin kompüterinə yüklənmədən öncə baş verir. Kliyent skriptləri isə sayt yükləndikdən sonra istifadəçinin kompüterində icra olunur. Dinamik saytlarda həm kliyent, həm də server skriptlərindən istifadə olunur.

Web_Development

   Skriptlərin hazırlanması üçün istifadə olunan proqramlaşdırma dilləri də skriptlərin növündən asılı olaraq dəyişir. Bəzi proqramlaşdırma dilləri server skriptləri, bəziləri də kliyent skriptlərinin hazırlanması üçün nəzərdə tutulmuşdur.

   Kliyent dilləri kimi JavaScript, VBScript, SilverLight, Flash və s. kimi dillər istifadə olunur. Bunlara əlavə olaraq JavaScript dilinin freymvork, kitabxana və genişləmələrini (AngularJS, JQuery, jQuery Mobile, Node.js, Bootstrap, TypeScript, AJAX) də göstərmək olar. Server dilləri olaraq da PHP, Perl, Python, Ruby, ASP.NET, Java, Groovy, və JavaScript dilləri istifadə olunur. Server dilləriylə çalışarkən əsas məqamlardan biri də VBİS (Verilənlər Bazasının İdarəetmə Sistemi) ilə bilavasitə qarşılıqlı əlaqənin təmin edilməsidir. Web-layihələrdə ən çox istifadə olunan VBİS-lər kimi MySQL, PostgreSQL, Oracle, SQLiteMicrosoft SQL Server‘i qeyd etmək olar.

Web-Proqramçılar

   Sadə dildə desək web-proqramçı web proqramlaşdırma sahəsində fəaliyyət göstərən mütəxəssisdir. Onun əsas vəzifəsi keyfiyyətli və funksional saytlar hazırlamaqdan ibarətdir. Web-proqramçı həmçinin verilənlərin saxlanması və saytların təhlükəsizliyindən də məsuliyyət daşıyır.

Web-proqramçılar üç tipə bölünürlər:

  1. Front-End Developerlər web-layihələrin istifadəçi tərəfinin işlənməsi ilə məşğul olurlar. Onların işi web-dizaynerlərdən dizayn həllərinin təhvil alınmasıyla başlayır. Front-endçilərin vəzifəsinə saytın maketinin qurulması, interfeys elementlərinin hazırlanması kimi öhdəliklər daxildir.
  2. Back-End Developerlər web-layihələrin server tərəfinin işlənməsi ilə məşğul olurlar. Onların vəzifəsinə saytın ümumi iş prinsipi və məntiqinin işlənib hazırlanması, front-end developerlərin yazdıqları kodun server tərəflə inteqrasiyası, kontentin idarə olunması, saytın təhlükəsizliyin təmin edilməsi kimi öhdəliklər daxildir. Back-endçilər həmçinin front-end və mobil tətbiq developerləri tərəfindən istifadə olunan web xidmətlər və API’lərin hazırlanması ilə də məşğul olurlar.
  3. Full-Stack Developerlər isə həm front-endçilərin, həm də back-endçilərin gördükləri işi yerinə yetirəbilən web-proqramçılardır.

   Son olaraq qeyd etmək lazımdır ki, web proqramlaşdırma daim inkişaf edən sahədir. Və burada rəqabət də olduqca güclüdür. Tələb olunan web-proqramçı olmaq üçün texnoloji yenilikləri izləməli, bilik və bacarıqlarınızı sistemli olaraq yeniləməlisiniz.

Siyahı generatorları

   Öncəliklə qeyd edək ki, generatorlar ilə siyahı generatorları ayrı-ayrı şeylərdir. Generatorlar funksiyalar mövzusundan sizə tanış gəlməlidir. Belə ki, generatorlar hər iterasiya zamanı müəyyən qiyməti qaytaran funksiyalardır. İndi haqqında bəhs edəcəyimiz siyahı generatorları isə müəyyən qaydalar əsasında qiymətlərlə doldurulmuş siyahılar düzəldən xüsusi sintaksik konstruksiyalardır.

   Siyahı generatorlarının üstünlüyü siyahıları əldə etmək üçün çox qısa koddan istifadə etməsindən ibarətdir. Adi qaydada siyahıların düzəldilməsi nisbətən daha çox kod yazılmasını tələb edir.

Siyahı generatorunun sintaksisi aşağıdakı kimidir:

[ifadə for element in ardıcıllıq/kolleksiya]

   Burada element istifadə olunan dəyişəndir, ardıcıllıq (sətir, siyahı və kortej) və ya kolleksiya (çoxluq və lüğət) elementi götürdüyümüz yerdir, ifadə isə element üzərində aparılan əməliyyatdır.

   Gəlin bir neçə nümunələri nəzərdən keçirək. Aşağıdakı proqram elementləri 1-dən 10-a qədər ədədlərdən ibarət olan siyahı düzəldir:

>>> m = [i for i in range(1, 11)]
>>> print(m)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>

   Siyahı generatorundan istifadə etmədən də bu məsələni həll etmək olardı. Lakin bu zaman daha çox kod yazmaq lazım gələcəkdi:

>>> m = []
>>> for i in range(1, 11):
	m.append(i)

	
>>> print(m)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>

   Aşağıdakı proqram elementləri 1-dən 10-a qədər ədədlərin kvadratlarından ibarət olan siyahı düzəldir:

>>> m = [i ** 2 for i in range(1, 11)]
>>> print(m)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>>

   Siyahı generatoruna şərt də əlavə etmək olar:

>>> num = [1, 4, 3, 17, 8, 9, 22, 6, 13]
>>> m = [i for i in num if i % 2 == 0]
>>> print(m)
[4, 8, 22, 6]
>>>

   Siyahı generatorundakı parametr ifadədə istifadə olunmaya da bilər. Məsələn aşağıdakı nümunədə siyahı 10 təsadüfi ədəddən düzəldilir:

>>> from random import randint
>>> m = [randint(10, 20) for i in range(10)]
>>> print(m)
[20, 11, 16, 14, 16, 17, 18, 11, 11, 12]
>>>

   Siyahı generatorundan istifadə etməklə siyahını klaviaturdan daxil edilən sətirlərlə də düzəltmək olar. Bunun üçün öncə sətirlərin sayını daxil etməlisiniz:

n = int(input())
m = [input() for i in range(n)]

   Siyahı generatorunda kolleksiya kimi lüğət (dict) tipindən də istifadə edə bilərsiniz:

>>> a = {1:10, 2:20, 3:30}
>>> b = [i*a[i] for i in a]
>>> print(b)
[10, 40, 90]
>>>

   Siyahı generatorundan istifadə etməklə iç-içə siyahılar da əldə etmək mümkündür:

>>> m = [[i,i**2,i**3] for i in range(2,10,2)]
>>> print(m)
[[2, 4, 8], [4, 16, 64], [6, 36, 216], [8, 64, 512]]
>>>

   Siyahı generatorunda iç-içə for konstruksiyasından istifadə etmək mümkündür. Bu cür istifadə verilmiş iç-içə siyahıdan bir səviyyəli siyahı əldə etmədə faydalı ola bilər:

>>> a = [[1,10], [2,20], [3,30]]
>>> b = [j for i in a for j in i]
>>> print(b)
[1, 10, 2, 20, 3, 30]
>>>

   Siyahı generatorundan istifadə etməklə fayldan oxunan sətrlərdən də siyahı düzəltmək mümkündür:

f = open("text.txt","r")
lines = [line.strip() for line in f]
f.close()
print(lines)

map() funksiyası

   map() funksiyası verilmiş funksiyanı verilmiş ardıcıllığın (siyahı, kortej və s.) hər bir elementinə tətbiq edir və nəticəni map obyekti (ardıcıllıq) olaraq qaytarır.

   Funksiyanın sintaksisi aşağıdakı kimidir:

map(func, iter)

   Burada func tətbiq edilən funksiyadır, iter isə func funksiyasının tətbiq ediləcəyi ardıcıllıqdır.

Qeyd: map() funksiyasının qaytardığı nəticəni daha sonra list() və set() kimi funksiyalara ötürmək mümkündür.

   Aşağıda map() funksiyasının istifadəsi ilə bağlı nümunələr verilmişdir:

>>> float_numbers = [1.2, 3.7, 5.8]
>>> result = map(int, numbers)
>>> print(list(result))
[1, 3, 5]
>>>
def calculateSquare(n):
    return n*n

numbers = (1, 2, 3, 4)
result = map(calculateSquare, numbers)

numbersSquare = set(result)
print(numbersSquare)

Yuxarıdakı nəticəni map() funksiyasını lambda ifadə ilə istifadə etməklə də əldə etmək olardı:

numbers = (1, 2, 3, 4)
result = map(lambda x: x * x, numbers)

numbersSquare = set(result)
print(numbersSquare)

 

Ədədin sadə vuruqlara ayrılması

   Ədədin sadə vuruqlara ayrılması alqoritmi ədədin sadəliyinin yoxlanılması alqoritminə bənzəyir. Verilmiş n ədədinin ardıcıl şəkildə 2-dən başlayaraq natural ədədlərə bölünməsini yoxlayacağıq. Əgər natural ədəd olan i verilmiş n ədədini qalıqsız bölürsə, onda həmin natural ədədi sadə vuruqlar siyahısına əlavə edəcəyik. Bölünmənin nəticəsini isə n dəyişəninə mənimsədəcəyik. Bölünmə qalıqsız davam etdiyi müddətcə i bölənini sabit saxlayacağıq, qalıq alındıqda onu bir vahid artıracağıq.

   Alqoritmi √n olana qədər davam etdirmək lazımdır. Əgər sonda n ədədi 1-ə bərabər olmazsa, deməli o sadə ədəddir.  Çünki kvadrat kökündən böyük olmayan heç bir ədədə bölünmür. Odur ki, onu da sadə vuruqlar siyahısına əlavə etmək lazımdır.

n = int(input())

m = []
i = 2

while i * i <= n:     
    if n % i == 0:         
        m.append(i)         
        n = n // i     
    else:         
        i+=1 

if n > 1:
    m.append(n)

for i in m:
    print(i, end=" ")

Proqram icrasının nümunələri:

130
2 5 13
270
2 3 3 3 5

 

Dəniz quldurları

   Bildiyiniz kimi orta əsrlərdə dəniz quldurları okean və dənizlərdə at oynadırdılar. Qarşılarına çıxan hər ticarət gəmisi içindəkilərlə bir yerdə onların qurbanlarına çevrilirdi. Amma törətdikləri cinayətlərinə rəğmən onlar öz aralarında çox ədalətli idilər. Eləcə də bir-birlərinə qarşı böyük-kiçik yeri bilirdilər.

pirates

   Gəlin dəniz quldurlarını daha yaxından tanımaq üçün onlara aid bir məsələni həll edək. Günlərin bir günü dəniz quldurları böyük bir xəzinə tapırlar. Qərara gəlirlər ki, zinət əşyalarını satıb gəminin ehtiyaclarını ödəsinlər, qızıl sikkələri isə öz aralarında bölüşdürsünlər.

   Gəmidə n sayda dəniz qulduru var, tapdıqları xəzinədə də m sayda qızıl sikkə var. Dəniz quldurları qızıl sikkələrin bölgüsünü öz quldur ranqlarına görə aparırlar. Belə ki, onlar dərəcələrinə uyğun olaraq sıraya düzülür və hərə öz payını alır. Bu zaman ən kiçik quldur a sikkə, hər sonrakı quldur özündən əvvəlki yoldaşından bir sikkə artıq götürür. Sonda isə kapitan öz payını götürür və ondan sonra sikkə qalmır. Kapitana hər zaman planlaşdırıldığından iki dəfə artıq sikkə çatır. Buna heç kim etiraz etmir, çünki qaydalara görə kapitanın belə bir imtiyazı vardır.

   Əgər am məlumdursa, kapitanla birlikdə gəmidə neçə quldur olduğunu tapmalısınız. Komandasız kapitan adi quldurdur, ona görə n > 1 olacaq.

Giriş verilənlərinin formatı

  Tək sətirdə iki natural am (1 ≤ a ≤ 100, m < 15150) ədədləri verilir. Bütün giriş verilənlərinin düzgünlüyünə zəmanət verilir.

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

   Quldurların sayı olan n ədədini tək sətirdə vermək lazımdır.

Nümunə
Giriş verilənləri Çıxış verilənləri

2 25

3

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

pirates_code

Mənbə: https://www.e-olymp.com

 

Qan qrupları

   Bildiyiniz kimi insanlarda 4 qan qrupu vardır. Bunlar O (I qrup), A (II qrup), B (III qrup) və AB (IV) olaraq işarə edilir. Ömür boyu dəyişməz qalan qan qrupları valideynlərdən yeni nəslə irsən verilir. Qan qrupları ilə birlikdə qanın rezus (Rh, Rhesus) amili də vardır. İnsanların 85%-də rezus-amil müsbət, 15%-də isə mənfi olur.

blood_groups

   Qan itirmə hallarında və bir sıra xəstəliklərdə insana qan köçürülməsi lazım gəlir. Bu zaman aşağıdakı qaydalara riayyət olunmalıdır:

  • O (I) qrupu yalnız O (I) qrupundan qan qəbul edə bilər, lakin hamı üçün universal donordur.
  • A (II) qan qrupu A (II) və O (I) qrupundan qan ala bilər, A (II) və AB (IV) qrupları üçün donor ola bilər.
  • B (III) qrupu B (III) və O (I) qrupundan qan qəbul edir, habelə B (III) və AB (IV) qrupları üçün donor ola bilər.
  • AB (IV) qan qrupu digər bütün qan qruplarından qan alır, ancaq öz qrupundan olana donor ola bilər.

   Sizdən verilmiş qan qrupuna görə hansı qruplara donor və hansı qruplardan qan alına biləcəyini müəyyən etmək tələb olunur. Proqramı özünüz tərtib etməyə çalışın. Əgər alınmasa, aşağıdakı həll ilə tanış olun.

blood_groups_program