Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Python Öğreniyoruz

Başlatan muhittin_kaplan, 03 Haziran 2017, 01:50:30

muhittin_kaplan

Amac: Pythonda Temel işlemler yapmak için Bilgisayarı hazırlamak.

YORUMLAYICI: (Tamamını Okumadan İndirme/Kurma Yapmayınız)
Python projesinin çalışması ve üzerinde proje geliştirmek için Python yorumlayıcısının ve projenizde başvurduğunuz modüllerin yüklü olması gerekir. Python Yorumlayıcısının hali hazırda 2 çeşidi vardır . 2versiyon ve 3versiyon (birbirlerini desteklemeyebilirler).Biz 3.versiyonu kullanacağız. Yorumlayıcı diyorum çünkü Python Yorumlanan dildir. Derlenmez. Yorumlayıcıyı indirmek için https://www.python.org/
Malum olduğu üzere pythonda belirli işleri yapmak için Modül adı verilen dosyalar kullanılır bu modüller ile matematik işlemlerinden grafiklere, UI den scikit lere kadar oldukça fazla işlem yapabiliriz.ilk etapta Python yazı şekline aşina olmayı, ve basit math işlemleri yapmaya çalışacağız.

IDE:
Pythonda kullanabileceğimiz bir çok ücretli ücretsiz IDE bulunmaktadır. Python un kendi idesi IDLE adı verilen not defterinden hallice bir arayüzdür. (hiç kullanmadım) ben Pycharm kullanıyorum. JetBrains in bir IDE si (Android Studio da bunu kullanıyor ;) ).  indirmek için https://www.jetbrains.com/pycharm/
Beniz diğer kullandığım IDE ise spyder dır. https://github.com/spyder-ide
Farklı IDE kullanan arkadaşlarda vardır.

Şimdi gelelim işin eylemsel bölümüne , Anaconda;
Anaconda python yorumlayıcısını, bir çok modülü, birkaç IDE yi yükleyen bir paket olarak düşünebiliriz. (Bu modül işi biraz meşakkatli çünkü kullandığımız herhangi bir modülün başka hangi modüllerle ilişkisi olduğunu bilmeli ve ona göre tamamını yüklemeliyiz. Örneğin Grafik uygulamaları için kullanılan Matplotlib modülü için numpy modülü de gerekli. İşte bu sorunu Anaconda çözmüş gibi görünüyor (eksikleri var).)
Ben Anacondayı kurup çalışmaya başlıyorum (içerisinde SPYDER IDE de geliyor.) https://www.continuum.io/downloads sizde buradan yükleyebilirsiniz. Bu yükleyerek bir çok modülü ve python yorumlayıcısını yüklemiş olacaksınız. (Lütfen işletim sisteminize uygun Python 3.x versiyonunun yükleyiniz.)
Bu işlemi yaptıktan sonra PyCharm ı yükleyebilirsiniz.

Hadi Hayırlısı....


[Sorularınızı Diğer Başlıkta Alıyoruz]
https://www.picproje.org/index.php/topic,69824.msg536001.html#msg536001

muhittin_kaplan


muhittin_kaplan

#2
kodlar basit işlemleri kapsıyor. ama genelde kullanılanlar bunlar.
Anaconda ve pycharmı yükleyip  pycharm ide yi kullanarak Python da bunları çalıştırarak [sorular] diğer konuda konuşabiliriz.
mesaj="Merhaba Forum"

print   ("Mesajdaki Karakter Sayısı ",mesaj.__len__())
print   (mesaj," Bu Bir Python çalışmasıdır")
print   (mesaj[0:3])
print   (mesaj[:5])
print   (mesaj[5:])

for i in mesaj:
    print(i)

a=15
b=2

print   (a+b)
print   (a/b)
print   (a*b)
print   (b-a)
print   (abs(b-a))

a,b=b,a #swap

print(a,b)


dizi=[1,23,45,"Bu bir Dizi Elemanıdır"]

print ("dizi eleman sayısı ",dizi.__len__())
dizi.append(80)#diziye eleman ekle
print ("dizi eleman sayısı ",dizi.__len__())
print   (dizi)
print   (dizi[2:5])



tup=(1,4,8,9,2,"Bu bir Tuple Elemanıdır")#constant array
print   (tup)
print   (tup[2])

sozluk={'İstanbul' :'34' , 'Diyarbakır':'21' , 'Isparta':'32'}
print   (sozluk)
print   (sozluk['Diyarbakır'])

muhittin_kaplan

