Python Programlama Dilinin Kullanıldığı Alanlar

 

Her geçen gün kullanıcısı artan Python programlama dilinin, bu kadar çok tercih edilmesinin başında öğrenimi ve kullanımının kolay olması gelse de, birçok alanda kullanılabilen bir programlama dili olmasının da bu durumdaki etkisi yadsınamaz bir gerçektir. Bu nedenle bizlerde bu bölümde çokça tercih edilen ve sevilen bu programlama dilinin kullanıldığı bazı alanları sizler için derledik. Keyifli okumalar...

Python Programlama Dilinin Kullanıldığı Bazı Alanlar

  1. Veri Bilimi ve Veri Analizi
  2. Yapay Zeka ve Makine Öğrenmesi
  3. Web Programlama
  4. Robotik
  5. Görüntü İşleme
  6. Oyun Geliştirme
  7. Konsol Uygulamaları
  8. Bilimsel Hesaplamalar
  9. Ağ ve Socket Programcılığı

Veri Bilimi ve Veri Analizi

Veri Bilimi ve Veri Analizi gibi konular söz konusu olduğunda, tartışmasız ilk akla gelen programlama dillerinden bir tanesi de Python programlama dilidir. Bu alanda kullanılan NumPy, Pandas vb. kütüphaneleri sayesinde kullanıcılarına Veri Bilimi ve Veri Analizi gibi konularda büyük kolaylıklar sağlamaktadır. Analiz edilen verileri Matplotlib, Seaborn gibi kütüphaneleri ile görselleştirme imkanı da tanıyan bu programlama dili, bu alan için biçilmiş kaftan niteliğinde.

Yapay Zeka ve Makine Öğrenmesi

Bir önceki kullanım alanı ile büyük benzerlikler gösteren bu alanda da, yine Python programlama dili kullanım açısından ilk akla gelenlerden. Yapay Zeka ve Makine Öğrenimi alanlarının her geçen gün ilgilisinin artması ve bu alandaki büyük gelişmeler, Python programlama dilinin de neden bu kadar çok tercih edildiğinin ispatı niteliğindedir. TensorFlow, Keras ve PyTorch gibi kütüphaneleri sayesinde Yapay Zeka ve Makine Öğrenimi ile ilgilenen kullanıcılarına, işlemlerini rahatlıkla gerçekleştirebilmeleri için büyük kolaylıklar sağlamaktadır.

Web Programlama

Python programlama dilinin son zamanlarda kullanıldığı popüler kullanım alanlarından bir tanesi de hiç şüphesiz Web Programlama alanıdır. Özellikle bu alan için geliştirilen Django ve Flask gibi frameworkleri sayesinde, bu alanda da bir süredir tercih edilen bir programlama dili haline gelmiştir.

Oyun Geliştirme

Python programlama dili sayesinde bulmaca oyunları, macera oyunları gibi çeşitli oyunları geliştirmeniz mümkündür. Pygame kütüphanesi ise bu alan için sık tercih edilen Python kütüphanelerinden bir tanesidir.

Share:

PYTHON FONKSİYONLAR

 Bir önceki bölümde tuple veri yapısını görmüş örnekler üzerinden incelemiştik. Bu bölümde ise python programlamada sıkça kullanılan fonksiyonlar konusuna geçiş yapacağız.

Fonksiyonlar; belirli bir isme sahip ve program içerisinde de bu isim ile kullanılan, içerisine parametre alabilen, aldıkları parametre neticesinde bir sonuç döndüren, program içerisinde birden çok yerde kullanılacak işlem adımlarını içerisinde toplayıp istenilen yerde sadece fonksiyonun ismi ile çağırılarak o işlem adımlarının gerçekleştirilmesini sağlayan yapılardır. Bu yapıları sayesinde program içerisinde kod karmaşası ve aynı işlemlerin tekrar tekrar yazılması derdinden bizleri kurtarmaktadırlar. Şimdi bir örnek ile fonksiyon nasıl oluşturulur ve kullanım amacı nedir bunu anlamaya çalışalım.


KOD ÇIKTISI:


Örneğimizde kullanıcıdan aldığımız iki sayıyı çarpan bir program yaptık. Bunu bir fonksiyon içerisinde gerçekleştirdik. Fonksiyonumuza "carpma" ismini verdik ve içerisine iki parametre (sayi1 ve sayi2) alacağını belirttik. Daha sonra program içerisinde nerede bu fonksiyon içerisindeki işlemlere ihtiyacımız varsa orada fonksiyonu ismi ile "carpma(sayi1,sayi2)" şeklinde çağırmış olduk. 

Fonksiyonlar büyük bir program içerisinde farklı yerlerde defalarca kullanılacak işlemler için programcıya büyük kolaylık sağlamaktadır. Çünkü programcı, bu tekrarlanacak işlem adımlarını program içerisinde nerelerde ihtiyaç duyuyorsa tekrar tekrar yazmak yerine tek bir fonksiyon tanımlayıp ihtiyaç duyduğu yerde sadece bu fonksiyonu çağırarak işlemleri rahatlıkla gerçekleştirebilmektedir.

Fonksiyonlar yukarıdaki örnekte olduğu gibi içerisine parametre almak zorunda değildirler. Parametre almayan fonksiyonlar da oluşturulabilmektedir. Bir örnekle bunu da görelim.


KOD ÇIKTISI:


Örneğimizde de görüldüğü üzere fonksiyon içerisinde parametre vermeden de fonksiyon oluşturulup program içerisinde çağırılarak kullanılabilmektedir.

Son olarak fonksiyonlarda çok sık kullanılan bir özellikten daha bahsedelim. Fonksiyonlar "return" komutu sayesinde bir sonuç döndürebilmekte ve bu sonucun program içerisinde başka bir yerde kullanılmasını sağlayabilmektedir. Return kullanılmadan bir fonksiyon çalıştırıldığında içerisindeki işlemleri gerçekleştirir ve fonksiyonun görevi tamamlanmış olur. Fakat return komutu kullanıldığında fonksiyon içerisindeki bir işlemin sonucu fonksiyon dışında da kullanılabilir bir hale gelmektedir. Bunu da bir örnek ile görelim.


KOD ÇIKTISI:


Örneğimizde bu sefer diğerlerinden farklı olarak çarpma işleminin sonucunu fonksiyon dışında yazdırmak istedik. İşlem sonucunu fonksiyon dışında yazdırmak için fonksiyon içindeki çarpma işlemi sonucuna fonksiyon dışında da kullanmaya ihtiyacımız vardır. Bunun için fonksiyon işlem sonucunu return komutunu kullanarak fonksiyon dışında kullanılabilir hale getirdik ve işlem sonucunu fonksiyon dışında yazdırmış olduk. Eğer return ile işlem sonucunu döndürmeseydik o zaman print() fonksiyonu içerisinde carpma() fonksiyonumuzu çağırdığımızda bize "None" sonucu dönmüş olacaktı. Fakat return komutunu kullandığımız için böyle bir durumla karşılaşmadık. 

Sizde programlarınızda farklı yerlerde farklı parametrelerle gerçekleştirmeniz gereken işlemler olduğunda bir fonksiyon oluşturup bu fonksiyon içerisinde işlemlerinizi tanımlayıp daha sonra gereken yerlerde oluşturmuş olduğunuz fonksiyonu çağırarak işlemlerinizi kolaylıkla gerçekleştirebilirsiniz. İyi çalışmalar.

Share:

PYTHON TUPLE VERİ YAPISI

 Bir önceki bölümde sözlükler konusunu görmüştük. Bu bölümde ise tuple konusuna geçiş yapacağız ve tuple veri yapısını detayları ile birlikte göreceğiz.

Tuple; string, integer, liste, sözlükler vs gibi bir veri yapısıdır. İçerisinde birden fazla veri barındırabilmektedir. Liste veri yapısına çok benzemektedir. Fakat listeler kadar esnek değildir. Şimdi bir örnek ile tuple nasıl oluşturulur bunu görelim.


KOD ÇIKTISI:


Örneğimizde "my_tuple" isminde bir tuple oluşturduk ve elemanlarını console ekranına yazdırdık. 

Tuple nasıl oluşturuluyor bunu öğrendiğimize göre şimdi de tupleların ne gibi özelliklere sahip olduğunu görelim ve ardından bir örnekle bu özellikleri de incelemiş olalım.

