{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bu dersteki bütün IPython Notebook'lar  adresinde https://github.com/sinanonur/Python-Lectures mevcuttur ve [bu adres](https://github.com/rajathkumarmp/Python-Lectures)teki içerik Türkçe'ye çevirilerek hazırlanmıştır."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The Zen Of Python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import this"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Değişkenler (Variables)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bir varlığı ya da değeri belirtmek içni kullandığımız isimlere değişken denir. Pythonda değişkenler aşşağıdaki gibi tanımlanıp kullanılabilir:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = 2\n",
    "y = 5\n",
    "xy = 'Hey'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print x+y, xy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Aynı değer birden fazla değişkene atanabilir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = y = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print x,y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Operatörler (Operators)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aritmetik Operatörler (Arithmetic Operators)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| Sembol | İşlem |\n",
    "|----|---|\n",
    "| +  | Toplama |\n",
    "| -  | Çıkartma |\n",
    "| /  | Bölme |\n",
    "| %  | Mod |\n",
    "| *  | Çarpma |\n",
    "| //  | yuvarlayan bölme |\n",
    "| **  | kuvvet alma |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "1+2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "2-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "1*2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "1/2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "0? Bunun sebebi bölünen ve bölenin tamsayı(integer) fakat sonucun ondalık (float) olmasıdır ve bir tamsayı döndürülür. Bölünen ya da bölenden birisini ondalık sayıya çevirerek doğru cevap alınabilir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "1/2.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "15%10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Yuvarlayan bölme işlemi aslında sonucu en yakın tamsayıya yuvarlamaktan ibarettir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "2.8//2.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## İlişkisel Operatörler"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| Sembol | İşlem |\n",
    "|----|---|\n",
    "| == | True, eğer eşitse |\n",
    "| !=  | True, eşit değilse |\n",
    "| < | küçüktür |\n",
    "| > | büyüktür |\n",
    "| <=  | küçük eşit |\n",
    "| >=  | büyük eşit |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "z = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "z == 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "z > 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bitwise İşlemler (Bit işlemleri)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| Sembol | İşlem |\n",
    "|----|---|\n",
    "| &  | Mantıksal Ve |\n",
    "| l  | Mantıksal Veya |\n",
    "| ^  | XOR |\n",
    "| ~  | Negate (Tersi) |\n",
    "| >>  | Sağa kaydır |\n",
    "| <<  | Sola kaydır |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "a = 2 #10\n",
    "b = 3 #11"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print a & b\n",
    "print bin(a&b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "5 >> 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "0000 0101 -> 5 \n",
    "\n",
    "0 ekleyerek (0 padding) basamakları 1 kez sağa kaydırma.\n",
    "\n",
    "0000 0010 -> 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "5 << 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "0000 0101 -> 5 \n",
    "\n",
    "0 ekleyerek Basamakları 1 kez sola kaydırma\n",
    "\n",
    "0000 1010 -> 10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Gömülü (Built-in) Fonksiyonlar"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Python bir çok gömülü fonksiyon ile birlikte gelir."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bir sistemden diğerine çevirme"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hexadecimal (Onaltılık) sistemden decimal(onluk) sisteme geçmek **0x** prefixi ekleyerek tersi **hex( )** fonksiyonunu kullanarak yapılabilir.\n",
    "Octal(sekizlik) sistem geçişleri de benzer şekilde **0** prefixi ve **oct( )** fonksitonu ile yapılabilir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "hex(170)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "0xAA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "oct(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "010"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**int( )** 2 parametre alır ve birisi diğer sayı sistemindeki değeri ikincisi ise tabandır. Diğer sayı sistemindeki girdi String(yazı) şeklinde olmalıdır."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print int('010',8)\n",
    "print int('0xaa',16)\n",
    "print int('1010',2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**int( )** aynı zamanda ondalık bir sayıyı ya da String şeklinde ifade edilmiş bir tamsayıyı tamsayı formatına çevirmek için kullanılabilir. Benzer şekilde **str( )** fonksiyonu Sytinge çevirmek için kullanılır."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print int(7.7)\n",
    "print int('7')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bunun dışında\n",
    "**bin( )** ikili(binary)\n",
    "**float( )** tamsayı/ondalık değerler ,için kullanılır.\n",
    "**chr( )** ASCII değeri alfabedeki karşılığına çevirmek için,\n",
    "**ord( )** ise tersi için kullanılır."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "chr(98)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "ord('b')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aritmetik ifade sadeleştirme"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**round( )** fonksiyonu belirtilen sayıyı en yakın tamsayıya ya da belirtilen hassasiyeteki sayıya çevirebilir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "print round(5.6231) \n",
    "print round(4.55892, 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**complex( )**, karmaşık sayı ranımlamak için kullanılır.\n",
    "**abs( )** mutlak değeri verir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "c =complex('5+2j')\n",
    "print abs(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**divmod(x,y)** bölüm ve kalanı tuple(sonraki bölümlerde öğreneceğiz) formunda (bölüm, kalan)şeklinde verir. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "divmod(9,2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**isinstance( )**, eğer verilen ifade verilen sınıfın bir üyesiyse True döndürür. Aynı anda birden fazla sınıfı test etmek mümkündür."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print isinstance(1, int)\n",
    "print isinstance(1.0,int)\n",
    "print isinstance(1.0,(int,float))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**cmp(x,y)**\n",
    "\n",
    "|x ? y|Çıktı|\n",
    "|---|---|\n",
    "| x < y | -1 |\n",
    "| x == y | 0 |\n",
    "| x > y | 1 |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print cmp(1,2)\n",
    "print cmp(2,1)\n",
    "print cmp(2,2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**pow(x,y)** $x^y$ değerini hesaplamak için kullanılır.\n",
    "\n",
    "**pow(x,y,z)** de ($x^y$ % z) değerini hesaplamak için kullanılır. Yukarıdaki değeri hesaplayıp modunu almaktadır."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print pow(3,3)\n",
    "print pow(3,3,5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**range( )** fonksiyonu verilen aralıktaki tamsayıları verir.Artışı vererek seriler oluşturmak için de kullanılabilir. Sonuçlar liste (daha sonra değinilecek) şeklinde verilir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print range(3)\n",
    "print range(2,9)\n",
    "print range(2,27,8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Kullanıcıdan değer alma"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**raw_input( )** bir girdi okuyarak bir string içinde saklar. Kullanıcı bir tamsayı girerse önce bu tamsayıya çevrilmeli sonra işleme devame dilmelidir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "abc = raw_input(\"Buraya yazdığınız şey abc değişkeninde saklanacaktır. \\t\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "type(abc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**input( )**, sadece tamsayı girdi kabul etmek içindir."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "abc1 =  input(\"bu değişkende sadece tamsayı saklanabilir. \\t\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "type(abc1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Not: **type( )** verilen sayı ya da değişkenin formatını ya da türünü döndürür."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}