# # Python Sayılar

Python veri tiplerine genel bir baktıktan sonra ilk veri tip kategorimiz olan **Python Sayılar** ile derslerimize devam ediyoruz. Python programlama dilinde sayısal tiplerde üç adet veri tipimiz mevcut olup bunlar şunlardır; Bu üç değişken sayı tipi için küçük bir örnek verelim hemen:

```python
a = 5        # int
b = 46.53    # float
c = 3j       # complex
```

Değişkenlerimizin hangi veri tipinde olduğunu öğrenmek için **type()** fonksiyonunu kullandığımızı hatırlıyorsunuz. Öyleyse hemen yukarıdaki örnekte yer alan değişkenlerin tipini teyit edelim.

```python
print(type(a))    # <class 'int'>
print(type(b))    # <class 'float'>
print(type(c))    # <class 'complex'>
```

## 1. Int Veri Tipi

Python sayısal veri tiplerinden olan **int** (integer) veri tipi konumuzla başlayalım.

{% hint style="info" %}
Bir `int` değişken sonsuz uzunlukta pozitif ve negatif tam sayılardan oluşabilir. Sadece ondalık değerlere sahip olamaz.
{% endhint %}

```python
x = 10
y = 35656222554887711
z = -3255522

print(type(x))    # <class 'int'>
print(type(y))    # <class 'int'>
print(type(z))    # <class 'int'>
```

## 2. Float Veri Tipi

Python sayısal veri tiplerinden olan **float** (floating point number) veri tipi ile devam ediyoruz.

{% hint style="info" %}
Bir `float` değişken bir veya daha fazla uzunluktaki küsüratlı basamağa sahip pozitif ve negatif sayılardan oluşabilir.
{% endhint %}

```python
x = 1.10
y = 1.0
z = -35.59985

print(type(x))    # <class 'float'>
print(type(y))    # <class 'float'>
print(type(z))    # <class 'float'>
```

{% hint style="info" %}
Float veri tipinde `e` veya **E** ile 10 un katsayılarını belirtebilirsiniz.
{% endhint %}

```python
x = 15e3
y = 12E4
z = -87.7e100

print(x)    # 35000.0
print(y)    # 120000.0
print(z)    # -8.77e+101

print(type(x))    # <class 'float'>
print(type(y))    # <class 'float'>
print(type(z))    # <class 'float'>
```

## 3. Complex Veri Tipi

Python sayısal veri tiplerinden olan **complex** veri tipi ile devam ediyoruz.

{% hint style="info" %}
Bir **complex** veri tipinde sanal kısımlar **j** harfiyle belirtilir.
{% endhint %}

```python
x = 3+5j
y = 5j
z = -5j

print(x)    # (3+5j)
print(y)    # 5j
print(z)    # (-0-5j)

print(type(x))    # <class 'complex'>
print(type(y))    # <class 'complex'>
print(type(z))    # <class 'complex'>
```

## 4. Tip Dönüşümleri

Bir veri tipi `int()` , `float()` , ve `complex()` fonksiyonları kullanılarak başka bir veri tipine dönüşüm yapılabilir.

### 4.1 Int veri Tipinden float Veri Tipine Dönüşüm

Python programlamada **int** veri tipinden **float** veri tipine çevirme işlemi için **float()** fonksiyonunu kullanabilirsiniz.

```python
x = 3    # int

a = float(x)

print(a)            # 3.0

print(type(a))      # <class 'float'>
```

### 4.2 Float veri Tipinden int Veri Tipine Dönüşüm

Python programlamada **float** veri tipinden **int** veri tipine çevirme işlemi için **int()** fonksiyonunu kullanabilirsiniz.

```python
x = 7.3    # float

a = int(x)

print(a)            # 7

print(type(a))      # <class 'int'>
```

{% hint style="info" %}
Float veri tipinden int veri tipine dönüşüm yaparken elinizdeki float sayının en yakın olduğu taban veya tavan int sayıya dönüşmesi için **round()** fonksiyonunu kullanabilirsiniz.
{% endhint %}

```python
x = 7.3
y = 7.5
z = 7.8

a = round(x)
b = round(y)
c = round(z)

print(a)    # 7
print(b)    # 8
print(c)    # 8
```

### 4.3 Int veri Tipinden complex Veri Tipine Dönüşüm

Python programlamada **int** veri tipinden **complex** veri tipine çevirme işlemi için **complex()** fonksiyonunu kullanabilirsiniz.

```python
x = 3    # int

a = complex(x)

print(a)            # (3+0j)

print(type(a))      # <class 'complex'>
```

### 4.4 Float veri Tipinden complex Veri Tipine Dönüşüm

Python programlamada **float** veri tipinden **complex** veri tipine çevirme işlemi için **complex()** fonksiyonunu kullanabilirsiniz.

```python
x = 5.7    # float

a = complex(x)

print(a)            # (5.7+0j)

print(type(a))      # <class 'complex'>
```

{% hint style="warning" %}
Complex veri tipindeki bir sayıyı başka bir veri tipine çeviremezsiniz.
{% endhint %}

## 5. Rastgele Sayı Üretme & Oluşturma

Python özünde rastgele sayılar üretmek için bir **random()** fonksiyonu barındırmaz. Fakat ek modüller ile rastgele sayı oluşturma işlemi yapılabilir. Bunun için öncelikle `import random` komutu ile gerekli kütüphaneyi kodumuza eklememiz gerekiyor. Aşağıdaki örneği inceleyebilirsiniz.

```python
import random

print(random.randrange(1,10))
```

Bu örnek ile 1 ve 9 arasında rastgele sayılar üretebilirsiniz. Aşağıdaki örnek ile de bir tavan sayı belirleyip 0 ile o sayı arasında rastgele sayılar üretebilirsiniz.

```python
import random
print(random.randrange(3))
```

Bu örnekte oluşabilecek sayılar sadece 0,1 ve 2 dir.

## 6. Matematiksel İşlemler ve Fonksiyonlar

Bu bölümde Python'da sayılar üzerinde kullanabileceğimiz operantları ve en çok kullanılan fonksiyonları inceleyeceğiz.

```python
# Toplama İşlemi
>>> x + y

# Çıkarma İşlemi
>>> x - y

# Çarpma İşlemi
>>> x * y    

# Bölme İşlemi
>>> x / y

# Bölme İşlemi (Küsüratı siler)
>>> x // y

# Mod İşlemi
>>> x % y

# Sayıyı negatife çevirme
>>> -x

# Mutlak Değer
>>> abs(x)

# Kompleks Sayının Eşleniği
>>> c.conjugate()

# Bölme ve Mod İşlemi (x // y, x % y)
>>> divmod(x, y)

# X in Y üssü (ikiside aynı işlemi yapar)
>>> pow(x, y)
>>> x**y
```