Tuple Özellikleri

  • Tupleların verileri değiştirilemez.
  • Tuple elemanlarına yenileri eklenemez ve çıkarılamaz.
  • Döngüler tuplelarda listelerden daha hızlı çalışırlar.
  • "len()" metodu ile tuple eleman sayısına ulaşılabilir.
  • del komutu ile tuple tamamen silinebilir
  • "count()" metodu ile tupledaki bir elemanın tuple içerisinde kaç kere tekrar ettiği öğrenilebilir.
  • "index()" metodu ile tupledaki bir verinin ilk olarak hangi indexte bulunduğu öğrenilebilir.
Tuple ile neler yapıp neler yapamayacağımızı öğrendiğimize göre bu özellikleri bir örnekle görerek daha iyi anlamaya çalışalım.


KOD ÇIKTISI:


Örneğimizde sırası ile tuple elemanlarına erişim, tuple elemanlarını sıralama, tuple eleman sayısını öğrenme, tupleda bir elemanın kaç defa tekrar ettiğini bulma, tuple içindeki bir elemanın index' ine ulaşma ve son olarak tuple' ı tamamen silme işlemlerini gerçekleştirdik.

Sizde programlarınızda bu veri yapısını kullanacaksanız bu özellikleri oluşturmuş olduğunuz tuplelar üzerinde kolayca kullanabilirsiniz. İyi çalışmalar.

Share:

PYTHON SÖZLÜKLER

 Bir önceki bölümde dosyalar konusunu görmüştük. Bu bölümde ise sözlükler konusuna geçiş yapacağız ve sözlük nedir, nasıl oluşturulur, özellikleri nelerdir bunları göreceğiz.

Sözlükler de yapı olarak listelere benzemektedir. Fakat sözlüklerde listelerden farklı olarak elemanlar "anahtar - değer" ilişkisi ile oluşturulup sözlük içerisinde bu ilişki ile tutulurlar. Burada yazdığımız değerler farklı veri türlerinde olabilir ve hatta tekrarlanabilirler, fakat anahtarlar kesinlikle benzersiz olmalıdır. Şimdi örneklerle sözlük nasıl oluşturulur ve özellikleri nelerdir bunları görelim.


KOD ÇIKTISI:


Örneğimizde "sozluk" isminde boş bir sözlük oluşturduk ve sonrasında içerisine sırası ile 3 adet elemanı ekledik.

Şimdi de içerisi dolu bir sözlük oluşturarak bu sözlük üzerinden sözlüklerle ne gibi işlemler gerçekleştirilebiliyor bunları görelim.


KOD ÇIKTISI:


Örneğimizde birden fazla işlemi aynı anda gerçekleştirmiş bulunmaktayız. Bu işlemler sırası ile; sözlükteki anahtarlara ulaşım, sözlük anahtarlarını sıralama, sözlükteki değerleri alma, sözlükteki elemanları alma, sözlükten eleman arama ve bulunamadığı taktirde bununla ilgili mesaj verme ve son olarak sözlükten eleman silme işlemleri gerçekleştirilmiştir. 

Görüldüğü üzere sözlüklerle ilgili olarak birçok işlem gerçekleştirilebilmektedir. Sizde programlarınızda oluşturacağınız sözlüklerde bu işlemlerden ihtiyaç duyduklarınızı örneklerde gösterildiği şekliyle rahatlıkla kullanabilirsiniz. İyi çalışmalar.

Share:

PYTHON DOSYALAR

 Bir önceki bölümde Python' da listeler konusunu görmüş, listelerin çok sık kullanılan özellikleri ile örnekler gerçekleştirmiş ve konuyu bitirmiştik. Bu bölümde ise dosyalar konusu ile yeni bir konuya geçmiş olacağız.

Dosyalar verilerimizi kalıcı olarak saklamamızı sağlayan yapılardır. "open()" işlevi ile bir dosya açılır ve yapılacak işlemler belirlenir. Yazımı şu şekildir:

dosya değişkeni = open("dosya adı veya dosya dizini", "dosyaya erişme türü")

Bununla ilgili bir örnek vermeden önce dosyaya hangi türlerde erişim sağlayabiliyoruz bunları görelim.

r: Salt okuma kipi

w: Yazma kipi

a: Sonuna ekleme kipi

b: ikili(binary) kip

t: Salt metin kipi(ön tanımlı)

+: Dosya güncelleme kipi (hem okuma hem yazma)