Pythonda diğer dillerde görmediğim (eksiklerim illaki vardır) ve bence fazlaca saçma olan indent metodu kullanılarak, kodların birbiriyle olan ilişkisi belirleniyor.
C programlama bilenler için, bu ilişki güzel parantezdir ( } ). basic dillerinde Sub_EndSub, if _else_endif ve benzerledir. Pythonda tab dır. Aşağıda bir örnek vereyim

C için
if a>15{
	printf("Zavazingo")	
 }


Basic için
if a>15 then
	print("Anarya")
endif
print('If Dışı')


Python için (doğru yazım)
if a>15:
	print("Bocit")
	print ("If İçi")
print('If Dışı')


Python için (yanlış yazım)
if a>15:
print("Helke")



Durum böyle olunca tab kullanmaya bir alışkın olmak lazım.

O zaman buradan devam edelim Python Akış Kontrol Komutları ve operatörler.

Önce Kontrol operatörleri verelim:
==   eşit
!=   eşit değil
>   büyük
>=   büyükeşit
<   küçük
<=   küçükeşit

if malum olduğu üzere koşul sorgulayabilidiğimiz komutumuzdur.

x=15
if x<21:
	print (x,':sayısı 21 den küçüktür')
else:
	print (x,':sayısı 21 den Büyüktür')

(burada print in kullanımına dikkat ediniz)


for ise bir işlemi birçok kez yapmamızı sağlayan kontrol komutumuzdur. Pythonda for deyimi ,diziler ile birlikte kullanılır,

örnek verelim (bu kullanım yöntemi oldukça başarılı bir yöntemdir.)

DiziDegerlerim=['ali','veli','49','50']
for i in DiziDegerlerim
	print (i)


range değimi ise kendisene verilen parametre kadar sıralı sayıdan oluşan bir dizi verir.

range(5)            deyimi [0,1,2,3,4]
range(5,10)   deyimi [5,6,7,8,9]

degerlerini verir.

Hal böyle olunca for için kullanılmak için biçilmiş kaftandır.

for i in range (15):
	print (i)
	
	if i>10:
		break



