random Modülü¶
Eğer yazdığınız programlarda, belirli bir aralıkta rastgele sayıların
üretilmesine ihtiyaç duyarsanız Python’ın standart kütüphanesinde bulunan
random
adlı bir modülü kullanabilirsiniz.
Tıpkı öteki modüllerde olduğu gibi, random
modülü de birtakım faydalı
nitelik ve fonksiyonları barındırır. Biz bu bölümde, bu nitelik ve fonksiyonlar
arasında en sık kullanılanları inceleyeceğiz.
Elbette bu modülü kullanabilmek için öncelikle modülümüzü içe aktarmamız gerekiyor:
import random
Bu işlemin ardından, bu modülün bize sunduğu bütün işlevlerden yararlanabiliriz.
random()¶
random
modülünün random()
adlı fonksiyonunu kullanarak, 0.0 ile 1.0
arasında rastgele bir kayan noktalı sayı üretebilirsiniz:
>>> random.random()
0.8064301704207291
random()
fonksiyonu, kendisini her çalıştırışınızda farklı bir kayan noktalı
sayı üretecektir:
>>> random.random()
0.6825988062501599
Üretilen sayıların 0 ile 1 arasında olduğunu özellikle dikkatinizi çekmek isterim.
Mesela bu fonksiyonu kullanarak, 0 ile 1 arası 10 tane sayı üretelim. Bu sayıları gösterirken de noktadan sonra yalnızca dört basamak görüntülenmesine izin verelim:
>>> for i in range(10):
... print("{:.4f}".format(random.random()))
...
0.3094
0.5277
0.1588
0.2832
0.8742
0.9989
0.6847
0.5672
0.5529
0.9717
uniform()¶
Biraz önce gördüğümüz random()
fonksiyonu, dikkat ederseniz herhangi bir
parametre almıyordu. Çünkü bu fonksiyonun tek görevi 0 ile 1 arası sayılar
üretmektir. Peki ya biz üreteceğimiz sayıların farklı bir aralıkta olmasını
istersek ne yapacağız?
İşte, belirli bir aralıkta kayan noktalı sayılar üretmek istediğimizde,
random()
yerine uniform()
adlı bir fonksiyon kullanacağız. Dikkatlice
inceleyin:
>>> random.uniform(0.5, 1.5)
Bu kod, her çalıştırılışında 0.5 ile 1.5 arası rastgele bir kayan noktalı sayı üretecektir:
>>> random.uniform(0.5, 1.5)
0.9624863371746406
>>> random.uniform(0.5, 1.5)
0.900446344810926
randint()¶
Şimdiye kadar öğrendiğimiz random()
ve uniform()
fonksiyonları bize
yalnızca kayan noktalı sayılar üretme imkanı veriyordu. Ancak elbette biz kimi
durumlarda kayan noktalı sayılar yerine tam sayılar üretmek de isteyebiliriz.
İşte böyle bir durumda, random
modülünün randint()
adlı başka bir
fonksiyonunu kullanabiliriz.
Mesela 45 ile 500 arasında rastgele bir sayı üretmek isterseniz,
randint()
fonksiyonunu şu şekilde kullanabilirsiniz:
>>> random.randint(45, 500)
Bu fonksiyon, her çalıştırılışında 45 ile 500 arasında rastgele bir tam sayı üretecektir.
choice()¶
random
modülünün choice()
adlı fonksiyonunu kullanarak, dizi niteliği
taşıyan veri tiplerinden rastgele öğeler seçebiliriz. Bu tanım biraz anlaşılmaz
gelmiş olabilir. O yüzden bunu bir örnekle açıklayalım.
Diyelim ki elimizde şöyle bir liste var:
>>> liste = ['ali', 'veli', 'ahmet',
... 'mehmet', 'celal', 'selin', 'nihat']
Bildiğiniz gibi, listeler, dizi niteliği taşıyan veri tipleridir. Dolayısıyla
choice()
fonksiyonunu kullanarak bu diziden rastgele bir öğe seçebiliriz:
>>> liste = ['ali', 'veli', 'ahmet', 'mehmet', 'celal', 'selin', 'nihat']
>>> random.choice(liste)
'ali'
>>> random.choice(liste)
'mehmet'
>>> random.choice(liste)
'selin'
Tıpkı bu örnekte olduğu gibi, karakter dizileri de dizi niteliği taşıyan bir
veri tipi olduğu için, choice()
fonksiyonuna cevap verir:
>>> kardiz = 'istihza'
>>> random.choice(kardiz)
'i'
Peki acaba bu ‘i’ harfi karakter dizisinin başındaki ‘i’ harfi mi, yoksa ortasındaki ‘i’ harfi mi? Sizce bunu nasıl anlayabiliriz?
shuffle()¶
shuffle()
fonksiyonunu kullanarak, dizi niteliği taşıyan veri tiplerindeki
öğeleri karıştırabilirsiniz (yani öğelerin sırasını karışık bir hale
getirebilirsiniz). Mesela:
>>> l = list(range(10))
10 öğeli bir listemiz var. Bu listedeki öğeler 0’dan 10’a kadar düzgün bir şekilde sıralanmış:
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Şimdi biz shuffle()
fonksiyonunu kullanarak öğeleri karıştıracağız:
>>> random.shuffle(l)
>>> l
[8, 0, 7, 9, 1, 4, 6, 5, 3, 2]
Burada dikkat etmemiz gereken önemli nokta, shuffle()
fonksiyonunun, özgün
listenin kendisi üzerinde değişiklik yapıyor oluşudur. Yani liste üzerinde
shuffle()
metodunu uyguladıktan sonra artık özgün listeyi kaybediyoruz.
Dolayısıyla elimizde artık öğeleri 0’dan 10’a kadar düzgün bir şekilde
sıralanmış liste yok. Onun yerine, öğeleri karıştırılmış bir liste var elimizde.
Liste üzerine shuffle()
fonksiyonunu her uygulayışınızda özgün listenin
öğeleri bir daha karıştırılacaktır.
Peki size bir soru…
Elinizde şöyle bir liste var:
arkadaşlar = [‘ali’, ‘veli’, ‘mehmet’, ‘ahmet’, ‘serkan’, ‘selin’]
Görevimiz bu listenin öğelerini karıştırmak. Ama biz aynı zamanda özgün arkadaşlar listesindeki öğe sıralamasını da kaybetmek istemiyoruz. Bunu nasıl başarabiliriz?
randrange()¶
randrange()
fonksiyonu, yukarıda öğrendiğimiz randint()
fonksiyonu ile
aynı işi yapar. Yani her iki fonksiyon da, belli bir aralıkta rastgele
tamsayılar üretir. Ancak aralarında iki ufak fark bulunur.
İlk önce birincisine bakalım…
Dikkatlice inceleyin:
>>> random.randrage(10)5
Gördüğünüz gibi, randrange()
fonksiyonunu tek parametre ile
kullanabiliyoruz. Yukarıdaki komutu eğer randint()
ile yazmak istersek şunu
yapmamız gerekir:
>>> random.randint(0, 10)
randrange()
fonksiyonundan farklı olarak, randint()
fonksiyonunu iki
parametre ile kullanmamız gerekir. Eğer bu fonksiyona tek parametre verirsek
hata alırız:
>>> random.randint(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: randint() missing 1 required positional argument: 'b'
Elbette, eğer istersek randrange()
fonksiyonunu da çift parametre ile
kullanarak, farklı bir sayı aralığı belirtme imkanına sahibiz:
>>> random.randrange(10, 500)
Bu komut, 10 ile 500 arası rastgele tam sayılar üretecektir. Ayrıca bu komut şununla da eşdeğerdir:
>>> random.randint(10, 500)
Bu iki fonksiyon arasındaki ikinci fark ise, rastgele sayı üretilecek aralığın son değeridir. Bu muğlak ifadeyi bir örnekle anlaşılır hale getirmeye çalışalım:
>>> random.randrange(10, 20)
Bu komut, 10 ile 20 arasında rastgele bir sayı üretir. Üretilecek en düşük sayı 10 iken, en büyük sayı ise 19 olacaktır. 20 sayısı asla üretilmez.
Bir de şuna bakalım:
>>> random.randint(10, 20)
Burada da yine 10 ile 20 arasında rastgele bir sayı üretilir. Tıpkı
randrange()
metodunda olduğu gibi, üretilecek en düşük sayı 10’dur. Ancak
en büyük sayı 20 olacaktır.
Bu iki fonksiyonu kullanırken bu farklılığa dikkat etmemiz gerekir. Aksi halde yazdığımız programlar hatalı çalışabilir.
Peki size bir soru: Acaba randint()
ile randrange()
arasındaki bu farkı
nasıl kanıtlarsınız?
sample()¶
‘Sample’ kelimesi ‘numune’ anlamına gelir. İşte kelimenin bu anlamına paralel
olarak sample()
fonksiyonu da, dizi niteliği taşıyan veri tiplerinden belli
sayıda numune alınabilmesini sağlar. Bakınız:
>>> liste = range(100)
100 öğeli bir liste oluşturduk. Şimdi bu listeden 5 tane rastgele numune alalım:
>>> random.sample(liste, 5)
[56, 74, 2, 3, 80]
Gördüğünüz gibi, sample()
fonksiyonunun ilk parametresi numune alınacak
diziyi, ikinci parametresi ise bu diziden kaç tane numune alınacağını
gösteriyor.
Önemli Not
Sorularınızı yorumlarda dile getirmek yerine Yazbel Forumunda sorarsanız çok daha hızlı cevap alabilirsiniz.Belgelerdeki bir hata veya eksiği dile getirecekseniz lütfen yorumları kullanmak yerine Github'da bir konu (issue) açın.
Eğer yazdığınız yorum içinde kod kullanacaksanız kodlarınızı <pre><code> etiketleri içine alın. Örneğin:
<pre><code class="python"> print("Merhaba Dünya!") </code></pre>