Bu kiplerden en çok kullanılanları r, w ve a kipleridir. Şimdi bizde bir örnekle bu kiplerden birini kullanarak dosya oluşturalım.


Örneğimizde "yenidosya.txt" isimli bir dosyayı yazma kipi ile açmış olduk. Bu kiple bir dosyayı açtığımızda dosya içerisine bir şeyler yazabiliriz. Ve ayrıca şunu da yeri gelmişken belirtelim ki dosyalarda işlem gerçekleştirdikten sonra mutlaka dosyaları "close()" metodu ile kapatmamız gerekmektedir. Şimdi oluşturduğumuz dosyaya bir şeyler yazalım ve ardından dosyayı kapatma işlemini gerçekleştirelim.


KOD ÇIKTISI:


Gördüğünüz gibi oluşturduğumuz dosyaya "write()" komutu ile yazma işlemini gerçekleştirmiş olduk ve ardından close() metodu ile dosyayı kapatmış olduk.

"Peki dosyamızın içindeki verileri okumak istediğimizde ne yapacağız?" diye soracak olursanız bunu da hemen cevaplayalım. Dosyayı okuma modu ile açıp daha sonra içerisindeki verileri "read()", "readline()" veya "readlines()" metotlarından birini kullanarak okuma işlemini gerçekleştireceğiz. Bunu da bir örnek ile inceleyelim.


KOD ÇIKTISI:


Örneğimizde "yenidosya.txt" isimli dosyamızı bu sefer "r" modu ile açıp ardından read() metodu ile içerisindeki verileri okumuş bulunmaktayız. Yukarıda bahsettiğimiz gibi okuma işlemi readline() ve readlines() metotları ile de gerçekleştirilebilmektedir. Aralarındaki fark ise şudur: read() komutu dosyanın tamamını okur ve bize karakter dizisi olarak sonuç getirir. Readline() komutu ise dosyayı satır satır okumamızı sağlar. Son olarak readlines() komutu ise tüm dosyayı okur, fakat sonuç olarak karakter dizisi değil liste döndürür. 

Son olarak yine çok kullanılan "a" kipi ile de bir örnek gerçekleştirelim ve dosyalar konusunu da tamamlamış olalım.


KOD ÇIKTISI:


Örneğimizde dosyamızı bu sefer "a" kipi ile açmış olduk ve ardından write() metodu ile dosya sonundan başlayarak yazma işlemini gerçekleştirdik. Burada şunu belirtelim ki dosyayı w kipi ile açmış olsa idik daha önceden yazmış olduğumuz veriler silinir ve en baştan veri girişi gerçekleştirmiş olurduk. "w" kipi ile "a" kipi arasındaki fark budur. Yani bir dosyaya ilk defa veri giriş yapacaksak w modu ile açabiliriz, fakat içerisi dolu bir dosyaya veri girişi yapacaksak o zaman a modu ile açmamız gerekmektedir. Aksi taktirde önceden yazmış olduğumuz verileri kaybetmiş oluruz.

Python' da dosyalama işlemleri genel hatları ile bu şekildedir. Sizde çeşitli örneklerle bu bölümde gördüğünüz özellikleri ve diğer özellikleri oluşturacağınız dosyalar üzerinde deneyerek gözlemleyebilirsiniz. İyi çalışmalar.

Share:

PYTHON LİSTELER - 2

 Bir önceki bölümde listeler konusuna giriş yapmıştık. Bu bölümde ise listelerin özellikleri nelerdir, ne gibi kullanımları mevcuttur, bunları görerek listeler konusunu da tamamlamış olacağız.

LİSTELERİN ÖZELLİKLERİ

1. Liste elemanları indekslere sahiptir. Bu indeksler sıfırdan başlayarak ilerler. Aynı zamanda listenin tersinden başlayarak da indekslenebilirler. Bu durumda ise indeksler -1' den başlamaktadır.  


KOD ÇIKTISI:


Örneğimizde liste elemanlarını indeks kullanarak çağırdık ve sıfırıncı indekste "Python", -2. indekste ise "C++" elemanları yer aldığı için console ekranına bu elemanlar yazıldı.

2. Python' da boş liste oluşturmak ve ardından bu listeye elemanlar eklemek mümkündür. Aynı zamanda içerisinde eleman bulunan listelere de yeni elemanlar eklenebilmektedir. Yani yeni eleman ekleyebilmek için listenin boş olması şartı yoktur. Eklenen yeni elemanlar listenin sonundan eklenmektedir.