Sağlıcakla kalın.
'''

muhittin_kaplan

#4
Fonksiyonlar
Kendisine verilen parametrelerle yada bunlardan bağımsız olarak, belli bir iş için özelleştirilmiş programcık diye tanımlasak sanırım yanlış yapmış olmayız.
Pythonda fonksiyon kullanabiliriz. Fonksiyonlara parametre geçebiliriz. Dönüş değerleri alabiliriz.

hemen deneyelim.
def merhaba ():
   print("merhaba")

şeklinde tanımladığımız fonksiyonu
merhaba()


şeklinde çağırırız ve her çağırdığımızda çıktı olarak merhaba yazar. Yukarıdaki örnek parametresiz en basit fonksiyondur. Hemen parametre geçilmiş bir fonksiyon yazalım.
def yaz(yazilacakDeger):
   print (yazılacakDeger)
   print (type(yazılacakDeger))

yaz("Merhaba")


fonksiyonu çağırdığımızda
merhaba
<class 'str'>


şeklinde çıktı verir. Burada type fonksiyonu kendisine verilen parametrenin veri tipi ni döndürür. Çıktıdan anlaşıldığı üzere string veri türü parametre geçilmiştir.


def yaz(yazilacakDeger):
    print(yazilacakDeger)
    print(type(yazilacakDeger))

yaz(1919)



Fonksiyonunu  çağırdığımızda çıktısı aşağıdadır.
1919
<class 'int'>


parametre geçilmiş ve değer döndürebilen bir fonksiyonla devam edelim.
def islem(sayi1,sayi2):
    
    return (sayi1,sayi2,sayi1+sayi2)

sonuc=islem(1919,10)
print (sonuc)


yukarıdaki fonksiyon kendisine verilen iki değeri toplayıp, verilen sayıları ve toplamını döndürüyor. Dikkat ederseniz aynı anda birden fazla değeri döndürebiliyorsunuz.
Aşağıda ise kendisine bir listeyi parametre geçilen bir fonksiyon örneği verilmiştir.

def islem(sayi1):


    return (sayi1[0],sayi1[1],sayi1[0]+sayi1[1])

sayilar=[1919,10]
sonuc=islem(sayilar)
print (sonuc)


sayılar adında bir liste tanımladıktan sonra, bu listeyi fonksiyona parametre geçerek, listenin 0 ve 1 üyesini ve bunların toplamını döndüren fonksiyonu görüyorsunuz.

def islem(sayi1):
   return (sayi1[0],sayi1[1],sayi1[0]+sayi1[1])

sayilar=[1919,10]
sonuc=islem(sayilar)
print (sonuc)


peki döndürülen değerin tipi nedir ?

aşağıdaki örnekte de parametrelere varsayılan değer atanarak oluşturulmuş bir fonksiyon görülmektedir.
def yaz(sayi1=1919,sayi2=10):
    return (sayi1,sayi2,sayi1+sayi2)

print(yaz())


selamatle..

muhittin_kaplan

#5
Modüller:
Python un en güçlü özelliği bu olsa gerek. Hemen hemen her iş için birden fazla modül var. Buradanda anlaşılacağı üzere bir iş için birden fazla çözümde mevcut. yukarıdaki cümleyi örneklersek daha iyi olur kanısındayım,
Dosya açma işlemini in-built olarak yapabildiğimiz gibi PyQt ile de yapabiliriz, yada grafik çizme işlemini matplotlib modülü ile yada PyPlot kullanarak yapabiliri. Bu yazıda kısaca bu kütüphaneleri nasıl kullanacağımızı yazmaya çalışacağım. İlerleyen aşamalarda kendi modül dosyalarınızı (python program dosyasından farkı yoktur.) yazabilirsiniz.

import os


yukarıdaki kodda os (sistemle alakalı işlemleri yapabildiğimiz modül) modülünü projemize dahil ediyoruz. Peki bu modülde neler yapabiliyoruz, içerisindeki fonsksiyonlar nelerdir ? İsterseniz bunu math modülüyle yapalım.

import math

print(dir(math))


komutlarınız çalıştırdığımızda

['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']


şeklinde bir değer döndürür. Malum olduğu üzere fonksiyonlarda bunlardır. "__" şeklinde başlayan fonksiyonlar ise modül ile alakalı bilgiler verir. Hemen deneyelim.

import math

print(dir(math))
print(math.__name__)
print(math.__doc__)


komutlarıyla beraber,

['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
math
This module is always available.  It provides access to the
mathematical functions defined by the C standard.


şeklinde çıktı üretir.

Şimdiye kadar sadece "import ModuleName" şeklinde modülü dosyamıza dahil ettik. Sadece bir fonksiyonu dahil etmek isteseydik,

from math import sqrt


şeklinde yapmamız gerekirdi. Bu haliyle sadece sqrt fonksiyonunu kullanabilirsiniz.

from math import sqrt
print(sqrt(4))


(from math import * şeklinde tüm fonksiyonlarıda import edebilirsiniz.)


modüllere takma isimde atayabiliriz. Takma isme dikkat etmeliyiz, Başka bir fonksiyonu overload etmemesi gerekir.

from math import sqrt as karekok
print(karekok(4))


Paketler:

İçerisinde birden fazla modül barındıran kalsörlerdir. Birbirine yakın, birbiriyle ilintili olarak çalışan modülleri klasörde tutmak akıllıca bir davranıştır. Örneğin BenimModuller adında bir klasör ve bunun altında iki adet modülümüz olsun. ModulA.py  ve ModulB.py, bu klasörün bir Paket olduğunu belirtmek için "İÇİ BOŞ OLSA DAHİ" __init__.py adında bir dosyamızın olması gerektiğidir. (bu biraz tartışma götüren bir konu ben Python3 ile bu dosyayı kullanmadın Pkaet yaptım, bazı guru lar bunun Python2 nin bir hatası olduğunu söylerken bazıları bunun kullanılmasıl gerektiğini söylüyorlar.)

ModulA.py içeriğin
print ("Merhaba Forum")


ModulB.py içeriğin
import math
def Karakok(sayi):
	return (math.sqrt(sayi))



Yukarıdaki paketi in modüllerinden birini

import BenimModuller.modulA

şeklinde yada

from BanimModullerim import ModulA

Şeklinde dahil projeye dahil edebiliriz.

İçerisinde fonksiyon bulunan bir Pkatin içerisindeki modülü ise (Yukarıdaki örnekte ModulB)

import BanimModullerim.ModulB

print(BanimModullerim.ModulB.Karakok(15))


şeklinde çağırıp çalıştırabildiğimiz gibi

from BanimModullerim import ModulB
print(ModulB.Karakok(15))


şeklinde, Paket içerisindeki Modülde bulunan bir fonksiyonu dahil etmek için

from BanimModullerim.ModulB import Karakok
print(Karakok(15))


şeklinde dosyamıza/projemize dahil edebiliriz.

aşağıdaki linkte en çok kullanıldığı idda edilen python modülleri mevcut. (Sanırım dahili modüllerin haricinde)
http://pypi-ranking.info/alltime

Şurasıda çok Güzelmiş
https://pymotw.com/3/



selamatle...

muhittin_kaplan

#6
MODÜLLERDEN SEÇMELER:

Numpy ve SciPy:
   Numpy genel olarak dizi/vektör/matris hesaplamaları için özelleşmiş bir kütüphane olup, büyük çaptaki veri kümeleri üzerinden işlem yapmayı kolaylaştırır. Scipy ise bünyesinde, sık kullanılan matematiksel rutinleri ve fiziksel problemlerinin bilgisayar ortamında ifade edilmesine yönelik fonksiyonları barındırmaktadır(http://www.pythondersleri.com/2014/09/numpy-scipy.html)

Matplotlib:
   Matplotlib grafik çizim paketi Python'la bilimsel programlamanın en önemli araçlarından birisidir. Çok kuvvetli bir paket olan Matplotlib ile verileri etkileşimli olarak görselleştirebilir, yayınlamaya uygun yüksek kalitede çıktılar hazırlayabiliriz. Hem iki boyutlu hem de üç boyutlu grafikler üretilebilir. (https://pybilim.wordpress.com/2014/01/01/matplotlib-1-temel-grafikler/)

PyQt:
   python ile Qt arayüzü (GUI) yapabileceğim pakettir (modüller topluluğu). Formlar (windows, pencere), textboxlar, labeller, butonlar vb birçok kontrol hazırlayıp bunlarla python aracılığıyla işlem yapmamızı sağlar.

Gtk:
   pyqt ile aynı işleve sahiptir,

Tkinter:
   tkinter, python ile beraber gelen bir pakettir. Yüklemek için ayrıca işlem yapmanız gerekmez. Tkinter de big GUI yapma aracıdır ama pyqt ye göre kısıtlıdır, çalışması ve tasarımı zordur. Ben genel olarak Pyqt kullanmaktayım.

Pandas:
   Pandas, Python'da hızlı ve kolay veri analizi yapmak için tasarlanmış üst düzey veri yapıları ve işleme araçları içerir. Pandas, NumPy'nin üzerine inşa edilmiş ve NumPy merkezli uygulamalarda kullanımı kolaylaştırmaktadır.Pandas, açık kaynaklı, BSD lisanslı bir kütüphane olup, Python programlama dili için yüksek performanslı, kullanımı kolay veri yapıları ve veri analizi araçları sunmaktadır.Pandas, NumFocus sponsorluğunda yürütülen bir projedir. (https://www.derinanalitik.com/single-post/pandas-nedir)

OpenCV:
   Görüntü işleme, bilgisayar ortamında bulunan resimlerin, videoların işlenmesi, isteğe uygun hale getirilmesi için hazırlanmış bir modüldür. OpenCV tarafından Python doğrudan desteklenmektedir.Bundan dolayı herhangi ara yazılım gerekmemektedir. OpenCv kendi içinde yapayzeka bileşenleride barındırmaktadır.

Basemap:
   Harita, coğrafi çalışmalar için kullanılabilen bir modüldür.

PySerial:
   Seriport için gerekli modüldür.

PyUsb:
   Usb Çalışması için gerekli olan modüldür.

socket:
   UDP yada TCP çalışması yapabilmek için gerekli olan modüldür.


Tabiki yukarıda sayılanlar denizdeki birkaç damla, daha karışık, farklı platformlar üzerinde çalışmak için düzenlenmiş modüller/paketler bulunmaktadır. Burada saydıklarım Gömülü Yazılımcı (neyse artık) nın kullanabileceği, ihtiyaç duyacağı birkaç modül. bunları bir köşeye yazmak istedim. Birkaç Proje Gerçekleştirip (MCU-SERİPORT örneğinde Pyqt serial modülleri ile) bunlarla çalışmalar yapacağız.

Hadi hayırlısı...

muhittin_kaplan

#7
OOP olalım.
OOP, malum Nesne Yönelimli Programlama nın ingilizce kısaltmasıdır. uzun uzadıya Şartları nedir ne olursa OOp olur yazmayacağım,
Pythonda Class,Method gibi bileşenleri kullanacağız, kendi yazdığımız classları, içerisindeki fonksiyonları kullanacağız. (Böl Yönet)
önce basit bir class oluşturalım.

myClass.py dosya içeriği
class YerFistigi:
    '''
        Bu Sınıf Yerfistigi ait işlemleri içerir
    '''
    def __init__(self,Ozellik,cins):
        self.spec=Ozellik
        self.type=cins


    def fistikOzellikleriYaz(self,mesaj):
        print (mesaj,self.spec)


class Portakal:
    '''
        Bu Sınıf Portakal a ait işlemleri içerir
    '''


    def __init__(self,Ozellik,cins):
        self.spec=Ozellik
        self.type=cins


    def PortakalOzellikleriYaz(self,mesaj):
        print(self.spec ,self.type,mesaj)


    def PortakalOzellikleriKaydet(self):
        print("DOSYAYA YAZILIYOR-----------",self.spec,self.type)


main.py dosya içeriği
from myClass import Portakal
from myClass import YerFistigi


print (Portakal.__doc__)


Vasikton=Portakal(cins="Vaşikton",Ozellik="Sulu, Oval, İnceKabuk")


Vasikton.PortakalOzellikleriYaz("Dörtyol Erzin Yöresinde Çok Görülür")


Kirmantin=Portakal(cins="Kirmantin",Ozellik="Sulu, Oval, İnceKabuk, Çekirdekli")


Kirmantin.PortakalOzellikleriKaydet()


Vasikton.PortakalOzellikleriYaz("")


BirinciSınıfFıstık=YerFistigi(cins="Osmaniye",Ozellik="1Numaralı Elek")
BirinciSınıfFıstık.fistikOzellikleriYaz(mesaj="Osmaniyede Yetiştirilir")


şimdi biraz üzerine yazalım/konuşalım.

Bir dosyanın içerisinde birden fazla class olabilir, bu bu sınıfları main.py dosyasının içerisinede yazabilirdik. Ben genelde tercih etmem (genelde OOP da yazmam ama PyQT ile gui yaparken lazım olacak).
Bir sınıf içerisinde __init__ fonksiyonu isteğe bağlıdır (ama önerilir), bu fonksiyon sınıf ilk çağrıldığında/oluşturulduğunda çalışır. self ile tanımlanan değişkenler o sınıf içerisinde tüm fonksiyonlarda kullanılır.
Bir sınıf içerisindeki fonksiyona parametre geçmek istiyorsdak ve sadece o fonksiyonda kullanılacaksa, basit şekilde fonksiyona parametre ile yapabilirsiniz.
[def fistikOzellikleriYaz(self,mesaj): buradaki "mesaj" sadece bu fonksiyonda kullanılır]

(Sonraki Çalışmamızda PyQt ile arayüz tasarımına gireceğimiz için bir girizgah yazdık)



Kolaylıklar dilerim.

muhittin_kaplan

#8
PyQt5 ile basit bir arayüz yaptık, bu arayüzde bir buton ve label oluşturduk. Buton a bir görev atadık, bunların hepsini kod yazarak yaptık. Sonraki yazıda PyQt designer ile pencere oluşturacağız.
#Kullanacağımız modülleri dahil edelim

import sys
from PyQt5.QtWidgets import QWidget,QApplication,QPushButton,QLabel


#Forumu Oluşturmak için Sınıfımızı Hazırlayalım

class App (QWidget):
    #sınıfın hazırlığını yapalım
    def __init__(self):
        super().__init__()
        self.initUI() #pencereyi oluşturan func çağıralım

     #pencere elemanlarımızı oluşturalım
    def initUI(self):
        self.setWindowTitle("PencereBasligi")
        self.setGeometry(50,20,300,200)

        #Buton Ekleyelim
        self.Button_1=QPushButton("Bu Bir Buton",self) #Buton Başlığı ve Ait olduğu obje
        self.Button_1.move(50,50)

        #butona görev atayalım
        self.Button_1.clicked.connect(self.Button_1_Clicked)


        #Label Ekleyelim
        self.Label_1=QLabel("Merhaba PyQt5",self)
        self.Label_1.move(20,20)
        #pencere görünsün
        self.show()

    def Button_1_Clicked(self):
        print("Buton Clicked")
        self.Label_1.setText("Butona Basıldı")



def main():
    app=QApplication(sys.argv)
    pencere=App()
    sys.exit(app.exec_())

if __name__=="__main__":
    main()




muhittin_kaplan

#9
PyQT Designer ile Form Tasarlamak


https://www.youtube.com/watch?v=-YhLp3xAwAY

Kalın Sağlıcakla.

muhittin_kaplan

#10