KOD ÇIKTISI:


Bu örneğimizde de boş bir liste oluşturduk ve daha sonra "append()" fonksiyonu ile listemize elemanlar ekledik. Program çıktısında da görüldüğü üzere listemiz öncesinde boş iken, daha sonra eklediğimiz elemanlarla içerisi doldurulmuştur.

3. Uzun bir listeye sahipsek ve bu listenin eleman sayısını öğrenmek istiyorsak bunun için "len()" fonksiyonunu kullanabiliriz ve kolaylıkla listenin eleman sayısına ulaşabiliriz.


KOD ÇIKTISI:


Az önce oluşturmuş olduğumuz listenin eleman sayısı program çıktısında da görüldüğü üzere len() fonksiyonu sayesinde 2 olarak console ekranına yazılmıştır.

4. Listelere eleman eklenebildiği gibi eleman da çıkarılabilmektedir. Yine bu çıkarma işlemi liste sonundan gerçekleştirilir.


KOD ÇIKTISI:


Append() komutu ile eleman eklediğimiz listeden örnekte de görüldüğü üzere "pop()" fonksiyonu ile eleman çıkardık ve son olarak listede bir adet elemanımız kaldı.

5. Listelerde son elemanı değil de istediğimiz elemanı çıkarmak istiyorsak bunun için "remove()" fonksiyonunu kullanırız.


KOD ÇIKTISI:


Örneğimizde de görüldüğü üzere listenin ilk elemanını remove() fonksiyonu ile listeden çıkarmış olduk.

6. Liste elemanları içerisinde bir veriden kaç adet bulunduğunu öğrenebilmek için "count()" fonksiyonu kullanılmaktadır.


KOD ÇIKTISI:


Örneğimizde count() fonksiyonu ile "su" elemanının listede kaç adet bulunduğunu öğrenmiş olduk.

7. Listelerde indeks kullanarak elemanlara erişebildiğimiz gibi, elemanlarla aratarak indekslere de erişebilmemiz mümkündür. Fakat burada dikkat edilmesi gereken konu, arattığımız elemanın listedeki ilk konumunu bize getirmesidir. Yani arattığımız eleman listede birden fazla kez bulunuyorsa o zaman listenin başından itibaren ulaşılan ilk indeksini bize sonuç olarak döndürür.


KOD ÇIKTISI:


"Index()" fonksiyonu ile "su" elemanını arattığımızda listede üç adet su elemanı olmasına rağmen sonuç olarak bize listedeki ilk konumu olan sıfırı sonuç olarak döndürdü.

8. Oluşturmuş olduğumuz bir listenin elemanlarının sırasını tersine çevirmekte mümkündür. Bunun için "reverse()" fonksiyonu kullanılır.


KOD ÇIKTISI:


Program çıktısında da görüldüğü üzere reverse() fonksiyonu sayesinde liste elemanları tersten sıralanmış oldular.

9. Listemiz sıralı değilse ve sıralamaya ihtiyaç duyuyorsak o zaman "sort()" veya "sorted()" fonksiyonlarını kullanabiliriz. Aralarındaki fark şudur; sorted() fonksiyonu kalıcı bir değişiklik yapmaz, fakat sort() kalıcı bir işlem gerçekleştirir.


KOD ÇIKTISI:


Örneğimizde de görüldüğü üzere sorted() fonksiyonu kullanıldıktan sonra liste tekrar listelendiğinde herhangi bir değişiklik olmadığı görülmüştür. Fakat sort() fonksiyonu ile sıralandığında liste elemanları eski sıralarına dönmemiş sıralı olarak gelmiştir.

10. Append() fonksiyonu ile listeye sondan eleman eklenebildiğini görmüştük. Eğer listeye istediğimiz yerden eleman eklemek istiyorsak bunun için "insert()" fonksiyonunu kullanmamız gerekmektedir.


KOD ÇIKTISI:


Örneğimizde insert() fonksiyonu ile 1. indeks alanına maden suyu elemanını eklemiş olduk.

11. Birden fazla listeye sahipsek ve bu listeleri birleştirmemiz gerekiyorsa o zaman "extend()" fonksiyonunu kullanarak bu işlemi kolaylıkla gerçekleştirebiliriz.


KOD ÇIKTISI:


Örneğimizde 2 adet listemiz mevcut ve ikinci listeyi birinci liste ile extend() fonksiyonu kullanarak birleştirmiş olduk.

12. Listeleri indeks numaralarını kullanarak çağırabildiğimizi görmüştük. Aynı yöntemle listenin istediğimiz bir parçasını da çağırmamız mümkündür. Bunun için "liste adı[parçanın başlangıç indeksi : bitiş indeksi]" yazımı kullanılmaktadır.


KOD ÇIKTISI:


Örneğimizde 1' den 3' e kadar olan verileri almak istedik ve bize 1. ve 2. indeks numaralarına sahip veriler sonuç olarak geldi. 

13. Son olarak şunu da belirtelim ki liste içerisinde liste oluşturmak da mümkündür. Böyle listelere "iç içe listeler" denir. Şu şekilde oluşturulmaktadır.


KOD ÇIKTISI:


Görüldüğü üzere icecekler listesi içerisinde bir liste daha oluşturmuş olduk.

Python' da görüldüğü gibi listelerle birçok işlem gerçekleştirilebilmektedir. Sizde listelerinizde hangi işlemleri gerçekleştirmeye ihtiyacınız varsa yukarıdaki fonksiyonları kullanarak rahatlıkla gerçekleştirebilirsiniz. İyi çalışmalar.

Share:

PYTHON LİSTELER - 1

 Bir önceki bölümde for döngüsünü görmüş ve döngüler konusunu da tamamlamıştık. Bu bölümde ise listeler konusuna giriş yapacağız ve çeşitli örneklerle listeler nasıl oluşturulur, nasıl kullanılır gibi sorulara cevaplar arayacağız.

Listeler, daha önce de görmüş olduğumuz integer, string, float gibi içerisinde veri barındırma özelliğine sahip bir veri tipidir. Diğer veri tiplerinden farklı olarak içerisinde birden fazla veriyi barındırabilme özelliğine sahiptir. Bu veri tipini günlük hayatta da birçok sebeple sıklıkla oluşturduğumuz listelere benzetebiliriz. Yapılacaklar listesi, alınacaklar listesi gibi günlük hayatta oluşturduğumuz bu listeleri Python programlama dilinde listeler veri tipi ile oluşturabiliriz. Bir örnek üzerinden bu veri tipi nasıl oluşturulur, bunu görelim.


KOD ÇIKTISI:


Örneğimizde meyveler isminde bir liste oluşturup içerisine de meyve isimlerini listeledik. Ardından print() komutu ile de console ekranına yazdırmış olduk. Örnekte de görüldüğü üzere listeler, liste isminden sonra eşittir ifadesi konularak ve daha sonra köşeli parantezler içerisinde virgülle liste elemanlarını sıralayarak oluşturulmaktadır.

Listeler içerisinde aynı türde veriler kullanma zorunluluğumuz bulunmamaktadır. Yukarıdaki örnekte stringlerden oluşan bir liste oluşturduk, fakat içerisinde hem string hem integer hem float veri barındıran listeler de oluşturmak mümkündür.


KOD ÇIKTISI:


Bu örneğimizde de içerisinde string, integer ve float veri barındıran bir liste oluşturmuş olduk. 

Bir önceki bölümde öğrendiğimiz for döngüsü sayesinde liste içerisindeki elemanlara sırası ile ulaşmamız da mümkündür. Bu durumu da bir örnek ile inceleyelim.


KOD ÇIKTISI:


İlk örneğimizde oluşturduğumuz meyveler listesinin elemanlarını for döngüsü kullanarak console ekranına yazdırdık. Bunun için meyve isminde bir değişken oluşturduk ve in komutu ile meyveler listesinin elemanlarını meyve değişkenine sırası ile aldık. Daha sonra döngü içerisinde de aldığımız liste elemanlarını print() komutu ile console ekranına yazdırmış olduk.

Bu bölümde listenin ne olduğu, nasıl oluşturulduğu ve elemanlarına nasıl ulaşıldığını görmüş olduk. Bir sonraki bölümde de listelerin özelliklerinden bahsedip listeler konusunu da tamamlamış olacağız. İyi çalışmalar.

Share: